[int]
This commit is contained in:
parent
ff75196d26
commit
ebc9baa4b3
11 changed files with 359 additions and 31 deletions
|
@ -31,28 +31,28 @@
|
|||
"members": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Alexandra Ahorn",
|
||||
"email_address_private": "alex-rockt@example.org",
|
||||
"name": "alexandra",
|
||||
"email_address": "alex-rockt@example.org",
|
||||
"groups": [1, 2, 3]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Berthold Buche",
|
||||
"email_address_private": "bert-ohne-ernie@example.org",
|
||||
"name": "berthold",
|
||||
"email_address": "bert-ohne-ernie@example.org",
|
||||
"groups": [4, 5, 2]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Charlotte Castania",
|
||||
"email_adress_private": "charly-the-unicorn@example.org",
|
||||
"name": "charlotte",
|
||||
"email_address": "charly-the-unicorn@example.org",
|
||||
"groups": [4, 1]
|
||||
}
|
||||
],
|
||||
"invites": [
|
||||
"invitations": [
|
||||
{
|
||||
"id": 1,
|
||||
"name_changeable": true,
|
||||
"name_value": "Daniel Distel",
|
||||
"name_value": "daniel",
|
||||
"email_address_changeable": true,
|
||||
"email_address_value": "duesentrieb@example.org",
|
||||
"groups_changeable": false,
|
||||
|
|
69
source/api/actions/group_add.ts
Normal file
69
source/api/actions/group_add.ts
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
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_group_add(
|
||||
rest_subject : lib_plankton.rest_http.type_rest
|
||||
) : void
|
||||
{
|
||||
lib_plankton.rest_http.register<
|
||||
string,
|
||||
(string | _espe.type.group_id)
|
||||
>(
|
||||
rest_subject,
|
||||
lib_plankton.http.enum_method.post,
|
||||
_espe.api.full_path("/group/add"),
|
||||
{
|
||||
/**
|
||||
* @todo translation
|
||||
*/
|
||||
"description": () => "erstellt eine Gruppe",
|
||||
"input_schema": () => ({
|
||||
"nullable": false,
|
||||
"type": "string",
|
||||
}),
|
||||
"output_schema": () => ({
|
||||
"nullable": false,
|
||||
"type": "number",
|
||||
}),
|
||||
"restriction": () => restriction_logged_in,
|
||||
"execution": () => async ({"input": input}) => {
|
||||
if (input === null) {
|
||||
return Promise.resolve({
|
||||
"status_code": 400,
|
||||
"data": ""
|
||||
});
|
||||
}
|
||||
else {
|
||||
const data = await _espe.service.group.add(
|
||||
{
|
||||
"name": input
|
||||
}
|
||||
);
|
||||
return Promise.resolve({
|
||||
"status_code": 200,
|
||||
"data": data
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
75
source/api/actions/group_list.ts
Normal file
75
source/api/actions/group_list.ts
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
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_group_list(
|
||||
rest_subject : lib_plankton.rest_http.type_rest
|
||||
) : void
|
||||
{
|
||||
lib_plankton.rest_http.register<
|
||||
null,
|
||||
Array<
|
||||
{
|
||||
id : _espe.type.invitation_id;
|
||||
name : string;
|
||||
}
|
||||
>
|
||||
>(
|
||||
rest_subject,
|
||||
lib_plankton.http.enum_method.get,
|
||||
_espe.api.full_path("/group/list"),
|
||||
{
|
||||
/**
|
||||
* @todo translation
|
||||
*/
|
||||
"description": () => "listet alle Gruppen auf",
|
||||
"output_schema": () => ({
|
||||
"type": "object",
|
||||
"nullable": false,
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"nullable": false,
|
||||
"type": "intiger",
|
||||
"description": "ID"
|
||||
},
|
||||
"name": {
|
||||
"nullable": false,
|
||||
"type": "string",
|
||||
"description": "Name"
|
||||
},
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"name",
|
||||
]
|
||||
}),
|
||||
"restriction": () => restriction_logged_in,
|
||||
"execution": () => async ({}) => {
|
||||
const data = await _espe.service.group.list();
|
||||
return Promise.resolve({
|
||||
"status_code": 200,
|
||||
"data": data
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
83
source/api/actions/group_modify.ts
Normal file
83
source/api/actions/group_modify.ts
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
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_group_modify(
|
||||
rest_subject : lib_plankton.rest_http.type_rest
|
||||
) : void
|
||||
{
|
||||
lib_plankton.rest_http.register<
|
||||
{
|
||||
name : string;
|
||||
},
|
||||
null
|
||||
>(
|
||||
rest_subject,
|
||||
lib_plankton.http.enum_method.patch,
|
||||
_espe.api.full_path("/group/modify/:id"),
|
||||
{
|
||||
/**
|
||||
* @todo translation
|
||||
*/
|
||||
"description": () => "ändert eine Gruppe",
|
||||
"input_schema": () => ({
|
||||
"nullable": false,
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"nullable": false,
|
||||
"type": "string",
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"name",
|
||||
]
|
||||
}),
|
||||
"output_schema": () => ({
|
||||
"nullable": true,
|
||||
}),
|
||||
"restriction": () => restriction_logged_in,
|
||||
"execution": () => async ({"path_parameters": path_parameters, "input": input}) => {
|
||||
if (input === null) {
|
||||
return Promise.resolve({
|
||||
"status_code": 400,
|
||||
"data": null
|
||||
});
|
||||
}
|
||||
else {
|
||||
const group_id : _espe.type.group_id = parseInt(path_parameters["id"]);
|
||||
const group_object : _espe.type.group_object = {
|
||||
"name": input.name,
|
||||
};
|
||||
const data = await _espe.service.group.modify(
|
||||
group_id,
|
||||
group_object
|
||||
);
|
||||
return Promise.resolve({
|
||||
"status_code": 200,
|
||||
"data": null
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
66
source/api/actions/group_read.ts
Normal file
66
source/api/actions/group_read.ts
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
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_group_read(
|
||||
rest_subject : lib_plankton.rest_http.type_rest
|
||||
) : void
|
||||
{
|
||||
lib_plankton.rest_http.register<
|
||||
null,
|
||||
{
|
||||
name : string;
|
||||
}
|
||||
>(
|
||||
rest_subject,
|
||||
lib_plankton.http.enum_method.get,
|
||||
_espe.api.full_path("/group/read/:id"),
|
||||
{
|
||||
/**
|
||||
* @todo translation
|
||||
*/
|
||||
"description": () => "gibt die Daten zu einer Gruppen aus",
|
||||
"output_schema": () => ({
|
||||
"nullable": false,
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"nullable": false,
|
||||
"type": "string",
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"name",
|
||||
]
|
||||
}),
|
||||
"restriction": () => restriction_logged_in,
|
||||
"execution": () => async ({"path_parameters": path_parameters}) => {
|
||||
const group_id : _espe.type.group_id = parseInt(path_parameters["id"]);
|
||||
const group_object : _espe.type.group_object = await _espe.service.group.get(group_id);
|
||||
return Promise.resolve({
|
||||
"status_code": 200,
|
||||
"data": group_object
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -43,6 +43,13 @@ namespace _espe.api
|
|||
_espe.api.register_session_begin(rest_subject);
|
||||
_espe.api.register_session_end(rest_subject);
|
||||
}
|
||||
// group
|
||||
{
|
||||
_espe.api.register_group_list(rest_subject);
|
||||
_espe.api.register_group_read(rest_subject);
|
||||
_espe.api.register_group_add(rest_subject);
|
||||
_espe.api.register_group_modify(rest_subject);
|
||||
}
|
||||
// member
|
||||
{
|
||||
_espe.api.register_member_summon(rest_subject);
|
||||
|
|
|
@ -84,7 +84,7 @@ namespace _espe.repository.group
|
|||
) : _espe.type.group_object
|
||||
{
|
||||
return {
|
||||
"name": dispersal.core_row["name"],
|
||||
"name": dispersal["name"],
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -98,9 +98,7 @@ namespace _espe.repository.group
|
|||
Array<
|
||||
{
|
||||
id : _espe.type.group_id;
|
||||
preview : {
|
||||
name : string;
|
||||
};
|
||||
name : string;
|
||||
}
|
||||
>
|
||||
>
|
||||
|
@ -123,9 +121,7 @@ namespace _espe.repository.group
|
|||
.map(
|
||||
({"key": key, "preview": preview}) => ({
|
||||
"id": key,
|
||||
"preview": {
|
||||
"name": preview["name"],
|
||||
}
|
||||
"name": preview["name"],
|
||||
})
|
||||
)
|
||||
);
|
||||
|
@ -138,11 +134,9 @@ namespace _espe.repository.group
|
|||
id : _espe.type.group_id
|
||||
) : Promise<_espe.type.group_object>
|
||||
{
|
||||
const core_row : Record<string, any> = await get_store().read(id);
|
||||
const row : Record<string, any> = await get_store().read(id);
|
||||
|
||||
const dispersal : type_dispersal = {
|
||||
"core_row": core_row,
|
||||
};
|
||||
const dispersal : type_dispersal = row;
|
||||
|
||||
return decode(dispersal);
|
||||
}
|
||||
|
@ -157,7 +151,7 @@ namespace _espe.repository.group
|
|||
const dispersal : type_dispersal = encode(value);
|
||||
|
||||
// core
|
||||
const id : _espe.type.group_id = await get_store().create(dispersal.core_row);
|
||||
const id : _espe.type.group_id = await get_store().create(dispersal);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
@ -174,7 +168,7 @@ namespace _espe.repository.group
|
|||
const dispersal : type_dispersal = encode(value);
|
||||
|
||||
// core
|
||||
await get_store().update(id, dispersal.core_row);
|
||||
await get_store().update(id, dispersal);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ namespace _espe.repository.invitation
|
|||
{
|
||||
"database_implementation": _espe.helpers.database_implementation(),
|
||||
"table_name": "invitation_groups",
|
||||
"key_names": ["invitation_id","group_name"],
|
||||
"key_names": ["invitation_id","group_id"],
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -128,8 +128,8 @@ namespace _espe.repository.invitation
|
|||
"group_rows": (
|
||||
(object.groups_value ?? [])
|
||||
.map(
|
||||
group => ({
|
||||
"group_name": group,
|
||||
group_id => ({
|
||||
"group_id": group_id,
|
||||
})
|
||||
)
|
||||
)
|
||||
|
@ -152,7 +152,7 @@ namespace _espe.repository.invitation
|
|||
"email_address_value": dispersal.core_row["email_address_value"],
|
||||
"groups_changeable": _espe.helpers.dbbool_decode(dispersal.core_row["groups_changeable"]),
|
||||
"groups_value": lib_plankton.list.sorted<_espe.type.group_id>(
|
||||
dispersal.group_rows.map(row => row["group_name"]),
|
||||
dispersal.group_rows.map(row => row["group_id"]),
|
||||
{
|
||||
"compare_element": (group1, group2) => (group1 <= group2)
|
||||
}
|
||||
|
@ -218,7 +218,7 @@ namespace _espe.repository.invitation
|
|||
"core_row": core_row,
|
||||
"group_rows": group_hits.map(
|
||||
hit => ({
|
||||
"group_name": hit.preview["group_name"]
|
||||
"group_id": hit.preview["group_id"]
|
||||
})
|
||||
),
|
||||
};
|
||||
|
@ -243,7 +243,7 @@ namespace _espe.repository.invitation
|
|||
await get_group_chest().write(
|
||||
[
|
||||
id,
|
||||
group_row["group_name"],
|
||||
group_row["group_id"],
|
||||
],
|
||||
{
|
||||
"_dummy": null,
|
||||
|
|
|
@ -93,7 +93,7 @@ namespace _espe.sample
|
|||
{
|
||||
"name": member_raw.name,
|
||||
"email_address": member_raw.email_address,
|
||||
"groups": member_raw.groups.map(track_groups.get),
|
||||
"groups": member_raw.groups.map(group_id => track_groups.get(group_id)),
|
||||
},
|
||||
{
|
||||
"silent": true,
|
||||
|
@ -115,7 +115,7 @@ namespace _espe.sample
|
|||
"email_address_changeable": invitation_raw.email_address_changeable,
|
||||
"email_address_value": invitation_raw.email_address_value,
|
||||
"groups_changeable": invitation_raw.groups_changeable,
|
||||
"groups_value": invitation_raw.groups_value.map(track_groups.get),
|
||||
"groups_value": invitation_raw.groups_value.map(group_id => track_groups.get(group_id)),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -16,13 +16,43 @@ You should have received a copy of the GNU General Public License along with thi
|
|||
namespace _espe.service.group
|
||||
{
|
||||
|
||||
/**
|
||||
*/
|
||||
export function list(
|
||||
) : Promise<Array<{id : _espe.type.group_id; name : string;}>>
|
||||
{
|
||||
return _espe.repository.group.list(null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export function get(
|
||||
id : _espe.type.group_id
|
||||
) : Promise<_espe.type.group_object>
|
||||
{
|
||||
return _espe.repository.group.read(id);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export function add(
|
||||
group_object : _espe.type.group_object
|
||||
object : _espe.type.group_object
|
||||
) : Promise<_espe.type.group_id>
|
||||
{
|
||||
return _espe.repository.group.create(group_object);
|
||||
return _espe.repository.group.create(object);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export function modify(
|
||||
id : _espe.type.group_id,
|
||||
object : _espe.type.group_object
|
||||
) : Promise<void>
|
||||
{
|
||||
return _espe.repository.group.update(id, object);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -61,6 +61,10 @@ ${dir_temp}/espe-core.js ${dir_temp}/espe-core.d.ts: \
|
|||
${dir_source}/api/actions/meta_spec.ts \
|
||||
${dir_source}/api/actions/session_begin.ts \
|
||||
${dir_source}/api/actions/session_end.ts \
|
||||
${dir_source}/api/actions/group_list.ts \
|
||||
${dir_source}/api/actions/group_read.ts \
|
||||
${dir_source}/api/actions/group_add.ts \
|
||||
${dir_source}/api/actions/group_modify.ts \
|
||||
${dir_source}/api/actions/member_summon.ts \
|
||||
${dir_source}/api/actions/member_list.ts \
|
||||
${dir_source}/api/actions/member_read.ts \
|
||||
|
|
Loading…
Add table
Reference in a new issue