ismx-nexo-node-app 0.3.70 → 0.3.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,8 +24,10 @@ class ServiceRestFormalTemplate {
24
24
  this.get.serveRestFormal = this.serveGet.bind(this);
25
25
  this.getList = new ServiceRestFormal_1.default("GET", `${resource}/list`);
26
26
  this.getList.serveRestFormal = this.serveGetList.bind(this);
27
+ this.getKeymap.serveRestFormal = this.serveGetKeymap.bind(this);
27
28
  this.postList = new ServiceRestFormal_1.default("POST", `${resource}/list`);
28
29
  this.postList.serveRestFormal = this.servePostList.bind(this);
30
+ this.postKeymap.serveRestFormal = this.servePostKeymap.bind(this);
29
31
  this.full = new ServiceRestFormal_1.default("GET", `${resource}/full`);
30
32
  this.full.serveRestFormal = this.serveFull.bind(this);
31
33
  this.fullList = new ServiceRestFormal_1.default("GET", `${resource}/full/list`);
@@ -79,6 +81,18 @@ class ServiceRestFormalTemplate {
79
81
  return Service_1.HttpResponse.ok(yield this.database.find(this.tableName, Object.assign({}, request.query)));
80
82
  });
81
83
  }
84
+ serveGetKeymap(request) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ var _a, _b, _c, _d;
87
+ let key = (_b = (_a = request.query) === null || _a === void 0 ? void 0 : _a["key"]) !== null && _b !== void 0 ? _b : this.indexer;
88
+ let value = (_d = (_c = request.query) === null || _c === void 0 ? void 0 : _c["value"]) !== null && _d !== void 0 ? _d : "value";
89
+ let keymap = yield this.database.group(this.tableName, key, value, Object.assign({}, request.query));
90
+ let result = {};
91
+ for (let key of Object.keys(keymap))
92
+ result[key] = keymap[key][0];
93
+ return Service_1.HttpResponse.ok(result);
94
+ });
95
+ }
82
96
  servePost(request) {
83
97
  return __awaiter(this, void 0, void 0, function* () {
84
98
  let entity = this.database.add(this.tableName, request.body);
@@ -93,6 +107,11 @@ class ServiceRestFormalTemplate {
93
107
  return Service_1.HttpResponse.ok(this.database.addAll(this.tableName, list));
94
108
  });
95
109
  }
110
+ servePostKeymap(request) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ throw new Error();
113
+ });
114
+ }
96
115
  serveFull(request) {
97
116
  return __awaiter(this, void 0, void 0, function* () {
98
117
  return this.serveGet(request);
@@ -101,6 +101,23 @@ class RepositoryDatabasePostgres extends RepositoryDatabase_1.default {
101
101
  return this.query(query, values);
102
102
  });
103
103
  }
104
+ group(tableName, key, value, filters) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ if (!this.tables[tableName])
107
+ throw new Error(`table ${tableName} does not exist`);
108
+ let schema = this.tables[tableName][0].schema;
109
+ let { where, values } = this.toWhere(tableName, filters);
110
+ let query = `SELECT ${key} as key, array_agg(${value}) as values
111
+ FROM ${schema}.${tableName}
112
+ WHERE ${where} GROUP BY ${key}`;
113
+ return this.query(query).then((map) => {
114
+ let group = {};
115
+ for (let elem of map)
116
+ group[elem.key] = elem.values;
117
+ return group;
118
+ });
119
+ });
120
+ }
104
121
  add(tableName, object, id) {
105
122
  return __awaiter(this, void 0, void 0, function* () {
106
123
  return this.addAll(tableName, [Object.assign({ id: id }, object)]).then((rows) => rows[0]);
@@ -8,8 +8,16 @@ export default class ServiceRestFormalTemplate<Model = any> {
8
8
  readonly database: RepositoryDatabase;
9
9
  readonly get: ServiceRestFormal<any, Model>;
10
10
  readonly getList: ServiceRestFormal<any, Model[]>;
11
+ readonly getKeymap: ServiceRestFormal<any, {
12
+ [key: string]: any;
13
+ }>;
11
14
  readonly post: ServiceRestFormal<Model, Model>;
12
15
  readonly postList: ServiceRestFormal<Model[], Model[]>;
16
+ readonly postKeymap: ServiceRestFormal<{
17
+ [key: string]: any;
18
+ }, {
19
+ [key: string]: any;
20
+ }>;
13
21
  readonly full: ServiceRestFormal<any, Model>;
14
22
  readonly fullList: ServiceRestFormal<any, Model[]>;
15
23
  readonly put: ServiceRestFormal<Model, Model>;
@@ -30,8 +38,16 @@ export default class ServiceRestFormalTemplate<Model = any> {
30
38
  };
31
39
  protected serveGet(request: HttpRequest): Promise<HttpResponse<Model>>;
32
40
  protected serveGetList(request: HttpRequest): Promise<HttpResponse<Model[]>>;
41
+ protected serveGetKeymap(request: HttpRequest): Promise<HttpResponse<{
42
+ [key: string]: any;
43
+ }>>;
33
44
  protected servePost(request: HttpRequest<Model>): Promise<HttpResponse<Model>>;
34
45
  protected servePostList(request: HttpRequest<Model[]>): Promise<HttpResponse<Model[]>>;
46
+ protected servePostKeymap(request: HttpRequest<{
47
+ [key: string]: any;
48
+ }>): Promise<HttpResponse<{
49
+ [key: string]: any;
50
+ }>>;
35
51
  protected serveFull(request: HttpRequest): Promise<HttpResponse<Model>>;
36
52
  protected serveFullList(request: HttpRequest): Promise<HttpResponse<Model[]>>;
37
53
  protected servePage(request: HttpRequest): Promise<HttpResponse<Pagination<Model>>>;
@@ -32,6 +32,11 @@ export default abstract class RepositoryDatabase extends Repository {
32
32
  abstract find<E>(tableName: string, filters: {
33
33
  [key: string]: Primitive | Array<any>;
34
34
  }): Promise<E[]>;
35
+ abstract group(tableName: string, key: string, value: string, filters: {
36
+ [p: string]: Primitive | Array<any>;
37
+ }): Promise<{
38
+ [p: string]: string[];
39
+ }>;
35
40
  abstract add<E>(tableName: string, object: {
36
41
  [key: string]: Primitive;
37
42
  } | any, id?: string): Promise<E>;
@@ -25,6 +25,11 @@ export default class RepositoryDatabasePostgres extends RepositoryDatabase {
25
25
  find<T>(tableName: string, filters?: {
26
26
  [key: string]: Primitive | Array<any>;
27
27
  }): Promise<T[]>;
28
+ group(tableName: string, key: string, value: string, filters: {
29
+ [p: string]: Primitive | Array<any>;
30
+ }): Promise<{
31
+ [p: string]: any[];
32
+ }>;
28
33
  add<E>(tableName: string, object: {
29
34
  [key: string]: Primitive;
30
35
  } | any, id?: string): Promise<E>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ismx-nexo-node-app",
3
- "version": "0.3.70",
3
+ "version": "0.3.72",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "build": "rm -rf ./dist && npx tsc",
@@ -11,8 +11,12 @@ export default class ServiceRestFormalTemplate<Model=any>
11
11
 
12
12
  readonly get!: ServiceRestFormal<any, Model>;
13
13
  readonly getList!: ServiceRestFormal<any, Model[]>;
14
+ readonly getKeymap!: ServiceRestFormal<any, { [key:string]:any }>;
15
+
14
16
  readonly post!: ServiceRestFormal<Model, Model>;
15
17
  readonly postList!: ServiceRestFormal<Model[], Model[]>;
18
+ readonly postKeymap!: ServiceRestFormal<{ [key:string]:any }, { [key:string]:any }>;
19
+
16
20
  readonly full!: ServiceRestFormal<any, Model>
17
21
  readonly fullList!: ServiceRestFormal<any, Model[]>
18
22
 
@@ -35,9 +39,11 @@ export default class ServiceRestFormalTemplate<Model=any>
35
39
 
36
40
  this.getList = new ServiceRestFormal("GET", `${resource}/list`);
37
41
  this.getList.serveRestFormal = this.serveGetList.bind(this);
42
+ this.getKeymap.serveRestFormal = this.serveGetKeymap.bind(this);
38
43
 
39
44
  this.postList = new ServiceRestFormal("POST", `${resource}/list`);
40
45
  this.postList.serveRestFormal = this.servePostList.bind(this);
46
+ this.postKeymap.serveRestFormal = this.servePostKeymap.bind(this);
41
47
 
42
48
  this.full = new ServiceRestFormal("GET", `${resource}/full`);
43
49
  this.full.serveRestFormal = this.serveFull.bind(this);
@@ -97,6 +103,15 @@ export default class ServiceRestFormalTemplate<Model=any>
97
103
  return HttpResponse.ok(await this.database.find<Model>(this.tableName, { ...request.query }));
98
104
  }
99
105
 
106
+ protected async serveGetKeymap(request: HttpRequest): Promise<HttpResponse<{ [key:string]:any }>> {
107
+ let key = request.query?.["key"] ?? this.indexer;
108
+ let value = request.query?.["value"] ?? "value";
109
+ let keymap = await this.database.group(this.tableName, key, value, { ...request.query });
110
+ let result: { [key:string]:any } = {};
111
+ for (let key of Object.keys(keymap)) result[key] = keymap[key][0];
112
+ return HttpResponse.ok(result);
113
+ }
114
+
100
115
  protected async servePost(request: HttpRequest<Model>): Promise<HttpResponse<Model>> {
101
116
  let entity = this.database.add<Model>(this.tableName, request.body);
102
117
  return HttpResponse.ok(entity);
@@ -108,6 +123,10 @@ export default class ServiceRestFormalTemplate<Model=any>
108
123
  return HttpResponse.ok(this.database.addAll<Model>(this.tableName, list as any));
109
124
  }
110
125
 
126
+ protected async servePostKeymap(request: HttpRequest<{ [key:string]:any }>): Promise<HttpResponse<{ [key:string]:any }>> {
127
+ throw new Error();
128
+ }
129
+
111
130
  protected async serveFull(request: HttpRequest): Promise<HttpResponse<Model>> {
112
131
  return this.serveGet(request);
113
132
  }
@@ -56,6 +56,8 @@ export default abstract class RepositoryDatabase extends Repository
56
56
 
57
57
  abstract find<E>(tableName: string, filters: { [key: string]: Primitive | Array<any> }): Promise<E[]>;
58
58
 
59
+ abstract group(tableName: string, key: string, value: string, filters: { [p: string]: Primitive | Array<any> }): Promise<{ [p: string]: string[] }>
60
+
59
61
  abstract add<E>(tableName: string, object: {[key:string]:Primitive}|any, id?: string): Promise<E>;
60
62
 
61
63
  abstract addAll<T>(tableName: string, objects: ({[key:string]:Primitive }|any)[]): Promise<T[]>;
@@ -11,7 +11,6 @@ export interface Column {
11
11
  export default class RepositoryDatabasePostgres extends RepositoryDatabase
12
12
  {
13
13
  private readonly introspectIntervalTime: number = 60 * 60 * 1000;
14
-
15
14
  protected client!: any;
16
15
 
17
16
  private tables: { [key: string]: Column[] } = {};
@@ -81,6 +80,20 @@ export default class RepositoryDatabasePostgres extends RepositoryDatabase
81
80
  return this.query<T>(query, values);
82
81
  }
83
82
 
83
+ async group(tableName: string, key: string, value: string, filters: { [p: string]: Primitive | Array<any> }): Promise<{ [p: string]: any[] }> {
84
+ if (!this.tables[tableName]) throw new Error(`table ${tableName} does not exist`);
85
+ let schema = this.tables[tableName][0].schema;
86
+ let { where, values } = this.toWhere(tableName, filters);
87
+ let query = `SELECT ${key} as key, array_agg(${value}) as values
88
+ FROM ${schema}.${tableName}
89
+ WHERE ${where} GROUP BY ${key}`
90
+ return this.query<{ key: string, values: any[] }>(query).then((map) => {
91
+ let group: { [p: string]: string[] } = {}
92
+ for (let elem of map) group[elem.key] = elem.values;
93
+ return group;
94
+ });
95
+ }
96
+
84
97
  async add<E>(tableName: string, object: {[key:string]:Primitive}|any, id?: string): Promise<E>
85
98
  {
86
99
  return this.addAll<E>(tableName, [ { id: id, ...object } ]).then((rows) => rows[0]);