@futdevpro/nts-dynamo 1.9.38 → 1.9.40

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 (49) hide show
  1. package/build/_collections/archive.util.d.ts +3 -0
  2. package/build/_collections/archive.util.d.ts.map +1 -0
  3. package/build/_collections/archive.util.js +9 -0
  4. package/build/_collections/archive.util.js.map +1 -0
  5. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  6. package/build/_models/control-models/endpoint-params.control-model.js +19 -2
  7. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  8. package/build/_modules/socket/_models/socket-client-service-params.control-model.d.ts.map +1 -1
  9. package/build/_modules/socket/_models/socket-client-service-params.control-model.js +1 -1
  10. package/build/_modules/socket/_models/socket-client-service-params.control-model.js.map +1 -1
  11. package/build/_modules/socket/_models/socket-presence.control-model.js +1 -1
  12. package/build/_modules/socket/_models/socket-presence.control-model.js.map +1 -1
  13. package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
  14. package/build/_modules/socket/_services/socket-server.service.js +44 -28
  15. package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
  16. package/build/_services/base/archive-data.service.d.ts +24 -0
  17. package/build/_services/base/archive-data.service.d.ts.map +1 -0
  18. package/build/_services/base/archive-data.service.js +135 -0
  19. package/build/_services/base/archive-data.service.js.map +1 -0
  20. package/build/_services/base/data.service.d.ts +3 -2
  21. package/build/_services/base/data.service.d.ts.map +1 -1
  22. package/build/_services/base/data.service.js +61 -46
  23. package/build/_services/base/data.service.js.map +1 -1
  24. package/build/_services/base/db.service.d.ts +6 -5
  25. package/build/_services/base/db.service.d.ts.map +1 -1
  26. package/build/_services/base/db.service.js +31 -14
  27. package/build/_services/base/db.service.js.map +1 -1
  28. package/build/_services/core/global.service.d.ts.map +1 -1
  29. package/build/_services/core/global.service.js +11 -0
  30. package/build/_services/core/global.service.js.map +1 -1
  31. package/build/_services/server/app.server.d.ts.map +1 -1
  32. package/build/_services/server/app.server.js +8 -6
  33. package/build/_services/server/app.server.js.map +1 -1
  34. package/build/index.d.ts +7 -6
  35. package/build/index.d.ts.map +1 -1
  36. package/build/index.js +12 -6
  37. package/build/index.js.map +1 -1
  38. package/package.json +3 -3
  39. package/src/_collections/archive.util.ts +9 -0
  40. package/src/_models/control-models/endpoint-params.control-model.ts +32 -3
  41. package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +2 -1
  42. package/src/_modules/socket/_models/socket-presence.control-model.ts +1 -1
  43. package/src/_modules/socket/_services/socket-server.service.ts +56 -28
  44. package/src/_services/base/archive-data.service.ts +207 -0
  45. package/src/_services/base/data.service.ts +91 -70
  46. package/src/_services/base/db.service.ts +41 -14
  47. package/src/_services/core/global.service.ts +14 -0
  48. package/src/_services/server/app.server.ts +28 -24
  49. package/src/index.ts +16 -6
@@ -68,7 +68,7 @@ export abstract class DyNTS_SocketServerService<
68
68
 
69
69
  this.asyncConstructor().catch((error: any) => {
70
70
  DyFM_Log.error(
71
- `Socket Server Service setup failed: ${this.params?.name} (${this.params?.port})`,
71
+ `Socket Server Service setup failed: "${this.params?.name}" (${this.params?.port})`,
72
72
  error
73
73
  );
74
74
  });
@@ -91,12 +91,12 @@ export abstract class DyNTS_SocketServerService<
91
91
  await this.prepareEvents();
92
92
 
93
93
  if (this.logSetup) console.log(
94
- `Socket Server Service setup done: ${this.params.name} (${this.params.port}) ` +
94
+ `Socket Server Service setup done: "${this.params.name}" (${this.params.port}) ` +
95
95
  `security: ${this.params.security}\n`
96
96
  );
97
97
  } catch (error) {
98
98
  DyFM_Log.error(
99
- `Socket Server Service setup failed: ${this.params?.name} (${this.params?.port})`,
99
+ `Socket Server Service setup failed: "${this.params?.name}" (${this.params?.port})`,
100
100
  error
101
101
  );
102
102
 
@@ -225,7 +225,7 @@ export abstract class DyNTS_SocketServerService<
225
225
  } else {
226
226
  DyFM_Log.error(
227
227
  'getPresenceFromSubscriptionEventContent is not set',
228
- `${this.params.name} (${this.params.port})`
228
+ `"${this.params.name}" (${this.params.port})`
229
229
  );
230
230
  }
231
231
 
@@ -236,7 +236,7 @@ export abstract class DyNTS_SocketServerService<
236
236
  } catch (error) {
237
237
  DyFM_Log.error(
238
238
  `Socket Server Service - Event Preparation setup failed: ` +
239
- `${this.params?.name} (${this.params?.port})`,
239
+ `"${this.params?.name}" (${this.params?.port})`,
240
240
  error
241
241
  );
242
242
 
@@ -272,13 +272,13 @@ export abstract class DyNTS_SocketServerService<
272
272
  if (DyNTS_global_settings.log_settings.socket_eventContent) {
273
273
  DyFM_Log.log(
274
274
  `--=> incoming socket(${this.params.name}) ` +
275
- `event: ${DyFM_SocketEvent_Key.subscribe};` +
275
+ `event: "${DyFM_SocketEvent_Key.subscribe}";` +
276
276
  `\ncontent:`, content
277
277
  );
278
278
  } else {
279
279
  DyFM_Log.log(
280
280
  `--=> incoming socket(${this.params.name}) ` +
281
- `event: ${DyFM_SocketEvent_Key.subscribe}`
281
+ `event: "${DyFM_SocketEvent_Key.subscribe}"`
282
282
  );
283
283
  }
284
284
 
@@ -309,13 +309,13 @@ export abstract class DyNTS_SocketServerService<
309
309
  } catch (error) {
310
310
  if (DyNTS_global_settings.log_settings.socket_eventContent) {
311
311
  DyFM_Log.error(
312
- `Socket Subscription failed: ${this.params.name} ` ,
312
+ `Socket Subscription failed: "${this.params.name}" ` ,
313
313
  `(${this.params.port}) will disconnect now...`,
314
314
  error
315
315
  );
316
316
  } else {
317
317
  DyFM_Log.error(
318
- `Socket Subscription failed: ${this.params.name} ` ,
318
+ `Socket Subscription failed: "${this.params.name}" ` ,
319
319
  `(${this.params.port}) will disconnect now...`
320
320
  );
321
321
  }
@@ -368,13 +368,13 @@ export abstract class DyNTS_SocketServerService<
368
368
  } catch (error) {
369
369
  if (DyNTS_global_settings.log_settings.socket_eventContent) {
370
370
  DyFM_Log.error(
371
- `Socket unsubscribe failed: ${this.params.name} ` ,
371
+ `Socket unsubscribe failed: "${this.params.name}" ` ,
372
372
  `(${this.params.port}) will disconnect now...`,
373
373
  error
374
374
  );
375
375
  } else {
376
376
  DyFM_Log.error(
377
- `Socket unsubscribe failed: ${this.params.name} ` ,
377
+ `Socket unsubscribe failed: "${this.params.name}" ` ,
378
378
  `(${this.params.port}) will disconnect now...`
379
379
  );
380
380
  }
@@ -392,7 +392,7 @@ export abstract class DyNTS_SocketServerService<
392
392
  await event.executeEventTasks(content, issuer);
393
393
  } catch (error) {
394
394
  DyFM_Log.error(
395
- `Socket Event failed: ${this.params.name} (${this.params.port})`,
395
+ `Socket Event failed: "${this.params.name}" (${this.params.port})`,
396
396
  error
397
397
  );
398
398
  socket.emit(DyFM_SocketEvent_Key.error, error);
@@ -406,7 +406,7 @@ export abstract class DyNTS_SocketServerService<
406
406
  }
407
407
  } catch (error) {
408
408
  DyFM_Log.error(
409
- `Socket Connection failed: ${this.params.name} ` +
409
+ `Socket Connection failed: "${this.params.name}" ` +
410
410
  `(${this.params.port}) will disconnect now...`,
411
411
  error
412
412
  );
@@ -418,8 +418,8 @@ export abstract class DyNTS_SocketServerService<
418
418
  newSocketServer.listen(this.params.port);
419
419
 
420
420
  DyFM_Log.success(
421
- `\nsocket server setup finished: ${this.params.name}` +
422
- `\nsocket server listening on port: ${this.params.port}`
421
+ `\nsocket server setup finished: "${this.params.name}"` +
422
+ `\nsocket server listening on port: "${this.params.port}"`
423
423
  );
424
424
 
425
425
  successCallback();
@@ -435,7 +435,7 @@ export abstract class DyNTS_SocketServerService<
435
435
  }
436
436
  } catch (error) {
437
437
  DyFM_Log.error(
438
- `Socket Server Service - Deep Setup failed: ${this.params?.name} ` +
438
+ `Socket Server Service - Deep Setup failed: "${this.params?.name}" ` +
439
439
  `(${this.params?.port})`,
440
440
  error
441
441
  );
@@ -458,12 +458,12 @@ export abstract class DyNTS_SocketServerService<
458
458
  } catch (error) {
459
459
  if (DyNTS_global_settings.log_settings.socket_eventContent) {
460
460
  DyFM_Log.error(
461
- `Socket Subscription failed: ${this.params?.name} (${this.params?.port})`,
461
+ `Socket Subscription failed: "${this.params?.name}" (${this.params?.port})`,
462
462
  error
463
463
  );
464
464
  } else {
465
465
  DyFM_Log.error(
466
- `Socket Subscription failed: ${this.params?.name} (${this.params?.port})`
466
+ `Socket Subscription failed: "${this.params?.name}" (${this.params?.port})`
467
467
  );
468
468
  }
469
469
 
@@ -516,8 +516,8 @@ export abstract class DyNTS_SocketServerService<
516
516
  ...this._getDefaultErrorSettings(
517
517
  'sendEventForId',
518
518
  new Error(
519
- `socket subscription for ${issuer} and ` +
520
- `${activePresence.issuerLocalId} does not match.`
519
+ `socket subscription for "${issuer}" and ` +
520
+ `"${activePresence.issuerLocalId}" does not match.`
521
521
  ),
522
522
  issuer
523
523
  ),
@@ -568,7 +568,7 @@ export abstract class DyNTS_SocketServerService<
568
568
  ),
569
569
 
570
570
  errorCode: 'NTS-SSS-200',
571
- message: `socket(${this.params.name}) Subscription Removal failed: ${this.params?.name}`,
571
+ message: `socket(${this.params.name}) Subscription Removal failed: "${this.params?.name}"`,
572
572
  });
573
573
  }
574
574
  }
@@ -630,6 +630,32 @@ export abstract class DyNTS_SocketServerService<
630
630
 
631
631
  async sendEventForId(id: string, event: string, content: any, issuer: string): Promise<void> {
632
632
  try {
633
+ if (!event) {
634
+ throw new DyFM_Error({
635
+ ...this._getDefaultErrorSettings(
636
+ 'sendEventForId',
637
+ new Error('No event was provided'),
638
+ content?.source
639
+ ),
640
+
641
+ status: 400,
642
+ errorCode: 'NTS-SSS-300',
643
+ });
644
+ }
645
+
646
+ if (!id) {
647
+ throw new DyFM_Error({
648
+ ...this._getDefaultErrorSettings(
649
+ 'sendEventForId',
650
+ new Error('No ID was provided'),
651
+ content?.source
652
+ ),
653
+
654
+ status: 400,
655
+ errorCode: 'NTS-SSS-301',
656
+ });
657
+ }
658
+
633
659
  const presence: DyNTS_SocketPresence = this.presences.find(
634
660
  (pres: DyNTS_SocketPresence) => pres.issuerLocalId === id
635
661
  );
@@ -638,7 +664,7 @@ export abstract class DyNTS_SocketServerService<
638
664
  throw new DyFM_Error({
639
665
  ...this._getDefaultErrorSettings(
640
666
  'sendEventForId',
641
- new Error(`No active socket with this specific ID: ${id}`),
667
+ new Error(`No active socket with this specific ID: "${id}"`),
642
668
  content?.source
643
669
  ),
644
670
 
@@ -651,13 +677,13 @@ export abstract class DyNTS_SocketServerService<
651
677
 
652
678
  if (DyNTS_global_settings.log_settings.socket_eventContent) {
653
679
  DyFM_Log.success(
654
- ` <--= emitted socket(${this.params.name}) event for presence: ${event}, ` +
655
- `\n presenceId: ${id}, sockets: ${presence.sockets.length}` +
680
+ ` <--= emitted socket(${this.params.name}) event: "${event}", ` +
681
+ `\n presenceId: "${id}", sockets: ${presence.sockets.length}` +
656
682
  `\n content:`, content
657
683
  );
658
684
  } else {
659
685
  DyFM_Log.success(
660
- ` <--= emitted socket(${this.params.name}) event for presence: ${event}, ` +
686
+ ` <--= emitted socket(${this.params.name}) event: "${event}", ` +
661
687
  `\n presenceId: ${id}, sockets: ${presence.sockets.length}`
662
688
  );
663
689
  }
@@ -678,7 +704,7 @@ export abstract class DyNTS_SocketServerService<
678
704
  throw new DyFM_Error({
679
705
  ...this._getDefaultErrorSettings(
680
706
  'sendEventForId',
681
- new Error(`No active socket(${this.params.name}) with this specific ID: ${id}`),
707
+ new Error(`No active socket(${this.params.name}) with this specific ID: "${id}"`),
682
708
  content?.source
683
709
  ),
684
710
 
@@ -709,7 +735,7 @@ export abstract class DyNTS_SocketServerService<
709
735
 
710
736
  broadcastEvent(event: string, content: any, issuer: string): void {
711
737
  try {
712
- DyFM_Log.log(` <=-== broadcasting socket(${this.params.name}) event: ${event}`);
738
+ DyFM_Log.log(` <=-== broadcasting socket(${this.params.name}) event: "${event}"`);
713
739
 
714
740
  this.presences.forEach((presence: DyNTS_SocketPresence) => {
715
741
  presence.emitEvent(event, content, issuer);
@@ -733,7 +759,9 @@ export abstract class DyNTS_SocketServerService<
733
759
  ): DyFM_Error_Settings {
734
760
  return {
735
761
  status: (error as DyFM_Error)?.___status ?? 500,
736
- message: (error as Error)?.message ?? `${fnName} was UNSUCCESSFUL (NTS)`,
762
+ message: (error as Error)?.message ??
763
+ (error as DyFM_Error)?._message ??
764
+ `${fnName} was UNSUCCESSFUL (NTS)`,
737
765
  addECToUserMsg: !(error as DyFM_Error)?.__userMessage,
738
766
  userMessage: (error as DyFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
739
767
  issuer: issuer,
@@ -0,0 +1,207 @@
1
+
2
+ import {
3
+ DyFM_Metadata, DyFM_DataModel_Params, DyFM_Error
4
+ } from '@futdevpro/fsm-dynamo';
5
+
6
+ import { DyNTS_DataService } from './data.service';
7
+ import { DyNTS_getArchivedDBName } from '../../_collections/archive.util';
8
+ import { DyNTS_GlobalService } from '../core/global.service';
9
+ import { DyNTS_DBService } from './db.service';
10
+ import { DyNTS_DBFilterSimple } from '../../_models/types/db-filter.type';
11
+
12
+ // TODO: 3 type of archiving service system:
13
+ // 1.: within list (data have a list that have elements to archive)
14
+ // 2.: separate db elements needs to be archived
15
+ // 3.: from separate db elements to archive list elements
16
+
17
+ export class DyNTS_ArchiveDataService<T extends DyFM_Metadata> extends DyNTS_DataService<T> {
18
+
19
+ originalDBService: DyNTS_DBService<T>;
20
+
21
+ constructor(
22
+ /**
23
+ * Initial data, this will be used by functions on default
24
+ */
25
+ data: T,
26
+ /**
27
+ * DB data prams will be used to connect to usable dbService on GlobalService
28
+ */
29
+ dataParams: DyFM_DataModel_Params,
30
+ /**
31
+ * Initial set for issuer to be able to follow the issuer's activity
32
+ */
33
+ issuer: string
34
+ ) {
35
+ const originalDataParams = { ...dataParams };
36
+
37
+ dataParams = {
38
+ ...dataParams,
39
+ dataName: DyNTS_getArchivedDBName(dataParams.dataName),
40
+ };
41
+
42
+ super(data, dataParams, issuer);
43
+
44
+ this.originalDBService = DyNTS_GlobalService.getDBService<T>(originalDataParams);
45
+ }
46
+
47
+ async archiveDataById(id: string): Promise<T> {
48
+ try {
49
+ if (!id) {
50
+ throw new DyFM_Error({
51
+ ...this.getDefaultErrorSettings(
52
+ 'archiveDataById',
53
+ new Error('archiveDataById failed, id is missing!')
54
+ ),
55
+
56
+ errorCode: 'NTS-ADS-ADI1',
57
+ });
58
+ }
59
+
60
+ const data = await this.originalDBService.getDataById(id);
61
+
62
+ if (!data) {
63
+ throw new DyFM_Error({
64
+ ...this.getDefaultErrorSettings(
65
+ 'archiveDataById',
66
+ new Error('archiveDataById failed, data not found!')
67
+ ),
68
+
69
+ errorCode: 'NTS-ADS-ADI2',
70
+ additionalContent: {
71
+ id: id,
72
+ },
73
+ });
74
+ }
75
+
76
+ return await this.archiveData(data);
77
+ } catch (error) {
78
+ throw new DyFM_Error({
79
+ ...this.getDefaultErrorSettings(
80
+ 'archiveDataById',
81
+ error
82
+ ),
83
+
84
+ errorCode: 'NTS-ADS-ADI0',
85
+ });
86
+ }
87
+ }
88
+
89
+ async getDataByOriginalId(originalId: string, dontSetToService?: boolean): Promise<T> {
90
+ try {
91
+ return await this.findData(
92
+ {
93
+ _originalId: originalId,
94
+ } as DyNTS_DBFilterSimple<T>,
95
+ dontSetToService
96
+ );
97
+ } catch (error) {
98
+ throw new DyFM_Error({
99
+ ...this.getDefaultErrorSettings(
100
+ 'getDataByOriginalId',
101
+ error
102
+ ),
103
+
104
+ errorCode: 'NTS-ADS-GDOI0',
105
+ });
106
+ }
107
+ }
108
+
109
+ async archiveData(data?: T, dontSetToService?: boolean): Promise<T> {
110
+ try {
111
+ data = this.ensureData(data);
112
+
113
+ if (data?._originalId) {
114
+ throw new DyFM_Error({
115
+ ...this.getDefaultErrorSettings(
116
+ 'archiveData',
117
+ new Error(
118
+ `archiveData failed, originalId is already exists! (${this.dataParams.dataName})`
119
+ )
120
+ ),
121
+
122
+ errorCode: 'NTS-ADS-AD1',
123
+ });
124
+ }
125
+
126
+ if (data?._archived) {
127
+ throw new DyFM_Error({
128
+ ...this.getDefaultErrorSettings(
129
+ 'archiveData',
130
+ new Error(
131
+ `archiveData failed, data is already archived! (${this.dataParams.dataName})`
132
+ )
133
+ ),
134
+
135
+ errorCode: 'NTS-ADS-AD2',
136
+ });
137
+ }
138
+
139
+ if (!data?._id) {
140
+ throw new DyFM_Error({
141
+ ...this.getDefaultErrorSettings(
142
+ 'archiveData',
143
+ new Error(`archiveData failed, id is missing! (${this.dataParams.dataName})`)
144
+ ),
145
+
146
+ errorCode: 'NTS-ADS-AD3',
147
+ });
148
+ }
149
+
150
+ await this.originalDBService.deleteDataById(data._id);
151
+
152
+ data._originalId = data._id;
153
+ data._archived = new Date();
154
+ delete data._id;
155
+
156
+ return await this.saveData(data, dontSetToService);
157
+ } catch (error) {
158
+ throw new DyFM_Error({
159
+ ...this.getDefaultErrorSettings(
160
+ 'archiveData',
161
+ error
162
+ ),
163
+
164
+ errorCode: 'NTS-ADS-AD0',
165
+ });
166
+ }
167
+ }
168
+
169
+ override async saveData(data?: T, dontSetToService?: boolean): Promise<T> {
170
+ try {
171
+ data = this.ensureData(data);
172
+
173
+ if (!data?._originalId) {
174
+ throw new DyFM_Error({
175
+ ...this.getDefaultErrorSettings(
176
+ 'saveData',
177
+ new Error(`saveData failed, originalId is missing! (${this.dataParams.dataName})`)
178
+ ),
179
+
180
+ errorCode: 'NTS-ADS-SD1',
181
+ });
182
+ }
183
+
184
+ if (!data?._archived) {
185
+ throw new DyFM_Error({
186
+ ...this.getDefaultErrorSettings(
187
+ 'saveData',
188
+ new Error(`saveData failed, data is not archived! (${this.dataParams.dataName})`)
189
+ ),
190
+
191
+ errorCode: 'NTS-ADS-SD2',
192
+ });
193
+ }
194
+
195
+ return await super.saveData(data, dontSetToService);
196
+ } catch (error) {
197
+ throw new DyFM_Error({
198
+ ...this.getDefaultErrorSettings(
199
+ 'saveData',
200
+ error
201
+ ),
202
+
203
+ errorCode: 'NTS-ADS-SD0',
204
+ });
205
+ }
206
+ }
207
+ }