@futdevpro/nts-dynamo 1.6.58 → 1.6.59

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 (34) hide show
  1. package/lib/_enums/http/socket-event-type.enum.d.ts +1 -0
  2. package/lib/_enums/http/socket-event-type.enum.d.ts.map +1 -1
  3. package/lib/_enums/http/socket-event-type.enum.js +1 -0
  4. package/lib/_enums/http/socket-event-type.enum.js.map +1 -1
  5. package/lib/_models/control-models/socket-presence.control-model.d.ts.map +1 -1
  6. package/lib/_models/control-models/socket-presence.control-model.js +4 -2
  7. package/lib/_models/control-models/socket-presence.control-model.js.map +1 -1
  8. package/lib/_services/base/data.service.d.ts +2 -0
  9. package/lib/_services/base/data.service.d.ts.map +1 -1
  10. package/lib/_services/base/data.service.js +48 -0
  11. package/lib/_services/base/data.service.js.map +1 -1
  12. package/lib/_services/base/db.service.d.ts +1 -0
  13. package/lib/_services/base/db.service.d.ts.map +1 -1
  14. package/lib/_services/base/db.service.js +34 -29
  15. package/lib/_services/base/db.service.js.map +1 -1
  16. package/lib/_services/core/global.service.d.ts +1 -1
  17. package/lib/_services/core/global.service.d.ts.map +1 -1
  18. package/lib/_services/core/global.service.js +3 -1
  19. package/lib/_services/core/global.service.js.map +1 -1
  20. package/lib/_services/server/app-extended.server.js +2 -2
  21. package/lib/_services/server/app-extended.server.js.map +1 -1
  22. package/lib/_services/server/app.server.d.ts +2 -1
  23. package/lib/_services/server/app.server.d.ts.map +1 -1
  24. package/lib/_services/server/app.server.js +13 -2
  25. package/lib/_services/server/app.server.js.map +1 -1
  26. package/lib/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +2 -2
  28. package/src/_enums/http/socket-event-type.enum.ts +2 -0
  29. package/src/_models/control-models/socket-presence.control-model.ts +8 -2
  30. package/src/_services/base/data.service.ts +79 -0
  31. package/src/_services/base/db.service.ts +47 -28
  32. package/src/_services/core/global.service.ts +4 -2
  33. package/src/_services/server/app-extended.server.ts +2 -2
  34. package/src/_services/server/app.server.ts +18 -4
@@ -9,6 +9,8 @@ export enum DynamoNTS_SocketEventKey {
9
9
  subscriptionSuccessful = 'subscriptionSuccessful',
10
10
  unsubscribe = 'unsubscribe',
11
11
  disconnect = 'disconnection',
12
+
13
+ ping = 'ping',
12
14
  event = 'event',
13
15
  error = 'error',
14
16
  }
@@ -53,7 +53,10 @@ export class DynamoNTS_SocketPresence {
53
53
 
54
54
  this.sockets.forEach((socket: SocketIO.Socket, index: number) => {
55
55
  if (!socket.connected) {
56
- Dynamo_Log.error(`Emitting event '${event}' on socket(${this.serviceName})-(${index}) failed!\nERROR: socket[${socket.id}] is not connected! (it will be removed...)`);
56
+ Dynamo_Log.warn(
57
+ `Emitting event '${event}' on socket(${this.serviceName})-(${index}) failed!` +
58
+ `\nERROR: socket[${socket.id}] is not connected! (it will be removed...)`
59
+ );
57
60
 
58
61
  /* errors.push(
59
62
  new Dynamo_Error({
@@ -74,7 +77,10 @@ export class DynamoNTS_SocketPresence {
74
77
 
75
78
  this.sockets.forEach((socket: SocketIO.Socket, index: number) => {
76
79
  const success: boolean = socket.emit(event, content, error => {
77
- Dynamo_Log.error(`Emitting event '${event}' on socket(${this.serviceName})-(${index}) failed!(0)\nerror:`, error);
80
+ Dynamo_Log.error(
81
+ `Emitting event '${event}' on socket(${this.serviceName})-(${index}) failed!(0)` +
82
+ `\nerror:`, error
83
+ );
78
84
  errors.push(error);
79
85
  });
80
86
 
@@ -148,6 +148,38 @@ export class DynamoNTS_DataService<T extends Dynamo_Metadata> {
148
148
  }
149
149
  }
150
150
  }
151
+
152
+ async getDataByIds(ids: string[], dontSetToService?: boolean): Promise<T[]> {
153
+ try {
154
+ if (!ids) {
155
+ throw new Dynamo_Error({
156
+ ...this._getDefaultErrorSettings(
157
+ 'getDataByIds',
158
+ new Error(`getDataByIds failed, ids is missing! (${this.dataParams.dataName})`)
159
+ ),
160
+
161
+ errorCode: 'NTS-DS0-GIS1',
162
+ });
163
+ }
164
+
165
+ if (ids.length === 0) {
166
+ return [];
167
+ }
168
+
169
+ const datas: T[] = await this.dataDBService.find({ _id: { $in: ids, }, });
170
+ if (!dontSetToService) {
171
+ this.dataList = datas;
172
+ }
173
+
174
+ return datas;
175
+ } catch (error) {
176
+ throw new Dynamo_Error({
177
+ ...this._getDefaultErrorSettings('getDataByIds', error),
178
+
179
+ errorCode: 'NTS-DS0-GIS0',
180
+ });
181
+ }
182
+ }
151
183
 
152
184
  /**
153
185
  * returns data from database by dependencyId to the service
@@ -203,6 +235,53 @@ export class DynamoNTS_DataService<T extends Dynamo_Metadata> {
203
235
  }
204
236
  }
205
237
  }
238
+
239
+ async getDatasByDependencyIds(dependencyIds: string[], dontSetToService?: boolean): Promise<T[]> {
240
+ try {
241
+ if (!this.depKey) {
242
+ throw new Dynamo_Error({
243
+ ...this._getDefaultErrorSettings(
244
+ 'getDatasByDependencyIds',
245
+ new Error(`getDatasByDependencyIds failed, dependencyKey is missing from service! (${this.dataParams.dataName})`)
246
+ ),
247
+
248
+ errorCode: 'NTS-DS0-GDS1',
249
+ });
250
+ }
251
+
252
+ if (!dependencyIds) {
253
+ throw new Dynamo_Error({
254
+ ...this._getDefaultErrorSettings(
255
+ 'getDatasByDependencyIds',
256
+ new Error(`getDatasByDependencyIds failed, dependencyIds is missing! (${this.dataParams.dataName})`)
257
+ ),
258
+
259
+ errorCode: 'NTS-DS0-GDS2',
260
+ });
261
+ }
262
+
263
+ if (dependencyIds.length === 0) {
264
+ return [];
265
+ }
266
+
267
+ const datas: T[] = await this.dataDBService.getDatasByDependencyIds(dependencyIds);
268
+ if (!dontSetToService) {
269
+ this.dataList = datas;
270
+ }
271
+
272
+ return datas;
273
+ } catch (error) {
274
+ if ([ 'NTS-DS0-GDS1', 'NTS-DS0-GDS2' ].includes(error?.errorCode)) {
275
+ throw error;
276
+ } else {
277
+ throw new Dynamo_Error({
278
+ ...this._getDefaultErrorSettings('getDatasByDependencyIds', error),
279
+
280
+ errorCode: 'NTS-DS0-GDS0',
281
+ });
282
+ }
283
+ }
284
+ }
206
285
 
207
286
  /**
208
287
  * returns dataList from database by dependencyId to the service
@@ -244,12 +244,41 @@ export class DynamoNTS_DBService<T extends Dynamo_Metadata> {
244
244
  });
245
245
  });
246
246
 
247
- if (0 < dataList.length) {
248
- dataList.forEach((data: T) => {
249
- data = this.stringifyDataId(data, 'getDataListByDependencyId');
247
+ dataList.forEach((data: T) => {
248
+ data = this.stringifyDataId(data, 'getDataListByDependencyId');
249
+ });
250
+
251
+ return dataList;
252
+ }
253
+
254
+ async getDatasByDependencyIds(dependencyIds: string[]): Promise<T[]> {
255
+ if (!this.depDataName) {
256
+ throw new Dynamo_Error({
257
+ ...this._getDefaultErrorSettings(
258
+ 'getDatasByDependencyIds',
259
+ new Error(`dependencyDataIdKey not setted up for this db-service (${this.dataParams.dbName}) (NTS DB)`)
260
+ ),
261
+
262
+ status: 501,
263
+ errorCode: 'NTS-DBS-GLDS0',
250
264
  });
251
265
  }
252
266
 
267
+ let dataList: T[] = await this.dataModel.find({ [this.depDataName]: { $in: dependencyIds }}).then(res => {
268
+ return res as T[] ?? [];
269
+ }).catch(error => {
270
+ throw new Dynamo_Error({
271
+ ...this._getDefaultErrorSettings('getDatasByDependencyIds', error),
272
+
273
+ errorCode: 'NTS-DBS-GLDS1',
274
+ message: `get ${this.dataParams.dbName} by ${this.depDataName} was unsuccessful (NTS DB)`,
275
+ });
276
+ });
277
+
278
+ dataList.forEach((data: T) => {
279
+ data = this.stringifyDataId(data, 'getDatasByDependencyIds');
280
+ });
281
+
253
282
  return dataList;
254
283
  }
255
284
 
@@ -284,11 +313,9 @@ export class DynamoNTS_DBService<T extends Dynamo_Metadata> {
284
313
  });
285
314
  });
286
315
 
287
- if (0 < dataList.length) {
288
- dataList.forEach((data: T) => {
289
- data = this.stringifyDataId(data, 'getDataListByDependencyIds');
290
- });
291
- }
316
+ dataList.forEach((data: T) => {
317
+ data = this.stringifyDataId(data, 'getDataListByDependencyIds');
318
+ });
292
319
 
293
320
  return dataList;
294
321
  }
@@ -312,11 +339,9 @@ export class DynamoNTS_DBService<T extends Dynamo_Metadata> {
312
339
  });
313
340
  });
314
341
 
315
- if (0 < dataList.length && typeof dataList[0]._id === 'object') {
316
- dataList.forEach((data: T) => {
317
- data = this.stringifyDataId(data, 'getAll');
318
- });
319
- }
342
+ dataList.forEach((data: T) => {
343
+ data = this.stringifyDataId(data, 'getAll');
344
+ });
320
345
 
321
346
  return dataList as T[];
322
347
  }
@@ -449,11 +474,9 @@ export class DynamoNTS_DBService<T extends Dynamo_Metadata> {
449
474
  });
450
475
  });
451
476
 
452
- if (0 < dataList.length) {
453
- dataList.forEach((data: T) => {
454
- data = this.stringifyDataId(data, 'searchData');
455
- });
456
- }
477
+ dataList.forEach((data: T) => {
478
+ data = this.stringifyDataId(data, 'searchData');
479
+ });
457
480
 
458
481
  return dataList;
459
482
  }
@@ -546,11 +569,9 @@ export class DynamoNTS_DBService<T extends Dynamo_Metadata> {
546
569
  });
547
570
  });
548
571
 
549
- if (0 < dataList.length) {
550
- dataList.forEach((data: T) => {
551
- data = this.stringifyDataId(data, 'find');
552
- });
553
- }
572
+ dataList.forEach((data: T) => {
573
+ data = this.stringifyDataId(data, 'find');
574
+ });
554
575
 
555
576
  return dataList as T[];
556
577
  }
@@ -603,11 +624,9 @@ export class DynamoNTS_DBService<T extends Dynamo_Metadata> {
603
624
  });
604
625
  });
605
626
 
606
- if (0 < dataList.length) {
607
- dataList.forEach((data: T) => {
608
- data = this.stringifyDataId(data, 'findWithPaging');
609
- });
610
- }
627
+ dataList.forEach((data: T) => {
628
+ data = this.stringifyDataId(data, 'findWithPaging');
629
+ });
611
630
 
612
631
  return dataList;
613
632
  }
@@ -37,8 +37,10 @@ export class DynamoNTS_GlobalService extends DynamoNTS_SingletonService {
37
37
  dbServiceCollection: DynamoNTS_ServiceCollection<DynamoNTS_DBService<any>>; // DynamoNTS_DBServiceCollection;
38
38
  emailServiceCollection: DynamoNTS_ServiceCollection<DynamoNTS_EmailService>; // DynamoNTS_EmailServiceCollection;
39
39
 
40
- private static _globalErrorHandler?: (err: any, req: Request, res: Response, issuer: string) => Promise<void>;
41
- static get globalErrorHandler(): (err: any, req: Request, res: Response, issuer: string) => Promise<void> { return this._globalErrorHandler; }
40
+ private static _globalErrorHandler?: (err: any, req?: Request, res?: Response, issuer?: string) => Promise<void>;
41
+ static get globalErrorHandler(): (err: any, req?: Request, res?: Response, issuer?: string) => Promise<void> {
42
+ return this._globalErrorHandler;
43
+ }
42
44
 
43
45
  /**
44
46
  * You need to setup global Services through this function
@@ -166,7 +166,7 @@ export abstract class DynamoNTS_AppExtended extends DynamoNTS_App {
166
166
  console.log(this.params.title);
167
167
  console.log(`Version: ${this.params.version}`);
168
168
  }
169
- Dynamo_Log.testSuccess(`${this.params.name} started successfully.`);
169
+ Dynamo_Log.H_success(`${this.params.name} started successfully.`);
170
170
 
171
171
  } catch (error) {
172
172
  Dynamo_Log.error(`\nExtended Application: ${this.params?.name} start failed.\n`, error, '\n');
@@ -300,7 +300,7 @@ export abstract class DynamoNTS_AppExtended extends DynamoNTS_App {
300
300
  this.systemControlsExt.httpSocketServer.init = false;
301
301
  this.systemControlsExt.httpsSocketServer.init = false;
302
302
 
303
- Dynamo_Log.test(`${this.params.name} stopped successfully.`);
303
+ Dynamo_Log.H_info(`${this.params.name} stopped successfully.`);
304
304
  }
305
305
  }
306
306
 
@@ -224,11 +224,24 @@ export abstract class DynamoNTS_App extends DynamoNTS_SingletonService {
224
224
  constructor(extended?: boolean){
225
225
  super();
226
226
 
227
- process.on('unhandledRejection', (reason, p) => {
227
+ process.on('unhandledRejection', (reason: object, p: any) => {
228
228
  Dynamo_Log.highlightedError(
229
229
  'Unhandled Rejection at: ', p,
230
230
  '\nRejection reason:', reason
231
231
  );
232
+
233
+ try {
234
+ DynamoNTS_GlobalService.globalErrorHandler?.(
235
+ new Dynamo_Error({
236
+ errorCode: 'NTS-AS0-BASE-UR',
237
+ message: 'Unhandled Rejection!',
238
+ error: new Error(p),
239
+ })
240
+ );
241
+
242
+ } catch (error) {
243
+ Dynamo_Log.error('getGlobalErrorHandler ERROR:', error);
244
+ }
232
245
  });
233
246
 
234
247
  this.asyncConstruct(extended).catch((error: any) => {
@@ -303,7 +316,7 @@ export abstract class DynamoNTS_App extends DynamoNTS_SingletonService {
303
316
  console.log(this.params.title);
304
317
  console.log(`Version: ${this.params.version}`);
305
318
  }
306
- Dynamo_Log.testSuccess(`${this.params.name} started successfully.`);
319
+ Dynamo_Log.H_success(`${this.params.name} started successfully.`);
307
320
  }
308
321
  } catch (error) {
309
322
  this.constructErrors.push(error);
@@ -458,7 +471,7 @@ export abstract class DynamoNTS_App extends DynamoNTS_SingletonService {
458
471
  }
459
472
 
460
473
  if (!dontLog) {
461
- Dynamo_Log.test(`${this._params.name} stopped successfully.`);
474
+ Dynamo_Log.H_log(`${this._params.name} stopped successfully.`);
462
475
  }
463
476
  }
464
477
  }
@@ -888,6 +901,7 @@ export abstract class DynamoNTS_App extends DynamoNTS_SingletonService {
888
901
 
889
902
  /**
890
903
  * MISSING Description (TODO)
904
+ * only implemented for endpoints and global Unhandled Rejection
891
905
  */
892
- getGlobalErrorHandler?(): (err: any, req: Request, res: Response, issuer: string) => Promise<void>;
906
+ getGlobalErrorHandler?(): (err: any, req?: Request, res?: Response, issuer?: string) => Promise<void>;
893
907
  }