express-ext 0.2.6 → 0.3.0
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/lib/GenericController.js +89 -66
- package/lib/GenericSearchController.js +2 -3
- package/lib/LoadSearchController.js +4 -5
- package/lib/LowCodeController.js +4 -5
- package/lib/SearchController.js +1 -1
- package/lib/edit.js +58 -34
- package/lib/index.js +6 -1
- package/lib/resources.js +9 -0
- package/lib/search.js +92 -48
- package/package.json +1 -1
- package/src/GenericController.ts +92 -41
- package/src/GenericSearchController.ts +4 -4
- package/src/LoadSearchController.ts +3 -4
- package/src/LowCodeController.ts +6 -6
- package/src/SearchController.ts +1 -1
- package/src/edit.ts +65 -31
- package/src/index.ts +5 -1
- package/src/resources.ts +12 -1
- package/src/search.ts +98 -20
- package/lib/search_func.js +0 -22
- package/src/search_func.ts +0 -22
package/lib/search.js
CHANGED
|
@@ -144,6 +144,57 @@ function buildSortSearch(search, fields, sort) {
|
|
|
144
144
|
return sorts;
|
|
145
145
|
}
|
|
146
146
|
exports.buildSortSearch = buildSortSearch;
|
|
147
|
+
function clone(obj) {
|
|
148
|
+
if (!obj) {
|
|
149
|
+
return obj;
|
|
150
|
+
}
|
|
151
|
+
if (obj instanceof Date) {
|
|
152
|
+
return new Date(obj.getTime());
|
|
153
|
+
}
|
|
154
|
+
if (typeof obj !== 'object') {
|
|
155
|
+
return obj;
|
|
156
|
+
}
|
|
157
|
+
if (Array.isArray(obj)) {
|
|
158
|
+
var arr = [];
|
|
159
|
+
for (var _i = 0, obj_1 = obj; _i < obj_1.length; _i++) {
|
|
160
|
+
var sub = obj_1[_i];
|
|
161
|
+
var c = clone(sub);
|
|
162
|
+
arr.push(c);
|
|
163
|
+
}
|
|
164
|
+
return arr;
|
|
165
|
+
}
|
|
166
|
+
var x = {};
|
|
167
|
+
var keys = Object.keys(obj);
|
|
168
|
+
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
|
|
169
|
+
var k = keys_1[_a];
|
|
170
|
+
var v = obj[k];
|
|
171
|
+
if (v instanceof Date) {
|
|
172
|
+
x[k] = new Date(v.getTime());
|
|
173
|
+
} else {
|
|
174
|
+
switch (typeof v) {
|
|
175
|
+
case 'object':
|
|
176
|
+
x[k] = clone(v);
|
|
177
|
+
break;
|
|
178
|
+
default:
|
|
179
|
+
x[k] = v;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return x;
|
|
185
|
+
}
|
|
186
|
+
exports.clone = clone;
|
|
187
|
+
function cloneFilter(obj, page, limit) {
|
|
188
|
+
var f = clone(obj);
|
|
189
|
+
if (!obj.hasOwnProperty(resources_1.resources.page)) {
|
|
190
|
+
obj[resources_1.resources.page] = page;
|
|
191
|
+
}
|
|
192
|
+
if (!obj.hasOwnProperty(resources_1.resources.limit)) {
|
|
193
|
+
obj[resources_1.resources.limit] = limit;
|
|
194
|
+
}
|
|
195
|
+
return f;
|
|
196
|
+
}
|
|
197
|
+
exports.cloneFilter = cloneFilter;
|
|
147
198
|
function jsonResult(res, result, quick, fields, config) {
|
|
148
199
|
if (quick && fields && fields.length > 0) {
|
|
149
200
|
res.status(200).json(toCsv(fields, result)).end();
|
|
@@ -255,8 +306,8 @@ function fromUrl(req, arr) {
|
|
|
255
306
|
var s = {};
|
|
256
307
|
var obj = req.query;
|
|
257
308
|
var keys = Object.keys(obj);
|
|
258
|
-
for (var _i = 0,
|
|
259
|
-
var key =
|
|
309
|
+
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
|
|
310
|
+
var key = keys_2[_i];
|
|
260
311
|
if (inArray(key, arr)) {
|
|
261
312
|
var x = obj[key].split(',');
|
|
262
313
|
setValue(s, key, x);
|
|
@@ -335,16 +386,6 @@ function getParameters(obj, config) {
|
|
|
335
386
|
var ipageSize = Math.floor(parseFloat(pageSize));
|
|
336
387
|
if (ipageSize > 0) {
|
|
337
388
|
r.limit = ipageSize;
|
|
338
|
-
var skip = o['skip'];
|
|
339
|
-
if (skip && !isNaN(skip)) {
|
|
340
|
-
var iskip = Math.floor(parseFloat(skip));
|
|
341
|
-
if (iskip >= 0) {
|
|
342
|
-
r.offset = iskip;
|
|
343
|
-
r.offsetOrNextPageToken = r.offset;
|
|
344
|
-
deletePageInfo(o);
|
|
345
|
-
return r;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
389
|
var pageIndex = o['page'];
|
|
349
390
|
if (!pageIndex) {
|
|
350
391
|
pageIndex = o['pageIndex'];
|
|
@@ -357,37 +398,21 @@ function getParameters(obj, config) {
|
|
|
357
398
|
if (ipageIndex < 1) {
|
|
358
399
|
ipageIndex = 1;
|
|
359
400
|
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
firstPageSize = o['firstPageSize'];
|
|
363
|
-
}
|
|
364
|
-
if (!firstPageSize) {
|
|
365
|
-
firstPageSize = o['initPageSize'];
|
|
366
|
-
}
|
|
367
|
-
if (firstPageSize && !isNaN(firstPageSize)) {
|
|
368
|
-
var ifirstPageSize = Math.floor(parseFloat(firstPageSize));
|
|
369
|
-
if (ifirstPageSize > 0) {
|
|
370
|
-
r.offset = ipageSize * (ipageIndex - 2) + ifirstPageSize;
|
|
371
|
-
r.offsetOrNextPageToken = r.offset;
|
|
372
|
-
deletePageInfo(o);
|
|
373
|
-
return r;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
r.offset = ipageSize * (ipageIndex - 1);
|
|
377
|
-
r.offsetOrNextPageToken = r.offset;
|
|
401
|
+
r.page = ipageIndex;
|
|
402
|
+
r.pageOrNextPageToken = r.page;
|
|
378
403
|
deletePageInfo(o);
|
|
379
404
|
return r;
|
|
380
405
|
}
|
|
381
|
-
r.
|
|
406
|
+
r.page = 1;
|
|
382
407
|
if (r.nextPageToken && r.nextPageToken.length > 0) {
|
|
383
|
-
r.
|
|
408
|
+
r.pageOrNextPageToken = r.nextPageToken;
|
|
384
409
|
}
|
|
385
410
|
deletePageInfo(o);
|
|
386
411
|
return r;
|
|
387
412
|
}
|
|
388
413
|
}
|
|
389
414
|
if (r.nextPageToken && r.nextPageToken.length > 0) {
|
|
390
|
-
r.
|
|
415
|
+
r.pageOrNextPageToken = r.nextPageToken;
|
|
391
416
|
}
|
|
392
417
|
deletePageInfo(o);
|
|
393
418
|
return r;
|
|
@@ -426,8 +451,8 @@ function getParameters(obj, config) {
|
|
|
426
451
|
if (skip && !isNaN(skip)) {
|
|
427
452
|
var iskip = Math.floor(parseFloat(skip));
|
|
428
453
|
if (iskip >= 0) {
|
|
429
|
-
r.
|
|
430
|
-
r.
|
|
454
|
+
r.page = iskip;
|
|
455
|
+
r.pageOrNextPageToken = r.page;
|
|
431
456
|
deletePageInfo(o, arr);
|
|
432
457
|
return r;
|
|
433
458
|
}
|
|
@@ -450,27 +475,27 @@ function getParameters(obj, config) {
|
|
|
450
475
|
if (firstPageSize && !isNaN(firstPageSize)) {
|
|
451
476
|
var ifirstPageSize = Math.floor(parseFloat(firstPageSize));
|
|
452
477
|
if (ifirstPageSize > 0) {
|
|
453
|
-
r.
|
|
454
|
-
r.
|
|
478
|
+
r.page = ipageSize * (ipageIndex - 2) + ifirstPageSize;
|
|
479
|
+
r.pageOrNextPageToken = r.page;
|
|
455
480
|
deletePageInfo(o, arr);
|
|
456
481
|
return r;
|
|
457
482
|
}
|
|
458
483
|
}
|
|
459
|
-
r.
|
|
460
|
-
r.
|
|
484
|
+
r.page = ipageSize * (ipageIndex - 1);
|
|
485
|
+
r.pageOrNextPageToken = r.page;
|
|
461
486
|
deletePageInfo(o, arr);
|
|
462
487
|
return r;
|
|
463
488
|
}
|
|
464
|
-
r.
|
|
489
|
+
r.page = 0;
|
|
465
490
|
if (r.nextPageToken && r.nextPageToken.length > 0) {
|
|
466
|
-
r.
|
|
491
|
+
r.pageOrNextPageToken = r.nextPageToken;
|
|
467
492
|
}
|
|
468
493
|
deletePageInfo(o, arr);
|
|
469
494
|
return r;
|
|
470
495
|
}
|
|
471
496
|
}
|
|
472
497
|
if (r.nextPageToken && r.nextPageToken.length > 0) {
|
|
473
|
-
r.
|
|
498
|
+
r.pageOrNextPageToken = r.nextPageToken;
|
|
474
499
|
}
|
|
475
500
|
deletePageInfo(o, arr);
|
|
476
501
|
return r;
|
|
@@ -545,8 +570,8 @@ function buildMetadata(attributes, includeDate) {
|
|
|
545
570
|
var keys = Object.keys(attributes);
|
|
546
571
|
var dates = [];
|
|
547
572
|
var numbers = [];
|
|
548
|
-
for (var _i = 0,
|
|
549
|
-
var key =
|
|
573
|
+
for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {
|
|
574
|
+
var key = keys_3[_i];
|
|
550
575
|
var attr = attributes[key];
|
|
551
576
|
if (attr.type === 'number' || attr.type === 'integer') {
|
|
552
577
|
numbers.push(key);
|
|
@@ -614,8 +639,8 @@ function format(obj, dates, nums) {
|
|
|
614
639
|
}
|
|
615
640
|
} else if (typeof v === 'object') {
|
|
616
641
|
var keys = Object.keys(v);
|
|
617
|
-
for (var _a = 0,
|
|
618
|
-
var key =
|
|
642
|
+
for (var _a = 0, keys_4 = keys; _a < keys_4.length; _a++) {
|
|
643
|
+
var key = keys_4[_a];
|
|
619
644
|
var v2 = v[key];
|
|
620
645
|
if (v2 instanceof Date) {
|
|
621
646
|
continue;
|
|
@@ -657,8 +682,8 @@ function format(obj, dates, nums) {
|
|
|
657
682
|
}
|
|
658
683
|
} else if (typeof v === 'object') {
|
|
659
684
|
var keys = Object.keys(v);
|
|
660
|
-
for (var _c = 0,
|
|
661
|
-
var key =
|
|
685
|
+
for (var _c = 0, keys_5 = keys; _c < keys_5.length; _c++) {
|
|
686
|
+
var key = keys_5[_c];
|
|
662
687
|
var v2 = v[key];
|
|
663
688
|
if (v2 instanceof Date) {
|
|
664
689
|
delete o[key];
|
|
@@ -683,3 +708,22 @@ function format(obj, dates, nums) {
|
|
|
683
708
|
return o;
|
|
684
709
|
}
|
|
685
710
|
exports.format = format;
|
|
711
|
+
function getMetadataFunc(viewService, dates, numbers, keys) {
|
|
712
|
+
var m = { dates: dates, numbers: numbers };
|
|
713
|
+
if ((m.dates && m.dates.length > 0) || (m.numbers && m.numbers.length > 0)) {
|
|
714
|
+
return m;
|
|
715
|
+
}
|
|
716
|
+
if (keys) {
|
|
717
|
+
if (!Array.isArray(keys)) {
|
|
718
|
+
return buildMetadata(keys);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
if (typeof viewService !== 'function' && viewService.metadata) {
|
|
722
|
+
var metadata = viewService.metadata();
|
|
723
|
+
if (metadata) {
|
|
724
|
+
return buildMetadata(metadata);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
return undefined;
|
|
728
|
+
}
|
|
729
|
+
exports.getMetadataFunc = getMetadataFunc;
|
package/package.json
CHANGED
package/src/GenericController.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {Request, Response} from 'express';
|
|
2
|
-
import {checkId, create, isTypeError, update} from './edit';
|
|
3
|
-
import {handleError, Log} from './http';
|
|
4
|
-
import {LoadController} from './LoadController';
|
|
5
|
-
import {Attribute, Attributes, ErrorMessage} from './metadata';
|
|
6
|
-
import {resources} from './resources';
|
|
7
|
-
import {buildAndCheckId, buildId} from './view';
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
import { checkId, create, isTypeError, update } from './edit';
|
|
3
|
+
import { handleError, Log } from './http';
|
|
4
|
+
import { LoadController } from './LoadController';
|
|
5
|
+
import { Attribute, Attributes, ErrorMessage } from './metadata';
|
|
6
|
+
import { resources, StringMap } from './resources';
|
|
7
|
+
import { buildAndCheckId, buildId } from './view';
|
|
8
8
|
|
|
9
9
|
export type Build<T> = (res: Response, obj: T, isCreate?: boolean, isPatch?: boolean) => void;
|
|
10
|
-
export type Validate<T> = (obj: T, patch?: boolean) => Promise<ErrorMessage[]>;
|
|
11
|
-
export type Save<T> = (obj: T, ctx?: any) => Promise<number|T|ErrorMessage[]>;
|
|
10
|
+
export type Validate<T> = (obj: T, resource?: StringMap, patch?: boolean) => Promise<ErrorMessage[]>;
|
|
11
|
+
export type Save<T> = (obj: T, ctx?: any) => Promise<number | T | ErrorMessage[]>;
|
|
12
12
|
export interface GenericService<T, ID, R> {
|
|
13
|
-
metadata?(): Attributes|undefined;
|
|
14
|
-
load(id: ID, ctx?: any): Promise<T|null>;
|
|
13
|
+
metadata?(): Attributes | undefined;
|
|
14
|
+
load(id: ID, ctx?: any): Promise<T | null>;
|
|
15
15
|
create(obj: T, ctx?: any): Promise<R>;
|
|
16
16
|
update(obj: T, ctx?: any): Promise<R>;
|
|
17
17
|
patch?(obj: Partial<T>, ctx?: any): Promise<R>;
|
|
@@ -20,7 +20,13 @@ export interface GenericService<T, ID, R> {
|
|
|
20
20
|
export class GenericController<T, ID> extends LoadController<T, ID> {
|
|
21
21
|
metadata?: Attributes;
|
|
22
22
|
returnNumber?: boolean;
|
|
23
|
-
constructor(
|
|
23
|
+
constructor(
|
|
24
|
+
log: Log,
|
|
25
|
+
public service: GenericService<T, ID, number | T | ErrorMessage[]>,
|
|
26
|
+
public build?: Build<T>,
|
|
27
|
+
public validate?: Validate<T>,
|
|
28
|
+
returnNumber?: boolean,
|
|
29
|
+
) {
|
|
24
30
|
super(log, service);
|
|
25
31
|
this.returnNumber = returnNumber;
|
|
26
32
|
if (service.metadata) {
|
|
@@ -44,13 +50,13 @@ export class GenericController<T, ID> extends LoadController<T, ID> {
|
|
|
44
50
|
update(req: Request, res: Response): void {
|
|
45
51
|
const id = buildAndCheckIdWithBody<T, ID, any>(req, res, this.keys, this.service.update);
|
|
46
52
|
if (id) {
|
|
47
|
-
validateAndUpdate(res, req.body, false, this.service.update, this.log, this.validate, this.build);
|
|
53
|
+
validateAndUpdate(res, req.body, false, this.service.update, this.log, this.validate, undefined, this.build);
|
|
48
54
|
}
|
|
49
55
|
}
|
|
50
56
|
patch(req: Request, res: Response): void {
|
|
51
57
|
const id = buildAndCheckIdWithBody<T, ID, any>(req, res, this.keys, this.service.patch);
|
|
52
58
|
if (id && this.service.patch) {
|
|
53
|
-
validateAndUpdate(res, req.body, true, this.service.patch, this.log, this.validate, this.build);
|
|
59
|
+
validateAndUpdate(res, req.body, true, this.service.patch, this.log, this.validate, undefined, this.build);
|
|
54
60
|
}
|
|
55
61
|
}
|
|
56
62
|
delete(req: Request, res: Response): void {
|
|
@@ -59,46 +65,71 @@ export class GenericController<T, ID> extends LoadController<T, ID> {
|
|
|
59
65
|
if (!this.service.delete) {
|
|
60
66
|
res.status(405).end('Method Not Allowed');
|
|
61
67
|
} else {
|
|
62
|
-
this.service
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
this.service
|
|
69
|
+
.delete(id)
|
|
70
|
+
.then((count) => {
|
|
71
|
+
res.status(getDeleteStatus(count)).json(count).end();
|
|
72
|
+
})
|
|
73
|
+
.catch((err) => handleError(err, res, this.log));
|
|
65
74
|
}
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
}
|
|
69
|
-
export function validateAndCreate<T>(
|
|
78
|
+
export function validateAndCreate<T>(
|
|
79
|
+
req: Request,
|
|
80
|
+
res: Response,
|
|
81
|
+
save: Save<T>,
|
|
82
|
+
log: Log,
|
|
83
|
+
validate?: Validate<T>,
|
|
84
|
+
build?: Build<T>,
|
|
85
|
+
returnNumber?: boolean,
|
|
86
|
+
): void {
|
|
70
87
|
const obj = req.body;
|
|
71
88
|
if (!obj || obj === '') {
|
|
72
89
|
res.status(400).end('The request body cannot be empty.');
|
|
73
90
|
} else {
|
|
74
91
|
if (validate) {
|
|
75
|
-
validate(obj)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
build
|
|
92
|
+
validate(obj)
|
|
93
|
+
.then((errors) => {
|
|
94
|
+
if (errors && errors.length > 0) {
|
|
95
|
+
res.status(getStatusCode(errors)).json(errors).end();
|
|
96
|
+
} else {
|
|
97
|
+
if (build) {
|
|
98
|
+
build(res, obj, true);
|
|
99
|
+
}
|
|
100
|
+
create(res, obj, save, log, returnNumber);
|
|
81
101
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}).catch(err => handleError(err, res, log));
|
|
102
|
+
})
|
|
103
|
+
.catch((err) => handleError(err, res, log));
|
|
85
104
|
} else {
|
|
86
105
|
create(res, obj, save, log, returnNumber);
|
|
87
106
|
}
|
|
88
107
|
}
|
|
89
108
|
}
|
|
90
|
-
export function validateAndUpdate<T>(
|
|
109
|
+
export function validateAndUpdate<T>(
|
|
110
|
+
res: Response,
|
|
111
|
+
obj: T,
|
|
112
|
+
isPatch: boolean,
|
|
113
|
+
save: Save<T>,
|
|
114
|
+
log: Log,
|
|
115
|
+
validate?: Validate<T>,
|
|
116
|
+
resource?: StringMap,
|
|
117
|
+
build?: Build<T>,
|
|
118
|
+
returnNumber?: boolean,
|
|
119
|
+
): void {
|
|
91
120
|
if (validate) {
|
|
92
|
-
validate(obj, isPatch)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
build
|
|
121
|
+
validate(obj, resource, isPatch)
|
|
122
|
+
.then((errors) => {
|
|
123
|
+
if (errors && errors.length > 0) {
|
|
124
|
+
res.status(getStatusCode(errors)).json(errors).end();
|
|
125
|
+
} else {
|
|
126
|
+
if (build) {
|
|
127
|
+
build(res, obj, false, isPatch);
|
|
128
|
+
}
|
|
129
|
+
update(res, obj, save, log, returnNumber);
|
|
98
130
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}).catch(err => handleError(err, res, log));
|
|
131
|
+
})
|
|
132
|
+
.catch((err) => handleError(err, res, log));
|
|
102
133
|
} else {
|
|
103
134
|
update(res, obj, save, log, returnNumber);
|
|
104
135
|
}
|
|
@@ -135,7 +166,7 @@ export function getDeleteStatus(count: number): number {
|
|
|
135
166
|
}
|
|
136
167
|
}
|
|
137
168
|
export function getStatusCode(errs: ErrorMessage[]): number {
|
|
138
|
-
return
|
|
169
|
+
return isTypeError(errs) ? 400 : 422;
|
|
139
170
|
}
|
|
140
171
|
export interface ModelConfig {
|
|
141
172
|
id?: string;
|
|
@@ -147,13 +178,33 @@ export interface ModelConfig {
|
|
|
147
178
|
createdAt?: string;
|
|
148
179
|
version?: string;
|
|
149
180
|
}
|
|
150
|
-
export function useBuild<T>(c: ModelConfig, generate?: (
|
|
151
|
-
const b = new Builder<T>(
|
|
181
|
+
export function useBuild<T>(c: ModelConfig, generate?: () => string): Build<T> {
|
|
182
|
+
const b = new Builder<T>(
|
|
183
|
+
generate,
|
|
184
|
+
c.id ? c.id : '',
|
|
185
|
+
c.payload ? c.payload : '',
|
|
186
|
+
c.user ? c.user : '',
|
|
187
|
+
c.updatedBy ? c.updatedBy : '',
|
|
188
|
+
c.updatedAt ? c.updatedAt : '',
|
|
189
|
+
c.createdBy ? c.createdBy : '',
|
|
190
|
+
c.createdAt ? c.createdAt : '',
|
|
191
|
+
c.version ? c.version : '',
|
|
192
|
+
);
|
|
152
193
|
return b.build;
|
|
153
194
|
}
|
|
154
195
|
// tslint:disable-next-line:max-classes-per-file
|
|
155
196
|
export class Builder<T> {
|
|
156
|
-
constructor(
|
|
197
|
+
constructor(
|
|
198
|
+
public generate: (() => string) | undefined,
|
|
199
|
+
public id: string,
|
|
200
|
+
public payload: string,
|
|
201
|
+
public user: string,
|
|
202
|
+
public updatedBy: string,
|
|
203
|
+
public updatedAt: string,
|
|
204
|
+
public createdBy: string,
|
|
205
|
+
public createdAt: string,
|
|
206
|
+
public version: string,
|
|
207
|
+
) {
|
|
157
208
|
this.build = this.build.bind(this);
|
|
158
209
|
}
|
|
159
210
|
build(res: Response, obj: T, isCreate?: boolean, isPatch?: boolean): void {
|
|
@@ -2,8 +2,8 @@ import { Request, Response } from 'express';
|
|
|
2
2
|
import { Build, GenericController, GenericService } from './GenericController';
|
|
3
3
|
import { handleError, Log } from './http';
|
|
4
4
|
import { ErrorMessage } from './metadata';
|
|
5
|
-
import {
|
|
6
|
-
import { getMetadataFunc } from './
|
|
5
|
+
import { StringMap } from './resources';
|
|
6
|
+
import { buildArray, Filter, format, fromRequest, getMetadataFunc, getParameters, initializeConfig, jsonResult, SearchConfig, SearchResult } from './search';
|
|
7
7
|
|
|
8
8
|
export class GenericSearchController<T, ID, S extends Filter> extends GenericController<T, ID> {
|
|
9
9
|
config?: SearchConfig;
|
|
@@ -19,7 +19,7 @@ export class GenericSearchController<T, ID, S extends Filter> extends GenericCon
|
|
|
19
19
|
service: GenericService<T, ID, number | ErrorMessage[]>,
|
|
20
20
|
config?: SearchConfig,
|
|
21
21
|
build?: Build<T>,
|
|
22
|
-
validate?: (obj: T, patch?: boolean) => Promise<ErrorMessage[]>,
|
|
22
|
+
validate?: (obj: T, resource?: StringMap, patch?: boolean) => Promise<ErrorMessage[]>,
|
|
23
23
|
dates?: string[],
|
|
24
24
|
numbers?: string[],
|
|
25
25
|
) {
|
|
@@ -44,7 +44,7 @@ export class GenericSearchController<T, ID, S extends Filter> extends GenericCon
|
|
|
44
44
|
const s = fromRequest<S>(req, buildArray(this.array, this.fields, this.excluding));
|
|
45
45
|
const l = getParameters(s, this.config);
|
|
46
46
|
const s2 = format(s, this.dates, this.numbers);
|
|
47
|
-
this.find(s2, l.limit, l.
|
|
47
|
+
this.find(s2, l.limit, l.pageOrNextPageToken, l.fields)
|
|
48
48
|
.then((result) => jsonResult(res, result, this.csv, l.fields, this.config))
|
|
49
49
|
.catch((err) => handleError(err, res, this.log));
|
|
50
50
|
}
|
|
@@ -2,8 +2,7 @@ import { Request, Response } from 'express';
|
|
|
2
2
|
import { handleError, Log } from './http';
|
|
3
3
|
import { LoadController, ViewService } from './LoadController';
|
|
4
4
|
import { Attribute, Attributes } from './metadata';
|
|
5
|
-
import { buildArray, Filter, format, fromRequest, getParameters, initializeConfig, jsonResult, SearchConfig, SearchResult } from './search';
|
|
6
|
-
import { getMetadataFunc } from './search_func';
|
|
5
|
+
import { buildArray, Filter, format, fromRequest, getMetadataFunc, getParameters, initializeConfig, jsonResult, SearchConfig, SearchResult } from './search';
|
|
7
6
|
|
|
8
7
|
export interface Search {
|
|
9
8
|
search(req: Request, res: Response): void;
|
|
@@ -79,7 +78,7 @@ export class LoadSearchController<T, ID, S extends Filter> extends LoadControlle
|
|
|
79
78
|
const s = fromRequest<S>(req, buildArray(this.array, this.fields, this.excluding));
|
|
80
79
|
const l = getParameters(s, this.config);
|
|
81
80
|
const s2 = format(s, this.dates, this.numbers);
|
|
82
|
-
this.find(s2, l.limit, l.
|
|
81
|
+
this.find(s2, l.limit, l.pageOrNextPageToken, l.fields)
|
|
83
82
|
.then((result) => jsonResult(res, result, this.csv, l.fields, this.config))
|
|
84
83
|
.catch((err) => handleError(err, res, this.log));
|
|
85
84
|
}
|
|
@@ -122,7 +121,7 @@ export class QueryController<T, ID, S extends Filter> extends LoadController<T,
|
|
|
122
121
|
const l = getParameters(s, this.config);
|
|
123
122
|
const s2 = format(s, this.dates, this.numbers);
|
|
124
123
|
this.query
|
|
125
|
-
.search(s2, l.limit, l.
|
|
124
|
+
.search(s2, l.limit, l.pageOrNextPageToken, l.fields)
|
|
126
125
|
.then((result) => jsonResult(res, result, this.csv, l.fields, this.config))
|
|
127
126
|
.catch((err) => handleError(err, res, this.log));
|
|
128
127
|
}
|
package/src/LowCodeController.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { Request, Response } from 'express';
|
|
|
2
2
|
import { Build, GenericController, GenericService } from './GenericController';
|
|
3
3
|
import { handleError, Log } from './http';
|
|
4
4
|
import { ErrorMessage } from './metadata';
|
|
5
|
-
import {
|
|
6
|
-
import { getMetadataFunc } from './
|
|
5
|
+
import { StringMap } from './resources';
|
|
6
|
+
import { buildArray, Filter, format, fromRequest, getMetadataFunc, getParameters, initializeConfig, jsonResult, SearchConfig, SearchResult } from './search';
|
|
7
7
|
|
|
8
8
|
export interface Service<T, ID, R, S extends Filter> extends GenericService<T, ID, R> {
|
|
9
9
|
search: (s: S, limit?: number, skip?: number | string, fields?: string[]) => Promise<SearchResult<T>>;
|
|
@@ -21,7 +21,7 @@ export class LowcodeController<T, ID, S extends Filter> extends GenericControlle
|
|
|
21
21
|
public lowCodeService: Service<T, ID, number | ErrorMessage[], S>,
|
|
22
22
|
config?: SearchConfig,
|
|
23
23
|
build?: Build<T>,
|
|
24
|
-
validate?: (obj: T, patch?: boolean) => Promise<ErrorMessage[]>,
|
|
24
|
+
validate?: (obj: T, resource?: StringMap, patch?: boolean) => Promise<ErrorMessage[]>,
|
|
25
25
|
dates?: string[],
|
|
26
26
|
numbers?: string[],
|
|
27
27
|
) {
|
|
@@ -47,7 +47,7 @@ export class LowcodeController<T, ID, S extends Filter> extends GenericControlle
|
|
|
47
47
|
const l = getParameters(s, this.config);
|
|
48
48
|
const s2 = format(s, this.dates, this.numbers);
|
|
49
49
|
this.lowCodeService
|
|
50
|
-
.search(s2, l.limit, l.
|
|
50
|
+
.search(s2, l.limit, l.pageOrNextPageToken, l.fields)
|
|
51
51
|
.then((result) => jsonResult(res, result, this.csv, l.fields, this.config))
|
|
52
52
|
.catch((err) => handleError(err, res, this.log));
|
|
53
53
|
}
|
|
@@ -65,7 +65,7 @@ export class Controller<T, ID, S extends Filter> extends GenericController<T, ID
|
|
|
65
65
|
log: Log,
|
|
66
66
|
public lowCodeService: Service<T, ID, number | T | ErrorMessage[], S>,
|
|
67
67
|
build?: Build<T>,
|
|
68
|
-
validate?: (obj: T, patch?: boolean) => Promise<ErrorMessage[]>,
|
|
68
|
+
validate?: (obj: T, resource?: StringMap, patch?: boolean) => Promise<ErrorMessage[]>,
|
|
69
69
|
config?: SearchConfig,
|
|
70
70
|
dates?: string[],
|
|
71
71
|
numbers?: string[],
|
|
@@ -92,7 +92,7 @@ export class Controller<T, ID, S extends Filter> extends GenericController<T, ID
|
|
|
92
92
|
const l = getParameters(s, this.config);
|
|
93
93
|
const s2 = format(s, this.dates, this.numbers);
|
|
94
94
|
this.lowCodeService
|
|
95
|
-
.search(s2, l.limit, l.
|
|
95
|
+
.search(s2, l.limit, l.pageOrNextPageToken, l.fields)
|
|
96
96
|
.then((result) => jsonResult(res, result, this.csv, l.fields, this.config))
|
|
97
97
|
.catch((err) => handleError(err, res, this.log));
|
|
98
98
|
}
|
package/src/SearchController.ts
CHANGED
|
@@ -36,7 +36,7 @@ export class SearchController<T, S extends Filter> {
|
|
|
36
36
|
const s = fromRequest<S>(req, buildArray(this.array, this.fields, this.excluding));
|
|
37
37
|
const l = getParameters(s, this.config);
|
|
38
38
|
const s2 = format(s, this.dates, this.numbers);
|
|
39
|
-
this.find(s2, l.limit, l.
|
|
39
|
+
this.find(s2, l.limit, l.pageOrNextPageToken, l.fields)
|
|
40
40
|
.then((result) => jsonResult(res, result, this.csv, l.fields, this.config))
|
|
41
41
|
.catch((err) => handleError(err, res, this.log));
|
|
42
42
|
}
|