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.
- package/dist/js/api/ServiceRestFormalTemplate.js +20 -10
- package/dist/js/business/utils/ArrayUtils.js +20 -0
- package/dist/types/api/ServiceRestFormalTemplate.d.ts +1 -0
- package/dist/types/business/utils/ArrayUtils.d.ts +6 -0
- package/package.json +1 -1
- package/src/main/node/api/ServiceRestFormalTemplate.ts +24 -10
- package/src/main/node/business/BusinessServer.ts +0 -3
- package/src/main/node/business/utils/ArrayUtils.ts +11 -0
|
@@ -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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
@@ -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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|