backend/source/api/actions/invite_create.ts

197 lines
5.1 KiB
TypeScript
Raw Normal View History

2025-03-31 20:24:43 +00:00
/*
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
<https://www.gnu.org/licenses/>.
*/
namespace _espe.api
{
/**
*/
export function register_invite_create(
2025-04-03 12:18:01 +00:00
rest_subject : lib_plankton.rest_http.type_rest
2025-03-31 20:24:43 +00:00
) : void
{
2025-04-03 12:18:01 +00:00
lib_plankton.rest_http.register<
2025-03-31 20:24:43 +00:00
{
membership_number_mode : int;
membership_number_value : (null | string);
name_mode : int;
name_value : string;
email_address_mode : int;
email_address_value : (null | string);
2025-04-01 04:20:59 +00:00
groups_mode : int;
2025-03-31 20:24:43 +00:00
groups_value : Array<string>;
2025-04-01 04:20:59 +00:00
expiry ?: (null | int);
2025-03-31 20:24:43 +00:00
// notification_target_url_template ?: (null | string);
},
(
string
|
{
id : _espe.type.member_id;
key : string;
}
)
>(
rest_subject,
lib_plankton.http.enum_method.post,
2025-04-03 12:18:01 +00:00
_espe.api.full_path("/invite/create"),
2025-03-31 20:24:43 +00:00
{
/**
* @todo translation
*/
2025-04-03 12:18:01 +00:00
"description": () => "erstellt eine Einladung und gibt die erzeugte ID und den erzeugten Schlüssel aus",
2025-03-31 20:24:43 +00:00
"input_schema": () => ({
"type": "object",
"nullable": false,
"additionalProperties": false,
"properties": {
2025-04-01 20:54:10 +00:00
"membership_number_mode": {
"type": "integer",
2025-03-31 20:24:43 +00:00
"nullable": false,
2025-04-01 20:54:10 +00:00
"description": "Mitgliedsnummer | Modus"
2025-03-31 20:24:43 +00:00
},
2025-04-01 20:54:10 +00:00
"membership_number_value": {
2025-03-31 20:24:43 +00:00
"type": "string",
2025-04-01 20:54:10 +00:00
"nullable": true,
"description": "Mitgliedsnummer | Wert"
},
"name_mode": {
"type": "integer",
2025-03-31 20:24:43 +00:00
"nullable": false,
2025-04-01 20:54:10 +00:00
"description": "Name | Modus"
},
"name_value": {
"type": "string",
"nullable": true,
"description": "Name | Wert"
2025-03-31 20:24:43 +00:00
},
2025-04-01 20:54:10 +00:00
"email_address_mode": {
"type": "integer",
"nullable": true,
"description": "E-Mail-Adresse | Modus"
},
"email_address_value": {
2025-03-31 20:24:43 +00:00
"type": "string",
"nullable": true,
2025-04-01 20:54:10 +00:00
"description": "E-Mail-Adresse | Wert"
},
"groups_integer": {
"type": "integer",
"nullable": true,
"description": "Gruppen | Modus"
2025-03-31 20:24:43 +00:00
},
2025-04-01 20:54:10 +00:00
"groups_value": {
2025-03-31 20:24:43 +00:00
"nullable": false,
"type": "array",
"items": {
"type": "string",
"nullable": false,
2025-04-01 20:54:10 +00:00
},
"description": "Gruppen | Wert"
2025-03-31 20:24:43 +00:00
},
2025-04-01 20:54:10 +00:00
"expiry": {
"nullable": true,
"type": "intiger",
"description": "Ablaufzeitpunkt"
},
/*
2025-03-31 20:24:43 +00:00
"notification_target_url_template": {
"type": "string",
"nullable": true,
"description": "Platz-Halter: id"
},
*/
},
"required": [
2025-04-01 20:54:10 +00:00
"membership_number_mode",
2025-03-31 20:24:43 +00:00
"membership_number_value",
2025-04-01 20:54:10 +00:00
"name_mode",
2025-03-31 20:24:43 +00:00
"name_value",
2025-04-01 20:54:10 +00:00
"email_address_mode",
2025-03-31 20:24:43 +00:00
"email_address_value",
2025-04-01 20:54:10 +00:00
"groups_mode",
2025-04-01 04:20:59 +00:00
"groups_value",
"expiry",
2025-03-31 20:24:43 +00:00
]
}),
"output_schema": () => ({
"type": "object",
"nullable": false,
"properties": {
"id": {
"type": "number",
"nullable": false,
},
"key": {
"type": "string",
"nullable": false,
},
},
"additionalProperties": false,
"required": [
"id",
"key",
]
}),
2025-04-03 12:18:01 +00:00
"restriction": () => restriction_logged_in,
"execution": () => async ({"input": input}) => {
2025-03-31 20:24:43 +00:00
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),
2025-04-01 04:20:59 +00:00
"email_address_value": input.email_address_value,
2025-03-31 20:24:43 +00:00
"groups_mode": _espe.helpers.invite_prefill_mode_decode(input.groups_mode),
"groups_value": input.groups_value,
2025-04-01 04:20:59 +00:00
},
{
"expiry": input.expiry,
2025-03-31 20:24:43 +00:00
}
);
return Promise.resolve({
"status_code": 201,
"data": invite_info
});
}
}
}
}
);
}
}