namespace _zeitbild.api { /** */ export function register_calendar_change( rest_subject : lib_plankton.rest_caldav.type_rest ) : void { register< { name : string; access : { public : boolean; default_level : ("none" | "view" | "edit" | "admin"); attributed : Array< { user_id : int; level : ("none" | "view" | "edit" | "admin"); } >; }; }, null >( rest_subject, lib_plankton.http.enum_method.put, "/calendar/:calendar_id", { "description": "ändert einen Kalender (Resource ist fest)", "input_schema": () => ({ "nullable": true, // TODO }), "output_schema": () => ({ "nullable": true, "type": "null", }), "restriction": restriction_logged_in, "execution": async (stuff) => { const session : {key : string; value : lib_plankton.session.type_session;} = await session_from_stuff(stuff); const user_id : _zeitbild.type_user_id = await _zeitbild.service.user.identify(session.value.name); if (stuff.input === null) { return Promise.reject(new Error("impossible")); } else { const calendar_id : _zeitbild.type_calendar_id = parseInt(stuff.path_parameters["calendar_id"]); // TODO move logic to calendar service const calendar_object_old : _zeitbild.type_calendar_object = await _zeitbild.service.calendar.get( calendar_id, user_id ); const calendar_object_new : _zeitbild.type_calendar_object = { "name": stuff.input.name, "access": { "public": stuff.input.access.public, "default_level": _zeitbild.value_object.access_level.from_string(stuff.input.access.default_level), "attributed": lib_plankton.map.hashmap.implementation_map( lib_plankton.map.hashmap.make( x => x.toFixed(0), { "pairs": ( stuff.input.access.attributed .map( (entry) => ({ "key": entry.user_id, "value": _zeitbild.value_object.access_level.from_string(entry.level), }) ) ), } ) ), }, "resource_id": calendar_object_old.resource_id }; await _zeitbild.service.calendar.change( calendar_id, calendar_object_new, user_id ); return Promise.resolve( { "status_code": 200, "data": null, } ); } } } ); } }