[task-193] [add] Funktion zum Einfüllen von (Beispiel-)Daten
This commit is contained in:
parent
a73e11c6f6
commit
05bf22a257
10 changed files with 205 additions and 4 deletions
42
misc/sampledata.json
Normal file
42
misc/sampledata.json
Normal file
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"admins": [
|
||||
{
|
||||
"name": "admin",
|
||||
"email_address": "admin@example.org",
|
||||
"password": "admin"
|
||||
}
|
||||
],
|
||||
"members": [
|
||||
{
|
||||
"membership_number": "123",
|
||||
"name_real": "Alexandra Ahorn",
|
||||
"email_address_private": "alex-rockt@example.org",
|
||||
"groups": ["auto","zug","flugzeug"]
|
||||
},
|
||||
{
|
||||
"membership_number": "234",
|
||||
"name_real": "Berthold Buche",
|
||||
"email_address_private": "bert-ohne-ernie@example.org",
|
||||
"groups": ["fahrrad","zu_fuß","zug"]
|
||||
},
|
||||
{
|
||||
"membership_number": "345",
|
||||
"name_real": "Charlotte Castania",
|
||||
"email_adress_private": "charly-the-unicorn@example.org",
|
||||
"groups": ["fahrrad","auto"]
|
||||
}
|
||||
],
|
||||
"invites": [
|
||||
{
|
||||
"membership_number_mode": 1,
|
||||
"membership_number_value": "456",
|
||||
"name_mode": 1,
|
||||
"name_value": "Daniel Distel",
|
||||
"email_address_mode": 1,
|
||||
"email_address_value": "duesentrieb@example.org",
|
||||
"groups_mode": 1,
|
||||
"groups_value": ["flugzeug","zu_fuß"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
"help.args.action.description": "auszuführende Aktion; Auswahl",
|
||||
"help.args.action.options.serve": "Server starten",
|
||||
"help.args.action.options.api_doc": "API-Dokumentation gemäß OpenAPI-Spezifikation auf Standard-Ausgabe schreiben",
|
||||
"help.args.action.options.sample": "Datenbank mit Beispiel-Daten befüllen",
|
||||
"help.args.action.options.email_test": "eine Test-E-Mail senden",
|
||||
"help.args.action.options.expose_conf": "Vollständige Konfiguration ausgeben",
|
||||
"help.args.action.options.password_image": "Passwort-Abbild errechnen und auf Standard-Ausgabe schreiben",
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
"help.args.action.description": "action to executo; options",
|
||||
"help.args.action.options.serve": "start server",
|
||||
"help.args.action.options.api_doc": "write API documentation according to OpenAPI specification to stdout",
|
||||
"help.args.action.options.sample": "fill database with sample data",
|
||||
"help.args.action.options.email_test": "send a test e-mail",
|
||||
"help.args.action.options.expose_conf": "write complete configuration to stdout",
|
||||
"help.args.action.options.password_image": "compute password image and write to stdout",
|
||||
|
|
|
@ -253,7 +253,7 @@ namespace _espe.helpers
|
|||
*/
|
||||
export function invite_prefill_mode_encode(
|
||||
invite_prefill_mode : _espe.type.invite_prefill_mode
|
||||
) : int
|
||||
) : _espe.type.invite_prefill_mode_raw
|
||||
{
|
||||
switch (invite_prefill_mode) {
|
||||
case _espe.type.invite_prefill_mode.hidden: return 0;
|
||||
|
@ -267,7 +267,7 @@ namespace _espe.helpers
|
|||
/**
|
||||
*/
|
||||
export function invite_prefill_mode_decode(
|
||||
invite_prefill_mode_encoded : int
|
||||
invite_prefill_mode_encoded : _espe.type.invite_prefill_mode_raw
|
||||
) : _espe.type.invite_prefill_mode
|
||||
{
|
||||
switch (invite_prefill_mode_encoded) {
|
||||
|
|
|
@ -204,6 +204,10 @@ namespace _espe
|
|||
"name": "api-doc",
|
||||
"description": lib_plankton.translate.get("help.args.action.options.api_doc")
|
||||
},
|
||||
{
|
||||
"name": "sample",
|
||||
"description": lib_plankton.translate.get("help.args.action.options.sample"),
|
||||
},
|
||||
{
|
||||
"name": "email-test",
|
||||
"description": lib_plankton.translate.get("help.args.action.options.email_test")
|
||||
|
@ -360,6 +364,14 @@ namespace _espe
|
|||
);
|
||||
break;
|
||||
}
|
||||
case "sample": {
|
||||
const path : string = args["arg1"];
|
||||
if (path === null) {
|
||||
throw (new Error("SYNTAX: sample <source-file-path>"));
|
||||
}
|
||||
_espe.sample.fill_by_path(path);
|
||||
break;
|
||||
}
|
||||
case "email-test": {
|
||||
await _espe.helpers.email_send(
|
||||
(
|
||||
|
|
119
source/sample.ts
Normal file
119
source/sample.ts
Normal file
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
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.sample
|
||||
{
|
||||
|
||||
/**
|
||||
*/
|
||||
type type_data = {
|
||||
admins : Array<
|
||||
{
|
||||
name : string;
|
||||
email_address : (null | string);
|
||||
password : string;
|
||||
}
|
||||
>;
|
||||
members : Array<
|
||||
{
|
||||
membership_number : string;
|
||||
name_real : string;
|
||||
email_address_private : (null | string);
|
||||
groups : Array<string>;
|
||||
}
|
||||
>;
|
||||
invites : Array<
|
||||
{
|
||||
membership_number_mode : _espe.type.invite_prefill_mode_raw;
|
||||
membership_number_value : string;
|
||||
name_mode : _espe.type.invite_prefill_mode_raw;
|
||||
name_value : string;
|
||||
email_address_mode : _espe.type.invite_prefill_mode_raw;
|
||||
email_address_value : (null | string);
|
||||
groups_mode : _espe.type.invite_prefill_mode_raw;
|
||||
groups_value : Array<string>;
|
||||
}
|
||||
>;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function fill(
|
||||
data : type_data
|
||||
) : Promise<void>
|
||||
{
|
||||
// admins
|
||||
{
|
||||
for (const admin_raw of data.admins) {
|
||||
const admin_id : _espe.type.admin_id = await _espe.service.admin.add(
|
||||
admin_raw.name,
|
||||
admin_raw.email_address,
|
||||
admin_raw.password,
|
||||
);
|
||||
}
|
||||
}
|
||||
// members
|
||||
{
|
||||
for (const member_raw of data.members) {
|
||||
const member_id : _espe.type.member_id = await _espe.service.member.project(
|
||||
{
|
||||
"membership_number": member_raw.membership_number,
|
||||
"name_real_value": member_raw.name_real,
|
||||
"email_address_private": member_raw.email_address_private,
|
||||
"groups": member_raw.groups
|
||||
},
|
||||
{
|
||||
"silent": true,
|
||||
}
|
||||
);
|
||||
}
|
||||
/**
|
||||
* @todo passwords
|
||||
*/
|
||||
}
|
||||
// invites
|
||||
{
|
||||
for (const invite_raw of data.invites) {
|
||||
const result : {id : _espe.type.invite_id; key : _espe.type.invite_key;} = await _espe.service.invite.create(
|
||||
{
|
||||
"membership_number_mode": _espe.helpers.invite_prefill_mode_decode(invite_raw.membership_number_mode),
|
||||
"membership_number_value": invite_raw.membership_number_value,
|
||||
"name_mode": invite_raw.name_mode,
|
||||
"name_value": invite_raw.name_value,
|
||||
"email_address_mode": invite_raw.email_address_mode,
|
||||
"email_address_value": invite_raw.email_address_value,
|
||||
"groups_mode": invite_raw.groups_mode,
|
||||
"groups_value": invite_raw.groups_value,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function fill_by_path(
|
||||
path : string
|
||||
) : Promise<void>
|
||||
{
|
||||
const content : string = await lib_plankton.file.read(path);
|
||||
const data : type_data = (lib_plankton.json.decode(content) as type_data);
|
||||
await fill(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -310,6 +310,12 @@ namespace _espe.service.member
|
|||
name_real_value : string;
|
||||
email_address_private : (null | string);
|
||||
groups : Array<string>;
|
||||
},
|
||||
{
|
||||
"silent": silent = false,
|
||||
} : {
|
||||
silent ?: boolean;
|
||||
} = {
|
||||
}
|
||||
) : Promise<_espe.type.member_id>
|
||||
{
|
||||
|
@ -331,7 +337,12 @@ namespace _espe.service.member
|
|||
"groups": data.groups,
|
||||
};
|
||||
const id : _espe.type.member_id = await _espe.repository.member.create(object);
|
||||
if (silent) {
|
||||
// do nothing
|
||||
}
|
||||
else {
|
||||
signal_change();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
|
|
|
@ -75,6 +75,18 @@ namespace _espe.type
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* @tood use strings instead of numbers
|
||||
*/
|
||||
export type invite_prefill_mode_raw = (
|
||||
0
|
||||
|
|
||||
1
|
||||
|
|
||||
2
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export type invite_object = {
|
||||
|
|
2
todo.md
Normal file
2
todo.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
- Niederschreiben (Logging) von geheimen Angaben verhindern
|
||||
|
|
@ -86,6 +86,7 @@ main: core ${dir_build}/espe data
|
|||
${dir_temp}/espe-main-raw.js: \
|
||||
${dir_lib}/plankton/plankton.d.ts \
|
||||
${dir_temp}/espe-core.d.ts \
|
||||
${dir_source}/sample.ts \
|
||||
${dir_source}/main.ts
|
||||
@ ${cmd_log} "compile | main …"
|
||||
@ ${cmd_mkdir} $(dir $@)
|
||||
|
|
Loading…
Add table
Reference in a new issue