From 485589e3f7aecf6e2970b07f4ce313528bdb294a Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Thu, 26 Sep 2024 10:52:31 +0200 Subject: [PATCH] [add] backend:calendar_add --- source/logic/backend.ts | 67 +++++++++++++++++++++++++++++++++++++++-- source/logic/types.ts | 31 +++++++++---------- 2 files changed, 79 insertions(+), 19 deletions(-) diff --git a/source/logic/backend.ts b/source/logic/backend.ts index ebf07c2..125eced 100644 --- a/source/logic/backend.ts +++ b/source/logic/backend.ts @@ -12,6 +12,36 @@ namespace _zeitbild.frontend_web.backend ) = null; + /** + */ + function access_level_encode( + access_level : _zeitbild.frontend_web.type.enum_access_level + ) : ("none" | "view" | "edit" | "admin") + { + switch (access_level) { + case _zeitbild.frontend_web.type.enum_access_level.none: return "none"; + case _zeitbild.frontend_web.type.enum_access_level.view: return "view"; + case _zeitbild.frontend_web.type.enum_access_level.edit: return "edit"; + case _zeitbild.frontend_web.type.enum_access_level.admin: return "admin"; + } + } + + + /** + */ + function access_level_decode( + access_level_encoded : ("none" | "view" | "edit" | "admin") + ) : _zeitbild.frontend_web.type.enum_access_level + { + switch (access_level_encoded) { + case "none": return _zeitbild.frontend_web.type.enum_access_level.none; + case "view": return _zeitbild.frontend_web.type.enum_access_level.view; + case "edit": return _zeitbild.frontend_web.type.enum_access_level.edit; + case "admin": return _zeitbild.frontend_web.type.enum_access_level.admin; + } + } + + /** */ export async function init( @@ -221,6 +251,37 @@ namespace _zeitbild.frontend_web.backend } + /** + */ + export async function calendar_add( + calendar_object : _zeitbild.frontend_web.type.type_calendar_object + ) : Promise< + _zeitbild.frontend_web.type.calendar_id + > + { + return call( + lib_plankton.http.enum_method.post, + "/calendar", + { + "name": calendar_object.name, + "access": { + "default_level": access_level_encode(calendar_object.access.default_level), + "attributed": ( + lib_plankton.map.dump(calendar_object.access.attributed) + .map( + (pair) => ({ + "user_id": pair.key, + "level": access_level_encode(pair.value), + }) + ) + ) + }, + "resource": calendar_object.resource, + } + ); + } + + /** */ export async function calendar_event_add( @@ -233,7 +294,7 @@ namespace _zeitbild.frontend_web.backend lib_plankton.string.coin( "/calendar/{{calendar_id}}/event", { - "calendar_id": calendar_id, + "calendar_id": calendar_id.toFixed(0), } ), event_object @@ -254,8 +315,8 @@ namespace _zeitbild.frontend_web.backend lib_plankton.string.coin( "/calendar/{{calendar_id}}/event/{{event_id}}", { - "calendar_id": calendar_id, - "event_id": event_id, + "calendar_id": calendar_id.toFixed(0), + "event_id": event_id.toFixed(0), } ), null diff --git a/source/logic/types.ts b/source/logic/types.ts index ee36ca4..23e277e 100644 --- a/source/logic/types.ts +++ b/source/logic/types.ts @@ -6,13 +6,12 @@ namespace _zeitbild.frontend_web.type /** */ - export type role = ( - "admin" - | - "editor" - | - "viewer" - ); + export enum enum_access_level { + none, + view, + edit, + admin + } /** @@ -89,16 +88,16 @@ namespace _zeitbild.frontend_web.type /** */ - export type calendar_object = { + export type type_calendar_object = { name : string; - public : boolean; - members : Array< - { - user_id : user_id; - role : role; - } - >; - resource_id : resource_id; + access : { + default_level : enum_access_level; + attributed : lib_plankton.map.type_map< + user_id, + enum_access_level + >; + }; + resource : resource_object; }; }