[mod] api aufgeräumt

This commit is contained in:
roydfalk 2024-04-30 01:32:24 +02:00
parent 362eb0da3a
commit a09e428c7a
8 changed files with 222 additions and 86 deletions

View file

@ -8,13 +8,31 @@ namespace _espe.api
) : void
{
// TODO: translate types
lib_plankton.rest.register<null, Array<{id : _espe.service.member.type_id; preview : {};}>>(
lib_plankton.rest.register<
null,
Array<
{
id : int;
preview : {
membership_number : string;
name_real_value : string;
name_real_index : int;
};
}
>
>(
rest_subject,
lib_plankton.http.enum_method.get,
"/member",
"/member/list",
{
"description": "listet alle Mitglieder auf",
"restriction": restriction_logged_in,
"query_parameters": [
{
"name": "search_term",
"required": false,
"description": "search term",
}
],
"output_schema": () => ({
"type": "array",
"items": {
@ -23,20 +41,30 @@ namespace _espe.api
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"type": "number",
"nullable": false,
},
"preview": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"membership_number": {
"type": "string",
"nullable": false,
},
"name_real_value": {
"type": "string",
"nullable": false,
},
"name_real_index": {
"type": "number",
"nullable": false,
},
},
"required": [
"name",
"membership_number",
"name_real_value",
"name_real_index",
]
}
},
@ -46,12 +74,16 @@ namespace _espe.api
],
}
}),
"execution": async ({}) => {
return Promise.resolve({
"status_code": 200,
"data": (await _espe.service.member.list()),
});
}
"restriction": restriction_logged_in,
"execution": ({"query_parameters": query_parameters}) => (
_espe.service.member.list(query_parameters["search_term"] ?? null)
.then(
data => Promise.resolve({
"status_code": 200,
"data": data,
})
)
)
}
);
}

View file

@ -0,0 +1,70 @@
namespace _espe.api
{
/**
*/
export function register_member_modify(
rest_subject : lib_plankton.rest.type_rest
) : void
{
lib_plankton.rest.register<
{
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
},
null
>(
rest_subject,
lib_plankton.http.enum_method.patch,
"/member/modify/:id",
{
"description": "ändert die Angaben eines vorhandenen Mitglieds",
"input_schema": () => ({
"nullable": false,
"type": "object",
"properties": {
"email_address_private": {
"nullable": true,
"type": "string"
},
"registered": {
"nullable": false,
"type": "boolean"
},
"enabled": {
"nullable": false,
"type": "boolean"
},
},
"additionalProperties": false,
"required": [
"email_address_private",
"registered",
"enabled",
]
}),
"output_schema": () => ({
"nullable": true,
}),
"restriction": restriction_logged_in,
"execution": async ({"path_parameters": path_parameters, "input": input}) => {
const member_id : _espe.type.member_id = parseInt(path_parameters["id"]);
await _espe.service.member.modify(
member_id,
{
"email_address_private": input.email_address_private,
"registered": input.registered,
"enabled": input.enabled,
}
);
return Promise.resolve({
"status_code": 200,
"data": null
});
}
}
);
}
}

View file

@ -8,18 +8,26 @@ namespace _espe.api
) : void
{
lib_plankton.rest.register<
int,
_espe.service.member.type_value
null,
{
membership_number : string;
name_real_value : string;
name_real_index : int;
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
email_use_veiled_address : boolean;
email_use_nominal_address : boolean;
email_redirect_to_private_address : boolean;
email_allow_sending : boolean;
password_set : boolean;
}
>(
rest_subject,
lib_plankton.http.enum_method.get,
"/member/read",
"/member/read/:id",
{
"description": "gibt ein Mitglied anhand seiner ID aus",
"input_schema": () => ({
"nullable": false,
"type": "number"
}),
// TODO
"output_schema": () => ({
"nullable": false,
@ -31,12 +39,24 @@ namespace _espe.api
]
}),
"restriction": restriction_logged_in,
"execution": async ({"input": input}) => {
const member_id : _espe.service.member.type_id = input;
const member_value : _espe.service.member.type_value = await _espe.service.member.get(member_id);
"execution": async ({"path_parameters": path_parameters, "input": input}) => {
const member_id : _espe.type.member_id = parseInt(path_parameters["id"]);
const member_object : _espe.type.member_object = await _espe.service.member.get(member_id);
return Promise.resolve({
"status_code": 200,
"data": member_value,
"data": {
"membership_number": member_object.membership_number,
"name_real_value": member_object.name_real_value,
"name_real_index": member_object.name_real_index,
"email_address_private": member_object.email_address_private,
"registered": member_object.registered,
"enabled": member_object.enabled,
"email_use_veiled_address": member_object.email_use_veiled_address,
"email_use_nominal_address": member_object.email_use_nominal_address,
"email_redirect_to_private_address": member_object.email_redirect_to_private_address,
"email_allow_sending": member_object.email_allow_sending,
"password_set": (member_object.password_image !== null),
},
});
}
}

View file

@ -1,45 +0,0 @@
namespace _espe.api
{
/**
*/
export function register_member_update(
rest_subject : lib_plankton.rest.type_rest
) : void
{
lib_plankton.rest.register<_espe.service.member.type_value, null>(
rest_subject,
lib_plankton.http.enum_method.patch,
"/member/:id",
{
"description": "ändert ein vorhandenes Mitglied",
"restriction": restriction_logged_in,
"execution": async ({"path_parameters": path_parameters, "input": input}) => {
const member_id : _espe.service.member.type_id = parseInt(path_parameters["id"]);
const member_value_old : _espe.service.member.type_value = await _espe.service.member.get(member_id);
const member_value_new : _espe.service.member.type_value = {
"enabled": input["enabled"],
"membership_number": input["membership_number"],
"name_real_value": input["name_real_value"],
"name_real_extension": input["name_real_extension"],
"name_display": input["name_display"],
"name_login": input["name_login"],
"password_image": member_value_old.password_image,
"email_address_private_value": input["email_address_private_value"],
"email_address_numberbased_use": input["email_address_numberbased_use"],
"email_address_namebased_use": input["email_address_namebased_use"],
"email_redirect_to_private": input["email_redirect_to_private"],
"salutation": input["salutation"],
"registered": /*input["registered"]*/member_value_old.registered,
};
await _espe.service.member.modify(member_id, member_value_new);
return Promise.resolve({
"status_code": 200,
"data": null
});
}
}
);
}
}

View file

@ -36,9 +36,9 @@ namespace _espe.api
_espe.api.register_member_summon(rest_subject);
_espe.api.register_member_info(rest_subject);
_espe.api.register_member_register(rest_subject);
// _espe.api.register_member_list(rest_subject);
// _espe.api.register_member_read(rest_subject);
// _espe.api.register_member_update(rest_subject);
_espe.api.register_member_list(rest_subject);
_espe.api.register_member_read(rest_subject);
_espe.api.register_member_modify(rest_subject);
// _espe.api.register_member_delete(rest_subject);
}

View file

@ -112,15 +112,18 @@ namespace _espe.repository.member
/**
* @todo optimize
*/
export async function list(
search_term : (null | string)
) : Promise<
Array<
{
id : _espe.type.member_id;
preview : {
membership_number : string,
name_real : string;
membership_number : string;
name_real_value : string;
name_real_index : int;
};
}
>
@ -128,12 +131,28 @@ namespace _espe.repository.member
{
return (
(await get_store().search(null))
.filter(
({"key": key, "preview": preview}) => (
(
(search_term === null)
||
(search_term.length <= 1)
)
? true
: (
preview["membership_number"].toLowerCase().includes(search_term.toLowerCase())
||
preview["name_real_value"].toLowerCase().includes(search_term.toLowerCase())
)
)
)
.map(
({"key": key, "preview": preview}) => ({
"id": key,
"preview": {
"membership_number": preview["membership_number"],
"name_real": preview["name_real"],
"name_real_value": preview["name_real_value"],
"name_real_index": preview["name_real_index"],
}
})
)

View file

@ -40,7 +40,7 @@ namespace _espe.service.member
{
"object": object.name_real_value.toLowerCase().replace(new RegExp(" ", "g"), "."),
"extension": (
(object.name_real_index === 0)
(object.name_real_index <= 1)
? ""
: ("." + object.name_real_index.toFixed(0))
),
@ -124,11 +124,33 @@ namespace _espe.service.member
{
return _espe.repository.member.dump();
}
/**
*/
export async function list(
search_term : (null | string)
) : Promise<
Array<
{
id : _espe.type.member_id;
preview : {
membership_number : string;
name_real_value : string;
name_real_index : int;
};
}
>
>
{
return _espe.repository.member.list(search_term);
}
/**
*/
async function get(
export function get(
id : _espe.type.member_id
) : Promise<_espe.type.member_object>
{
@ -280,24 +302,39 @@ namespace _espe.service.member
}
}
/*
export async function list(
) : Promise<Array<{id : _espe.type.member_id; preview : {membership_number : string, name_real_value : string;};}>>
{
return _espe.repository.member.list();
}
/**
*/
export async function modify(
id : _espe.type.member_id,
object : _espe.type.member_object
member_id : _espe.type.member_id,
data : {
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
}
) : Promise<void>
{
await _espe.repository.member.update(id, object);
const member_object_old : _espe.type.member_object = await get(member_id);
const member_object_new : _espe.type.member_object = {
"membership_number": member_object_old.membership_number,
"name_real_value": member_object_old.name_real_value,
"name_real_index": member_object_old.name_real_index,
"email_address_private": data.email_address_private,
"registered": data.registered,
"enabled": data.enabled,
"email_use_veiled_address": member_object_old.email_use_veiled_address,
"email_use_nominal_address": member_object_old.email_use_nominal_address,
"email_redirect_to_private_address": member_object_old.email_redirect_to_private_address,
"email_allow_sending": member_object_old.email_allow_sending,
"password_image": member_object_old.password_image,
};
await _espe.repository.member.update(member_id, member_object_new);
notify_change();
}
/*
export async function remove(
id : _espe.type.member_id
) : Promise<void>

View file

@ -44,6 +44,9 @@ ${dir_temp}/espe-unlinked.js: \
${dir_source}/api/actions/member_summon.ts \
${dir_source}/api/actions/member_info.ts \
${dir_source}/api/actions/member_register.ts \
${dir_source}/api/actions/member_list.ts \
${dir_source}/api/actions/member_read.ts \
${dir_source}/api/actions/member_modify.ts \
${dir_source}/api/functions.ts \
${dir_source}/conf.ts \
${dir_source}/main.ts