@futdevpro/nts-dynamo 1.10.55 → 1.10.57

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.
Files changed (41) hide show
  1. package/build/_models/control-models/endpoint-params.control-model.d.ts +23 -0
  2. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  3. package/build/_models/control-models/endpoint-params.control-model.js +23 -0
  4. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  5. package/build/_modules/socket/app-extended.server.d.ts.map +1 -1
  6. package/build/_modules/socket/app-extended.server.js +2 -0
  7. package/build/_modules/socket/app-extended.server.js.map +1 -1
  8. package/build/_services/base/api.service-base.d.ts +13 -0
  9. package/build/_services/base/api.service-base.d.ts.map +1 -0
  10. package/build/_services/base/api.service-base.js +27 -0
  11. package/build/_services/base/api.service-base.js.map +1 -0
  12. package/build/_services/base/db.service.d.ts +2 -0
  13. package/build/_services/base/db.service.d.ts.map +1 -1
  14. package/build/_services/base/db.service.js +55 -0
  15. package/build/_services/base/db.service.js.map +1 -1
  16. package/build/_services/core/api.service.d.ts.map +1 -1
  17. package/build/_services/core/api.service.js +5 -1
  18. package/build/_services/core/api.service.js.map +1 -1
  19. package/build/_services/core/global.service.js +1 -1
  20. package/build/_services/core/global.service.js.map +1 -1
  21. package/build/_services/route/controller.service.d.ts +2 -0
  22. package/build/_services/route/controller.service.d.ts.map +1 -1
  23. package/build/_services/route/controller.service.js +2 -0
  24. package/build/_services/route/controller.service.js.map +1 -1
  25. package/build/_services/route/routing-module.service.d.ts +2 -0
  26. package/build/_services/route/routing-module.service.d.ts.map +1 -1
  27. package/build/_services/route/routing-module.service.js +2 -0
  28. package/build/_services/route/routing-module.service.js.map +1 -1
  29. package/build/_services/server/app.server.d.ts.map +1 -1
  30. package/build/_services/server/app.server.js +12 -0
  31. package/build/_services/server/app.server.js.map +1 -1
  32. package/package.json +3 -3
  33. package/src/_models/control-models/endpoint-params.control-model.ts +23 -2
  34. package/src/_modules/socket/app-extended.server.ts +2 -0
  35. package/src/_services/base/api.service-base.ts +40 -0
  36. package/src/_services/base/db.service.ts +65 -0
  37. package/src/_services/core/api.service.ts +5 -1
  38. package/src/_services/core/global.service.ts +2 -2
  39. package/src/_services/route/controller.service.ts +2 -0
  40. package/src/_services/route/routing-module.service.ts +2 -0
  41. package/src/_services/server/app.server.ts +20 -0
@@ -132,6 +132,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
132
132
  * @returns data
133
133
  */
134
134
  async modifyData(data: T, issuer: string, dontUpdateModified?: boolean): Promise<T> {
135
+ if (this.dataParams.forbidModify) {
136
+ await this.modifyThrowMethod(data, issuer);
137
+ }
138
+
135
139
  if (!dontUpdateModified) {
136
140
  data.__lastModified = new Date();
137
141
  data.__lastModifiedBy = issuer;
@@ -172,6 +176,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
172
176
  return this.stringifyDataId(data, 'modifyData');
173
177
  }
174
178
 
179
+ // TODO: Missing issuer
175
180
  /**
176
181
  * returns data by _id,
177
182
  * @param id id
@@ -202,6 +207,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
202
207
  return this.stringifyDataId(data, 'getDataById');
203
208
  }
204
209
 
210
+ // TODO: Missing issuer
205
211
  /**
206
212
  * get data by dependency data id,
207
213
  * !!!: throws error if not found (errorCode on not found: NTS-DBS-GD2)
@@ -241,6 +247,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
241
247
  return this.stringifyDataId(data, 'getDataByDependencyId');
242
248
  }
243
249
 
250
+ // TODO: Missing issuer
244
251
  async getDataListByIds(ids: string[]): Promise<T[]> {
245
252
  const dataList: T[] = await this.dataModel
246
253
  .find({ _id: { $in: ids } })
@@ -260,6 +267,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
260
267
  );
261
268
  }
262
269
 
270
+ // TODO: Missing issuer
263
271
  /**
264
272
  * get data by dependency data id,
265
273
  * !!!: throws error if not found (errorCode on not found: NTS-DBS-GLD2)
@@ -305,6 +313,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
305
313
  );
306
314
  }
307
315
 
316
+ // TODO: Missing issuer
308
317
  /**
309
318
  * get multiple data objects by a list of DependencyIDs,
310
319
  * !!!: throws error if not found (errorCode on not found: NTS-DBS-GLDS2)
@@ -370,6 +379,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
370
379
  );
371
380
  }
372
381
 
382
+ // TODO: Missing issuer
373
383
  /**
374
384
  * returns all data from database,
375
385
  * !!!: throws error if not found (errorCode on not found: NTS-DBS-GA1)
@@ -397,6 +407,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
397
407
  }
398
408
 
399
409
  async markDeletedById(id: string, issuer: string): Promise<void> {
410
+ if (this.dataParams.forbidDelete) {
411
+ await this.deleteThrowMethod(id, issuer);
412
+ }
413
+
400
414
  await this.dataModel.findByIdAndUpdate(
401
415
  id,
402
416
  {
@@ -419,6 +433,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
419
433
  }
420
434
 
421
435
  async markDeletedByDependencyId(dependencyIdsFilter: { [key: string]: string }, issuer: string): Promise<void> {
436
+ if (this.dataParams.forbidDelete) {
437
+ await this.deleteThrowMethod(dependencyIdsFilter, issuer);
438
+ }
439
+
422
440
  await this.dataModel.updateMany(
423
441
  dependencyIdsFilter,
424
442
  {
@@ -484,6 +502,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
484
502
  });
485
503
  }
486
504
 
505
+ // TODO: Missing issuer
487
506
  async getDeletedDataList(): Promise<T[]> {
488
507
  const dataList: T[] = await this.dataModel
489
508
  .getAll()
@@ -501,11 +520,16 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
501
520
  ).map((data: T): T => this.stringifyDataId(data, 'getDeletedData'));
502
521
  }
503
522
 
523
+ // TODO: Missing issuer
504
524
  /**
505
525
  * deleted data by id
506
526
  * @param id id
507
527
  */
508
528
  async deleteDataById(id: string): Promise<void> {
529
+ if (this.dataParams.forbidDelete) {
530
+ await this.deleteThrowMethod(id/* , issuer */);
531
+ }
532
+
509
533
  await this.dataModel
510
534
  .findByIdAndDelete(id)
511
535
  .catch((error): void => {
@@ -518,11 +542,16 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
518
542
  });
519
543
  }
520
544
 
545
+ // TODO: Missing issuer
521
546
  /**
522
547
  * deleted data by id
523
548
  * @param dependencyId id
524
549
  */
525
550
  async deleteDataByDependencyId(dependencyIdsFilter: { [key: string]: string }): Promise<void> {
551
+ if (this.dataParams.forbidDelete) {
552
+ await this.deleteThrowMethod(dependencyIdsFilter/* , issuer */);
553
+ }
554
+
526
555
  if (!this.depKeys.length) {
527
556
  throw new DyFM_Error({
528
557
  ...this._getDefaultErrorSettings(
@@ -550,7 +579,12 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
550
579
  });
551
580
  }
552
581
 
582
+ // TODO: Missing issuer
553
583
  async deleteAllData(): Promise<void> {
584
+ if (this.dataParams.forbidDelete) {
585
+ await this.deleteThrowMethod(null/* , issuer */);
586
+ }
587
+
554
588
  await this.dataModel.deleteMany().catch((error): void => {
555
589
  throw new DyFM_Error({
556
590
  ...this._getDefaultErrorSettings('deleteAllData', error),
@@ -560,6 +594,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
560
594
  });
561
595
  }
562
596
 
597
+ // TODO: Missing issuer
563
598
  /**
564
599
  * returns search result for searchBy object params
565
600
  * can use lists or xRange values for searchBy obj properties
@@ -856,6 +891,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
856
891
  issuer: string,
857
892
  dontUpdateModified?: boolean
858
893
  ): Promise<T> {
894
+ if (this.dataParams.forbidModify) {
895
+ await this.modifyThrowMethod(update, issuer);
896
+ }
897
+
859
898
  if (!dontUpdateModified) {
860
899
  update.__lastModified = new Date();
861
900
  update.__lastModifiedBy = issuer;
@@ -935,6 +974,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
935
974
  issuer: string,
936
975
  dontUpdateModified?: boolean
937
976
  ): Promise<void> {
977
+ if (this.dataParams.forbidModify) {
978
+ await this.modifyThrowMethod(update, issuer);
979
+ }
980
+
938
981
  if (!dontUpdateModified) {
939
982
  update.__lastModified = new Date();
940
983
  update.__lastModifiedBy = issuer;
@@ -1010,6 +1053,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
1010
1053
  issuer: string,
1011
1054
  dontUpdateModified?: boolean
1012
1055
  ): Promise<void> {
1056
+ if (this.dataParams.forbidModify) {
1057
+ await this.modifyThrowMethod(update, issuer);
1058
+ }
1059
+
1013
1060
  if (!dontUpdateModified) {
1014
1061
  update.__lastModified = new Date();
1015
1062
  update.__lastModifiedBy = issuer;
@@ -1347,4 +1394,22 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
1347
1394
  ));
1348
1395
  }
1349
1396
  }
1397
+
1398
+ private async deleteThrowMethod(data: any, issuer?: string): Promise<void> {
1399
+ throw new DyFM_Error({
1400
+ error: new Error(`Forbidden to delete any data! (${this.dataParams.dataName})`),
1401
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DBS-CDAD`,
1402
+ additionalContent: { dataParams: this.dataParams, data: data },
1403
+ issuer: issuer,
1404
+ });
1405
+ };
1406
+
1407
+ private async modifyThrowMethod(data: any, issuer?: string): Promise<void> {
1408
+ throw new DyFM_Error({
1409
+ error: new Error(`Forbidden to modify any data! (${this.dataParams.dataName})`),
1410
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DBS-CDAD`,
1411
+ additionalContent: { dataParams: this.dataParams, data: data },
1412
+ issuer: issuer,
1413
+ });
1414
+ }
1350
1415
  }
@@ -286,7 +286,11 @@ export class DyNTS_ApiService {
286
286
  } else if (error.config && error.message) {
287
287
 
288
288
  let msg: string = error.message;
289
- let status: number = +error.message.substring(error.message.length - 4, 3);
289
+ let status: number = error?.response?.status ||
290
+ error?.status ||
291
+ /* get status from "status code {3 digits}" that might be in the middle of the message */
292
+ +error?.message?.match?.(/status code (\d{3})/)?.[1] ||
293
+ 500;
290
294
 
291
295
  if (error.message.includes('status code')) {
292
296
  msg += `\nendpoint: ${callParams.baseUrl}${callParams.endpoint}` +
@@ -130,7 +130,7 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
130
130
  ...this.getDefaultErrorSettings(
131
131
  'setDBServices',
132
132
  new Error(
133
- `dbModel is not constructed!` +
133
+ `"${dbModel.dataName}" dbModel is not constructed!` +
134
134
  `\n use new DyFM_DataModel_Params() to properly construct it.`
135
135
  ),
136
136
  'DyNTS_GlobalService'
@@ -188,7 +188,7 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
188
188
 
189
189
  private static async setEmailServices(
190
190
  emailServiceCollection?: DyNTS_Service_Collection<DyNTS_EmailService>
191
- ): Promise<void> {
191
+ ): Promise<void> {
192
192
  try {
193
193
  this.instance.emailServiceCollection = emailServiceCollection ?? {};
194
194
 
@@ -9,6 +9,8 @@ import { DyNTS_SingletonService } from '../base/singleton.service';
9
9
  /**
10
10
  * Basic controller for endpoint handlings
11
11
  *
12
+ * (You'll need to add them to a {@link DyNTS_RoutingModule} through it's constructor)
13
+ *
12
14
  * @example
13
15
  * export class UserMatchStatisticsController extends DyNTS_Controller {
14
16
  *
@@ -21,6 +21,8 @@ import { DyNTS_Controller } from './controller.service';
21
21
  * Routing Module
22
22
  * Handling route setup and control
23
23
  *
24
+ * (You'll need to add them to a {@link DyNTS_App} through the {@link DyNTS_App.getRoutingModules} method)
25
+ *
24
26
  * You can add routes and controllers for them
25
27
  * @example
26
28
  * // Setting up Routes
@@ -364,6 +364,23 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
364
364
  `\n ERROR:`, error
365
365
  );
366
366
  }
367
+
368
+ const message: string =
369
+ (error as DyFM_Error)?.additionalContent?.constructErrors?.flatMap(
370
+ (errorItem: DyFM_Error): string[] => {
371
+ return errorItem?._messages ?? [];
372
+ }
373
+ )?.join?.('\n') ??
374
+ (error as DyFM_Error)?.errors?.flatMap(
375
+ (errorItem: DyFM_AnyError): string[] =>
376
+ (errorItem as DyFM_Error)?._messages ?? [ (errorItem as Error)?.message ] ?? []
377
+ )?.join?.('\n') ??
378
+ error?.message ??
379
+ 'UNKNOWN';
380
+
381
+ DyFM_Log.testError('Application start failed:\n', message);
382
+
383
+ process.exit(1);
367
384
  });
368
385
  }
369
386
 
@@ -427,6 +444,8 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
427
444
  }
428
445
 
429
446
  if (this._routingModules?.length) {
447
+ if (this.logSetup) DyFM_Log.log('\nsetting up express routes...');
448
+
430
449
  this.setSecurity();
431
450
 
432
451
  await this.initExpresses();
@@ -781,6 +800,7 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
781
800
  */
782
801
  private async startDB(): Promise<void> {
783
802
  if (this.fnLogs && this.deepLog) DyFM_Log.log('\nfn:. startDB');
803
+ else if (this.logSetup) DyFM_Log.log('\nstarting DB connection...');
784
804
 
785
805
  if (!this._params.dbUri) {
786
806
  throw new DyFM_Error({