ismx-nexo-node-app 0.4.90 → 0.4.92

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.
@@ -72,6 +72,9 @@ class ServiceRestFormalTemplate {
72
72
  return entity;
73
73
  });
74
74
  }
75
+ defaultFilter() {
76
+ return {};
77
+ }
75
78
  /**
76
79
  * Handles GET requests by retrieving a single record from the database based on the provided request.
77
80
  *
@@ -93,7 +96,8 @@ class ServiceRestFormalTemplate {
93
96
  */
94
97
  serveGetList(request) {
95
98
  return __awaiter(this, void 0, void 0, function* () {
96
- let entities = yield this.database.find(this.tableName, Object.assign({}, request.query));
99
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
100
+ let entities = yield this.database.find(this.tableName, filters);
97
101
  let result = yield Promise.all(entities.map((entity) => this.extendEntity(entity)));
98
102
  return Service_1.HttpResponse.ok(result);
99
103
  });
@@ -107,7 +111,8 @@ class ServiceRestFormalTemplate {
107
111
  servePage(request) {
108
112
  return __awaiter(this, void 0, void 0, function* () {
109
113
  let { maxResults, pageNumber } = this.getFormalPage(request);
110
- let result = yield this.database.page(this.tableName, "timestamp", maxResults, pageNumber);
114
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
115
+ let result = yield this.database.page(this.tableName, "timestamp", maxResults, pageNumber, filters);
111
116
  result.elements = yield Promise.all(result.elements.map((entity) => this.extendEntity(entity)));
112
117
  return Service_1.HttpResponse.ok(result);
113
118
  });
@@ -120,7 +125,8 @@ class ServiceRestFormalTemplate {
120
125
  */
121
126
  serveMap(request) {
122
127
  return __awaiter(this, void 0, void 0, function* () {
123
- let results = yield this.database.find(this.tableName, Object.assign({}, request.query));
128
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
129
+ let results = yield this.database.find(this.tableName, filters);
124
130
  let extended = results.map((entity) => this.extendEntity(entity));
125
131
  let response = {};
126
132
  yield Promise.all(extended).then((entities) => {
@@ -145,9 +151,10 @@ class ServiceRestFormalTemplate {
145
151
  serveGetKeymap(request) {
146
152
  return __awaiter(this, void 0, void 0, function* () {
147
153
  var _a, _b, _c, _d;
154
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
148
155
  let key = (_b = (_a = request.query) === null || _a === void 0 ? void 0 : _a["_key"]) !== null && _b !== void 0 ? _b : this.indexer;
149
156
  let value = (_d = (_c = request.query) === null || _c === void 0 ? void 0 : _c["_value"]) !== null && _d !== void 0 ? _d : "value";
150
- let keymap = yield this.database.group(this.tableName, key, value, Object.assign({}, request.query));
157
+ let keymap = yield this.database.group(this.tableName, key, value, filters);
151
158
  let result = {};
152
159
  for (let key of Object.keys(keymap))
153
160
  result[key] = keymap[key][0];
@@ -167,7 +174,7 @@ class ServiceRestFormalTemplate {
167
174
  (_a = request.body) === null || _a === void 0 ? true : delete _a[this.indexer];
168
175
  let entity = yield this.database.update(this.tableName, id, request.body);
169
176
  let result = (yield this.serveGet({ query: { [this.indexer]: id } })).content;
170
- return Service_1.HttpResponse.ok(result);
177
+ return Service_1.HttpResponse.ok(result ? yield this.extendEntity(result) : result);
171
178
  });
172
179
  }
173
180
  /**
@@ -182,7 +189,7 @@ class ServiceRestFormalTemplate {
182
189
  let entity = yield this.database.add(this.tableName, request.body);
183
190
  let id = entity[this.indexer];
184
191
  let result = (yield this.serveGet({ query: { [this.indexer]: id } })).content;
185
- return Service_1.HttpResponse.ok(result);
192
+ return Service_1.HttpResponse.ok(result ? yield this.extendEntity(result) : result);
186
193
  });
187
194
  }
188
195
  servePostList(request) {
@@ -203,18 +210,21 @@ class ServiceRestFormalTemplate {
203
210
  var _a, _b, _c;
204
211
  let selection = (_b = (_a = request.query) === null || _a === void 0 ? void 0 : _a["selection"]) !== null && _b !== void 0 ? _b : this.indexer;
205
212
  (_c = request.query) === null || _c === void 0 ? true : delete _c["selection"];
206
- let select = yield this.database.select(this.tableName, selection, Object.assign({}, request.query));
213
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
214
+ let select = yield this.database.select(this.tableName, selection, filters);
207
215
  return Service_1.HttpResponse.ok(select);
208
216
  });
209
217
  }
210
218
  serveExist(request) {
211
219
  return __awaiter(this, void 0, void 0, function* () {
212
- return Service_1.HttpResponse.ok((yield this.database.count(this.tableName, Object.assign({}, request.query))) > 0);
220
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
221
+ return Service_1.HttpResponse.ok((yield this.database.count(this.tableName, filters)) > 0);
213
222
  });
214
223
  }
215
224
  serveCount(request) {
216
225
  return __awaiter(this, void 0, void 0, function* () {
217
- return Service_1.HttpResponse.ok((yield this.database.count(this.tableName, Object.assign({}, request.query))));
226
+ let filters = Object.assign(Object.assign({}, this.defaultFilter()), request.query);
227
+ return Service_1.HttpResponse.ok((yield this.database.count(this.tableName, filters)));
218
228
  });
219
229
  }
220
230
  serveDel(request) {
@@ -222,7 +232,7 @@ class ServiceRestFormalTemplate {
222
232
  let entity = (yield this.serveGet(request)).content;
223
233
  if (entity)
224
234
  yield this.database.delete(this.tableName, entity[this.indexer]);
225
- return Service_1.HttpResponse.ok(entity);
235
+ return Service_1.HttpResponse.ok(entity ? yield this.extendEntity(entity) : entity);
226
236
  });
227
237
  }
228
238
  }
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  class ArrayUtils {
4
13
  /**
@@ -77,5 +86,16 @@ class ArrayUtils {
77
86
  static subtract(arr1, arr2) {
78
87
  return arr1.filter(item => !arr2.includes(item));
79
88
  }
89
+ /**
90
+ *
91
+ * @param array
92
+ * @param predicate
93
+ */
94
+ static filterAsync(array, predicate) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ const results = yield Promise.all(array.map((item, idx) => __awaiter(this, void 0, void 0, function* () { return !!(yield predicate(item, idx, array)); })));
97
+ return array.filter((_, index) => results[index]);
98
+ });
99
+ }
80
100
  }
81
101
  exports.default = ArrayUtils;
@@ -35,6 +35,7 @@ export default class ServiceRestFormalTemplate<Model = any> {
35
35
  pageNumber: number;
36
36
  };
37
37
  extendEntity<T extends Model = Model>(entity: Model): Promise<T>;
38
+ defaultFilter(): Partial<Transient<Model>>;
38
39
  /**
39
40
  * Handles GET requests by retrieving a single record from the database based on the provided request.
40
41
  *
@@ -51,4 +51,10 @@ export default abstract class ArrayUtils {
51
51
  * @template T
52
52
  */
53
53
  static subtract<T>(arr1: T[], arr2: T[]): T[];
54
+ /**
55
+ *
56
+ * @param array
57
+ * @param predicate
58
+ */
59
+ static filterAsync<T>(array: T[], predicate: (value: T, index: number, array: T[]) => boolean | Promise<boolean>): Promise<T[]>;
54
60
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ismx-nexo-node-app",
3
- "version": "0.4.90",
3
+ "version": "0.4.92",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "build": "rm -rf ./dist && npx tsc",
@@ -2,6 +2,7 @@ import {HttpRequest, HttpResponse} from "./Service";
2
2
  import ServiceRestFormal, {Wrapper} from "./ServiceRestFormal";
3
3
  import {Pagination, Transient} from "../repository/Repository";
4
4
  import RepositoryDatabase from "../repository/RepositoryDatabase";
5
+ import ArrayUtils from "../business/utils/ArrayUtils";
5
6
 
6
7
  export default class ServiceRestFormalTemplate<Model=any>
7
8
  {
@@ -81,6 +82,10 @@ export default class ServiceRestFormalTemplate<Model=any>
81
82
  return entity as T;
82
83
  }
83
84
 
85
+ defaultFilter(): Partial<Transient<Model>> {
86
+ return {};
87
+ }
88
+
84
89
  /**
85
90
  * Handles GET requests by retrieving a single record from the database based on the provided request.
86
91
  *
@@ -100,7 +105,8 @@ export default class ServiceRestFormalTemplate<Model=any>
100
105
  * @return {Promise<HttpResponse<Model[]>>} A promise that resolves to an HTTP response containing an array of models.
101
106
  */
102
107
  protected async serveGetList(request: HttpRequest): Promise<HttpResponse<Model[]>> {
103
- let entities = await this.database.find<Model>(this.tableName, { ...request.query });
108
+ let filters = { ...this.defaultFilter(), ...request.query };
109
+ let entities = await this.database.find<Model>(this.tableName, filters);
104
110
  let result = await Promise.all(entities.map((entity) => this.extendEntity(entity)));
105
111
  return HttpResponse.ok(result);
106
112
  }
@@ -113,7 +119,8 @@ export default class ServiceRestFormalTemplate<Model=any>
113
119
  */
114
120
  protected async servePage(request: HttpRequest): Promise<HttpResponse<Pagination<Model>>> {
115
121
  let { maxResults, pageNumber } = this.getFormalPage(request);
116
- let result = await this.database.page<Model>(this.tableName, "timestamp", maxResults, pageNumber);
122
+ let filters = { ...this.defaultFilter(), ...request.query };
123
+ let result = await this.database.page<Model>(this.tableName, "timestamp", maxResults, pageNumber, filters);
117
124
  result.elements = await Promise.all(result.elements.map((entity) => this.extendEntity(entity)));
118
125
  return HttpResponse.ok(result);
119
126
  }
@@ -125,7 +132,8 @@ export default class ServiceRestFormalTemplate<Model=any>
125
132
  * @return {Promise<HttpResponse<{[key: string]: Model}>>} A promise that resolves to an HTTP response containing a map of models, where the key is derived from the indexed property of each model.
126
133
  */
127
134
  protected async serveMap(request: HttpRequest): Promise<HttpResponse<{[key: string]: Model}>> {
128
- let results = await this.database.find<Model>(this.tableName, { ...request.query });
135
+ let filters = { ...this.defaultFilter(), ...request.query };
136
+ let results = await this.database.find<Model>(this.tableName, filters);
129
137
  let extended = results.map((entity) => this.extendEntity(entity));
130
138
 
131
139
  let response: {[key: string]: Model} = {};
@@ -147,9 +155,11 @@ export default class ServiceRestFormalTemplate<Model=any>
147
155
  * @return {Promise<HttpResponse<{ [key:string]:any }>>} A promise resolving to an HTTP response containing the key-value mapping.
148
156
  */
149
157
  protected async serveGetKeymap(request: HttpRequest): Promise<HttpResponse<{ [key:string]:any }>> {
158
+ let filters = { ...this.defaultFilter(), ...request.query };
150
159
  let key = request.query?.["_key"] ?? this.indexer;
151
160
  let value = request.query?.["_value"] ?? "value";
152
- let keymap = await this.database.group(this.tableName, key, value, { ...request.query });
161
+ let keymap = await this.database.group(this.tableName, key, value, filters);
162
+
153
163
  let result: { [key:string]:any } = {};
154
164
  for (let key of Object.keys(keymap)) result[key] = keymap[key][0];
155
165
  return HttpResponse.ok(result);
@@ -166,7 +176,7 @@ export default class ServiceRestFormalTemplate<Model=any>
166
176
  delete request.body?.[this.indexer as keyof Model];
167
177
  let entity = await this.database.update<Model>(this.tableName, id, request.body);
168
178
  let result = (await this.serveGet({ query: { [this.indexer]: id } })).content;
169
- return HttpResponse.ok(result);
179
+ return HttpResponse.ok(result ? await this.extendEntity(result) : result);
170
180
  }
171
181
 
172
182
  /**
@@ -180,7 +190,7 @@ export default class ServiceRestFormalTemplate<Model=any>
180
190
  let entity = await this.database.add<Model>(this.tableName, request.body);
181
191
  let id = entity[this.indexer as keyof Model] as unknown as string;
182
192
  let result = (await this.serveGet({ query: { [this.indexer]: id } })).content
183
- return HttpResponse.ok(result);
193
+ return HttpResponse.ok(result ? await this.extendEntity(result) : result);
184
194
  }
185
195
 
186
196
  protected async servePostList(request: HttpRequest<Model[]>): Promise<HttpResponse<Model[]>> {
@@ -196,21 +206,25 @@ export default class ServiceRestFormalTemplate<Model=any>
196
206
  protected async serveSelect(request: HttpRequest): Promise<HttpResponse<string[]>> {
197
207
  let selection = request.query?.["selection"] ?? this.indexer;
198
208
  delete request.query?.["selection"];
199
- let select = await this.database.select(this.tableName, selection, { ...request.query });
209
+
210
+ let filters = { ...this.defaultFilter(), ...request.query };
211
+ let select = await this.database.select(this.tableName, selection, filters);
200
212
  return HttpResponse.ok(select);
201
213
  }
202
214
 
203
215
  protected async serveExist(request: HttpRequest): Promise<HttpResponse<Boolean>> {
204
- return HttpResponse.ok((await this.database.count(this.tableName, { ...request.query })) > 0);
216
+ let filters = { ...this.defaultFilter(), ...request.query };
217
+ return HttpResponse.ok((await this.database.count(this.tableName, filters)) > 0);
205
218
  }
206
219
 
207
220
  protected async serveCount(request: HttpRequest): Promise<HttpResponse<Number>> {
208
- return HttpResponse.ok((await this.database.count(this.tableName, { ...request.query })));
221
+ let filters = { ...this.defaultFilter(), ...request.query };
222
+ return HttpResponse.ok((await this.database.count(this.tableName, filters)));
209
223
  }
210
224
 
211
225
  protected async serveDel(request: HttpRequest): Promise<HttpResponse<Model>> {
212
226
  let entity = (await this.serveGet(request)).content;
213
227
  if (entity) await this.database.delete(this.tableName, entity[this.indexer as keyof Model] as unknown as string);
214
- return HttpResponse.ok(entity);
228
+ return HttpResponse.ok(entity ? await this.extendEntity(entity) : entity);
215
229
  }
216
230
  }
@@ -1,8 +1,5 @@
1
1
  import Service, {HttpRequest, HttpResponse} from "../api/Service";
2
2
  import Business from "./Business";
3
- import path from "path";
4
- import {fileURLToPath} from "url";
5
- import {readdir} from "fs/promises";
6
3
 
7
4
  export default class BusinessServer extends Business
8
5
  {
@@ -77,4 +77,15 @@ export default abstract class ArrayUtils {
77
77
  static subtract<T>(arr1: T[], arr2: T[]): T[] {
78
78
  return arr1.filter(item => !arr2.includes(item));
79
79
  }
80
+
81
+ /**
82
+ *
83
+ * @param array
84
+ * @param predicate
85
+ */
86
+ static async filterAsync<T>(array: T[], predicate: (value: T, index: number, array: T[]) => boolean | Promise<boolean>): Promise<T[]> {
87
+ const results = await Promise.all(array.map(async (item, idx) => !!(await predicate(item, idx, array))));
88
+ return array.filter((_, index) => results[index]);
89
+ }
90
+
80
91
  }