Christian Fraß commited on 2021-03-08 23:03:32
Zeige 9 geänderte Dateien mit 208 Einfügungen und 13 Löschungen.
| ... | ... |
@@ -0,0 +1,28 @@ |
| 1 |
+api.add_action< |
|
| 2 |
+ {
|
|
| 3 |
+ type_id : int; |
|
| 4 |
+ description ?: null|string; |
|
| 5 |
+ tag_ids ?: Array<int>; |
|
| 6 |
+ expression_ids ?: Array<int>; |
|
| 7 |
+ }, |
|
| 8 |
+ int |
|
| 9 |
+> |
|
| 10 |
+( |
|
| 11 |
+ {
|
|
| 12 |
+ "name": "concept_add", |
|
| 13 |
+ "execution": async function (input) |
|
| 14 |
+ {
|
|
| 15 |
+ const concept_entity : entities.concept = |
|
| 16 |
+ {
|
|
| 17 |
+ "type_id": input.type_id, |
|
| 18 |
+ "description": helpers.object.fetch<null|string>(input, "description", null), |
|
| 19 |
+ "tag_ids": input.tag_ids, |
|
| 20 |
+ "expression_ids": input.expression_ids, |
|
| 21 |
+ }; |
|
| 22 |
+ const concept_id : int = await services.concept.add(concept_entity); |
|
| 23 |
+ |
|
| 24 |
+ return Promise.resolve<int>(concept_id); |
|
| 25 |
+ } |
|
| 26 |
+ } |
|
| 27 |
+); |
|
| 28 |
+ |
| ... | ... |
@@ -0,0 +1,43 @@ |
| 1 |
+api.add_action< |
|
| 2 |
+ {
|
|
| 3 |
+ language_from : string; |
|
| 4 |
+ language_to : string; |
|
| 5 |
+ token : string; |
|
| 6 |
+ }, |
|
| 7 |
+ Array< |
|
| 8 |
+ {
|
|
| 9 |
+ language_from : string; |
|
| 10 |
+ value_from : string; |
|
| 11 |
+ language_to : string; |
|
| 12 |
+ value_to : string; |
|
| 13 |
+ } |
|
| 14 |
+ > |
|
| 15 |
+> |
|
| 16 |
+( |
|
| 17 |
+ {
|
|
| 18 |
+ "name": "translate", |
|
| 19 |
+ "execution": async function (input) |
|
| 20 |
+ {
|
|
| 21 |
+ const rows : Array<type_row> = await services.concept.get_translations |
|
| 22 |
+ ( |
|
| 23 |
+ input.language_from, |
|
| 24 |
+ input.language_to, |
|
| 25 |
+ input.token |
|
| 26 |
+ ); |
|
| 27 |
+ return ( |
|
| 28 |
+ rows.map |
|
| 29 |
+ ( |
|
| 30 |
+ row => ( |
|
| 31 |
+ {
|
|
| 32 |
+ "language_from": row["language_from"], |
|
| 33 |
+ "value_from": row["value_from"], |
|
| 34 |
+ "language_to": row["language_to"], |
|
| 35 |
+ "value_to": row["value_to"], |
|
| 36 |
+ } |
|
| 37 |
+ ) |
|
| 38 |
+ ) |
|
| 39 |
+ ); |
|
| 40 |
+ } |
|
| 41 |
+ } |
|
| 42 |
+); |
|
| 43 |
+ |
| ... | ... |
@@ -0,0 +1,50 @@ |
| 1 |
+namespace api |
|
| 2 |
+{
|
|
| 3 |
+ |
|
| 4 |
+ /** |
|
| 5 |
+ */ |
|
| 6 |
+ export type type_action<type_input, type_output> = |
|
| 7 |
+ {
|
|
| 8 |
+ name : string; |
|
| 9 |
+ execution : (inupt : type_input)=>Promise<type_output>; |
|
| 10 |
+ }; |
|
| 11 |
+ |
|
| 12 |
+ |
|
| 13 |
+ /** |
|
| 14 |
+ */ |
|
| 15 |
+ var _actions : {[name : string] : type_action<any, any>} = {};
|
|
| 16 |
+ |
|
| 17 |
+ |
|
| 18 |
+ /** |
|
| 19 |
+ */ |
|
| 20 |
+ export function add_action<type_input, type_output> |
|
| 21 |
+ ( |
|
| 22 |
+ action : type_action<type_input, type_output> |
|
| 23 |
+ ) : void |
|
| 24 |
+ {
|
|
| 25 |
+ _actions[action.name] = action; |
|
| 26 |
+ } |
|
| 27 |
+ |
|
| 28 |
+ |
|
| 29 |
+ /** |
|
| 30 |
+ */ |
|
| 31 |
+ export async function query |
|
| 32 |
+ ( |
|
| 33 |
+ action_name : string, |
|
| 34 |
+ input : any |
|
| 35 |
+ ) : Promise<any> |
|
| 36 |
+ {
|
|
| 37 |
+ if (! _actions.hasOwnProperty(action_name)) |
|
| 38 |
+ {
|
|
| 39 |
+ return Promise.reject<any>("not such action");
|
|
| 40 |
+ } |
|
| 41 |
+ else |
|
| 42 |
+ {
|
|
| 43 |
+ const action : type_action<any, any> = _actions[action_name]; |
|
| 44 |
+ const output : any = await action.execution(input); |
|
| 45 |
+ return Promise.resolve<any>(output); |
|
| 46 |
+ } |
|
| 47 |
+ } |
|
| 48 |
+ |
|
| 49 |
+} |
|
| 50 |
+ |
| ... | ... |
@@ -0,0 +1,24 @@ |
| 1 |
+namespace helpers.object |
|
| 2 |
+{
|
|
| 3 |
+ |
|
| 4 |
+ /** |
|
| 5 |
+ */ |
|
| 6 |
+ export function fetch<type_value> |
|
| 7 |
+ ( |
|
| 8 |
+ object : {[field : string] : any},
|
|
| 9 |
+ field : string, |
|
| 10 |
+ fallback : type_value |
|
| 11 |
+ ) : type_value |
|
| 12 |
+ {
|
|
| 13 |
+ if (object.hasOwnProperty(field)) |
|
| 14 |
+ {
|
|
| 15 |
+ return object[field]; |
|
| 16 |
+ } |
|
| 17 |
+ else |
|
| 18 |
+ {
|
|
| 19 |
+ return fallback; |
|
| 20 |
+ } |
|
| 21 |
+ } |
|
| 22 |
+ |
|
| 23 |
+} |
|
| 24 |
+ |
| ... | ... |
@@ -1,5 +1,3 @@ |
| 1 |
-#!/usr/bin/env node |
|
| 2 |
- |
|
| 3 | 1 |
/* |
| 4 | 2 |
import {repositories.language} from './repository-language';
|
| 5 | 3 |
import {repositories.type} from './repository-type';
|
| ... | ... |
@@ -32,6 +30,46 @@ async function main(args : Array<string>) : Promise<void> |
| 32 | 30 |
process.exit(0); |
| 33 | 31 |
break; |
| 34 | 32 |
} |
| 33 |
+ case "run": |
|
| 34 |
+ {
|
|
| 35 |
+ const server : lib_comm.interface_server<string, lib_comm.type_response_server_http> = new lib_comm.class_server_http |
|
| 36 |
+ ( |
|
| 37 |
+ {
|
|
| 38 |
+ "port": 7777, |
|
| 39 |
+ } |
|
| 40 |
+ ); |
|
| 41 |
+ server.setup |
|
| 42 |
+ ( |
|
| 43 |
+ async (input_raw) => |
|
| 44 |
+ {
|
|
| 45 |
+ const stuff : any = JSON.parse(input_raw); |
|
| 46 |
+ try |
|
| 47 |
+ {
|
|
| 48 |
+ const output : any = await api.query(stuff.action, stuff.input); |
|
| 49 |
+ return Promise.resolve<lib_comm.type_response_server_http> |
|
| 50 |
+ ( |
|
| 51 |
+ {
|
|
| 52 |
+ "code": 200, |
|
| 53 |
+ "text": JSON.stringify(output), |
|
| 54 |
+ } |
|
| 55 |
+ ); |
|
| 56 |
+ } |
|
| 57 |
+ catch (exception) |
|
| 58 |
+ {
|
|
| 59 |
+ console.error(exception); |
|
| 60 |
+ return Promise.resolve<lib_comm.type_response_server_http> |
|
| 61 |
+ ( |
|
| 62 |
+ {
|
|
| 63 |
+ "code": 500, |
|
| 64 |
+ "text": 'error', |
|
| 65 |
+ } |
|
| 66 |
+ ); |
|
| 67 |
+ } |
|
| 68 |
+ } |
|
| 69 |
+ ); |
|
| 70 |
+ server.run(); |
|
| 71 |
+ break; |
|
| 72 |
+ } |
|
| 35 | 73 |
case "show": |
| 36 | 74 |
{
|
| 37 | 75 |
const concept_id = parseInt(args.shift()); |
| ... | ... |
@@ -277,12 +277,12 @@ namespace repositories |
| 277 | 277 |
{
|
| 278 | 278 |
const row_core : type_row = {"type_id": concept_entity.type_id, "description": concept_entity.description};
|
| 279 | 279 |
const concept_id : int = await concept_core.create(row_core); |
| 280 |
- for await (let tag_id of concept_entity.tags) |
|
| 280 |
+ for await (const tag_id of concept_entity.tag_ids) |
|
| 281 | 281 |
{
|
| 282 | 282 |
const row_tag : type_row = {"concept_id": concept_id, "tag_id": tag_id};
|
| 283 | 283 |
const concept_tag_id : int = await concept_tags.create(row_tag); |
| 284 | 284 |
} |
| 285 |
- for await (let expression_id of concept_entity.expressions) |
|
| 285 |
+ for await (const expression_id of concept_entity.expression_ids) |
|
| 286 | 286 |
{
|
| 287 | 287 |
const row_expressions : type_row = {"concept_id": concept_id, "expression_id": expression_id};
|
| 288 | 288 |
const concept_expressions_id : int = await concept_expressions.create(row_expressions); |
| ... | ... |
@@ -309,8 +309,8 @@ namespace repositories |
| 309 | 309 |
{
|
| 310 | 310 |
"type_id": row_core["type_id"], |
| 311 | 311 |
"description": row_core["description"], |
| 312 |
- "tags": rows_tags.map(row_tag => row_tag["tag_id"]), |
|
| 313 |
- "expressions": rows_expressions.map(row_expression => row_expression["expression_id"]), |
|
| 312 |
+ "tag_ids": rows_tags.map(row_tag => row_tag["tag_id"]), |
|
| 313 |
+ "expression_ids": rows_expressions.map(row_expression => row_expression["expression_id"]), |
|
| 314 | 314 |
}; |
| 315 | 315 |
return Promise.resolve<entities.concept>(concept_entity); |
| 316 | 316 |
}, |
| ... | ... |
@@ -46,7 +46,8 @@ namespace services.concept |
| 46 | 46 |
|
| 47 | 47 |
/** |
| 48 | 48 |
*/ |
| 49 |
- function parse_tags( |
|
| 49 |
+ function parse_tags |
|
| 50 |
+ ( |
|
| 50 | 51 |
tags_raw : string |
| 51 | 52 |
) : Array<string> |
| 52 | 53 |
{
|
| ... | ... |
@@ -80,6 +81,17 @@ namespace services.concept |
| 80 | 81 |
} |
| 81 | 82 |
|
| 82 | 83 |
|
| 84 |
+ /** |
|
| 85 |
+ */ |
|
| 86 |
+ export function add |
|
| 87 |
+ ( |
|
| 88 |
+ concept_entity : entities.concept |
|
| 89 |
+ ) : Promise<int> |
|
| 90 |
+ {
|
|
| 91 |
+ return repositories.concept.create(concept_entity); |
|
| 92 |
+ } |
|
| 93 |
+ |
|
| 94 |
+ |
|
| 83 | 95 |
/** |
| 84 | 96 |
*/ |
| 85 | 97 |
export async function bloat |
| ... | ... |
@@ -101,12 +113,12 @@ namespace services.concept |
| 101 | 113 |
"tags": [], |
| 102 | 114 |
"expressions": [], |
| 103 | 115 |
}; |
| 104 |
- for await (const tag_id of concept_entity.tags) |
|
| 116 |
+ for await (const tag_id of concept_entity.tag_ids) |
|
| 105 | 117 |
{
|
| 106 | 118 |
const tag_value : string = (await repositories.tag.read(tag_id))["value"]; |
| 107 | 119 |
result.tags.push({"id": tag_id, "value": tag_value});
|
| 108 | 120 |
} |
| 109 |
- for await (const expression_id of concept_entity.expressions) |
|
| 121 |
+ for await (const expression_id of concept_entity.expression_ids) |
|
| 110 | 122 |
{
|
| 111 | 123 |
const expression_row : type_row = await repositories.expression.read(expression_id); |
| 112 | 124 |
const language_id : int = expression_row["language_id"]; |