/* Espe | Ein schlichtes Werkzeug zur Mitglieder-Verwaltung | Backend Copyright (C) 2024 Christian Fraß This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace _espe.api { /** */ export function register_invite_create( rest_subject : lib_plankton.rest.type_rest ) : void { register< { membership_number_mode : int; membership_number_value : (null | string); name_mode : int; name_value : string; email_address_mode : int; email_address_value : (null | string); groups_mode : int; groups_value : Array; expiry ?: (null | int); // notification_target_url_template ?: (null | string); }, ( string | { id : _espe.type.member_id; key : string; } ) >( rest_subject, lib_plankton.http.enum_method.post, "/invite/create", { /** * @todo translation */ "description": "erstellt eine Einladung neues Mitglied und gibt die erzeugte ID und den erzeugten Schlüssel aus", "input_schema": () => ({ "type": "object", "nullable": false, "additionalProperties": false, "properties": { /* "membership_number": { "type": "string", "nullable": false, "description": "Mitgliedsnummer" }, "name_real_value": { "type": "string", "nullable": false, "description": "Klarname" }, "email_address_private": { "type": "string", "nullable": true, "description": "private E-Mail-Adresse" }, "groups": { "nullable": false, "type": "array", "items": { "type": "string", "nullable": false, } }, "notification_target_url_template": { "type": "string", "nullable": true, "description": "Platz-Halter: id" }, */ }, "required": [ "membership_number_value", "name_value", "email_address_value", "groups_value", "expiry", ] }), "output_schema": () => ({ "type": "object", "nullable": false, "properties": { "id": { "type": "number", "nullable": false, }, "key": { "type": "string", "nullable": false, }, }, "additionalProperties": false, "required": [ "id", "key", ] }), "restriction": restriction_logged_in, "execution": async ({"input": input}) => { if (input === null) { return Promise.reject(new Error("impossible")); } else { if ( (! _espe.conf.get().settings.misc.facultative_membership_number) && ( (input.membership_number_value === null) || (input.membership_number_value === "") ) ) { return Promise.resolve({ "status_code": 400, "data": "membership number required" }); } else { const invite_info : {id : _espe.type.invite_id; key : _espe.type.invite_key;} = await _espe.service.invite.create( { "membership_number_mode": _espe.helpers.invite_prefill_mode_decode(input.membership_number_mode), "membership_number_value": input.membership_number_value, "name_mode": _espe.helpers.invite_prefill_mode_decode(input.name_mode), "name_value": input.name_value, "email_address_mode": _espe.helpers.invite_prefill_mode_decode(input.email_address_mode), "email_address_value": input.email_address_value, "groups_mode": _espe.helpers.invite_prefill_mode_decode(input.groups_mode), "groups_value": input.groups_value, }, { "expiry": input.expiry, } ); return Promise.resolve({ "status_code": 201, "data": invite_info }); } } } } ); } }