@futdevpro/nts-dynamo 1.9.45 → 1.10.1

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 (189) hide show
  1. package/.github/workflows/main.yml +57 -3
  2. package/build/_collections/archive.util.spec.d.ts +2 -0
  3. package/build/_collections/archive.util.spec.d.ts.map +1 -0
  4. package/build/_collections/archive.util.spec.js +21 -0
  5. package/build/_collections/archive.util.spec.js.map +1 -0
  6. package/build/_models/control-models/api-call-params.control-model.spec.d.ts +2 -0
  7. package/build/_models/control-models/api-call-params.control-model.spec.d.ts.map +1 -0
  8. package/build/_models/control-models/api-call-params.control-model.spec.js +82 -0
  9. package/build/_models/control-models/api-call-params.control-model.spec.js.map +1 -0
  10. package/build/_models/control-models/app-params.control-model.spec.d.ts +2 -0
  11. package/build/_models/control-models/app-params.control-model.spec.d.ts.map +1 -0
  12. package/build/_models/control-models/app-params.control-model.spec.js +59 -0
  13. package/build/_models/control-models/app-params.control-model.spec.js.map +1 -0
  14. package/build/_models/control-models/app-system-controls.control-model.spec.d.ts +2 -0
  15. package/build/_models/control-models/app-system-controls.control-model.spec.d.ts.map +1 -0
  16. package/build/_models/control-models/app-system-controls.control-model.spec.js +26 -0
  17. package/build/_models/control-models/app-system-controls.control-model.spec.js.map +1 -0
  18. package/build/_models/control-models/endpoint-params.control-model.d.ts +1 -1
  19. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  20. package/build/_models/control-models/endpoint-params.control-model.js +3 -3
  21. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  22. package/build/_models/control-models/http-settings.control-model.spec.d.ts +2 -0
  23. package/build/_models/control-models/http-settings.control-model.spec.d.ts.map +1 -0
  24. package/build/_models/control-models/http-settings.control-model.spec.js +62 -0
  25. package/build/_models/control-models/http-settings.control-model.spec.js.map +1 -0
  26. package/build/_models/control-models/system-control.control-model.spec.d.ts +2 -0
  27. package/build/_models/control-models/system-control.control-model.spec.d.ts.map +1 -0
  28. package/build/_models/control-models/system-control.control-model.spec.js +24 -0
  29. package/build/_models/control-models/system-control.control-model.spec.js.map +1 -0
  30. package/build/_models/interfaces/global-service-settings.interface.d.ts +3 -3
  31. package/build/_models/interfaces/global-service-settings.interface.d.ts.map +1 -1
  32. package/build/_modules/custom-data/custom-data.controller.d.ts.map +1 -1
  33. package/build/_modules/custom-data/custom-data.controller.js +3 -3
  34. package/build/_modules/custom-data/custom-data.controller.js.map +1 -1
  35. package/build/_modules/custom-data/custom-data.data-service.d.ts +1 -1
  36. package/build/_modules/custom-data/custom-data.data-service.d.ts.map +1 -1
  37. package/build/_modules/custom-data/custom-data.data-service.js +3 -3
  38. package/build/_modules/custom-data/custom-data.data-service.js.map +1 -1
  39. package/build/_modules/mock/app-params.mock.spec.d.ts +2 -0
  40. package/build/_modules/mock/app-params.mock.spec.d.ts.map +1 -0
  41. package/build/_modules/mock/app-params.mock.spec.js +19 -0
  42. package/build/_modules/mock/app-params.mock.spec.js.map +1 -0
  43. package/build/_modules/mock/auth-service.mock.spec.d.ts +2 -0
  44. package/build/_modules/mock/auth-service.mock.spec.d.ts.map +1 -0
  45. package/build/_modules/mock/auth-service.mock.spec.js +40 -0
  46. package/build/_modules/mock/auth-service.mock.spec.js.map +1 -0
  47. package/build/_modules/mock/controller.mock.spec.d.ts +2 -0
  48. package/build/_modules/mock/controller.mock.spec.d.ts.map +1 -0
  49. package/build/_modules/mock/controller.mock.spec.js +23 -0
  50. package/build/_modules/mock/controller.mock.spec.js.map +1 -0
  51. package/build/_modules/mock/data-model.mock.d.ts +2 -2
  52. package/build/_modules/mock/data-model.mock.d.ts.map +1 -1
  53. package/build/_modules/mock/data-model.mock.js +21 -21
  54. package/build/_modules/mock/data-model.mock.js.map +1 -1
  55. package/build/_modules/mock/data-model.mock.spec.d.ts +2 -0
  56. package/build/_modules/mock/data-model.mock.spec.d.ts.map +1 -0
  57. package/build/_modules/mock/data-model.mock.spec.js +99 -0
  58. package/build/_modules/mock/data-model.mock.spec.js.map +1 -0
  59. package/build/_modules/mock/email-service-collection.mock.spec.d.ts +2 -0
  60. package/build/_modules/mock/email-service-collection.mock.spec.d.ts.map +1 -0
  61. package/build/_modules/mock/email-service-collection.mock.spec.js +21 -0
  62. package/build/_modules/mock/email-service-collection.mock.spec.js.map +1 -0
  63. package/build/_modules/mock/email-service.mock.spec.d.ts +2 -0
  64. package/build/_modules/mock/email-service.mock.spec.d.ts.map +1 -0
  65. package/build/_modules/mock/email-service.mock.spec.js +14 -0
  66. package/build/_modules/mock/email-service.mock.spec.js.map +1 -0
  67. package/build/_modules/mock/socket-client.mock.js +2 -2
  68. package/build/_modules/mock/socket-client.mock.spec.d.ts +2 -0
  69. package/build/_modules/mock/socket-client.mock.spec.d.ts.map +1 -0
  70. package/build/_modules/mock/socket-client.mock.spec.js +32 -0
  71. package/build/_modules/mock/socket-client.mock.spec.js.map +1 -0
  72. package/build/_modules/mock/socket-server.mock.d.ts +1 -1
  73. package/build/_modules/mock/socket-server.mock.d.ts.map +1 -1
  74. package/build/_modules/mock/socket-server.mock.spec.d.ts +2 -0
  75. package/build/_modules/mock/socket-server.mock.spec.d.ts.map +1 -0
  76. package/build/_modules/mock/socket-server.mock.spec.js +36 -0
  77. package/build/_modules/mock/socket-server.mock.spec.js.map +1 -0
  78. package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.d.ts +2 -0
  79. package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.d.ts.map +1 -0
  80. package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.js +22 -0
  81. package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.js.map +1 -0
  82. package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.d.ts +2 -0
  83. package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.d.ts.map +1 -0
  84. package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.js +29 -0
  85. package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.js.map +1 -0
  86. package/build/_modules/socket/_services/socket-server.service.d.ts +1 -1
  87. package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
  88. package/build/_modules/socket/_services/socket-server.service.js +1 -1
  89. package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
  90. package/build/_modules/socket/_services/socket-server.service.spec.js +1 -1
  91. package/build/_modules/socket/_services/socket-server.service.spec.js.map +1 -1
  92. package/build/_modules/usage/usage.controller.d.ts.map +1 -1
  93. package/build/_modules/usage/usage.controller.js +6 -4
  94. package/build/_modules/usage/usage.controller.js.map +1 -1
  95. package/build/_modules/usage/usage.data-service.d.ts +4 -4
  96. package/build/_modules/usage/usage.data-service.d.ts.map +1 -1
  97. package/build/_modules/usage/usage.data-service.js +2 -2
  98. package/build/_modules/usage/usage.data-service.js.map +1 -1
  99. package/build/_services/base/archive-data.service.d.ts +1 -1
  100. package/build/_services/base/archive-data.service.d.ts.map +1 -1
  101. package/build/_services/base/archive-data.service.js.map +1 -1
  102. package/build/_services/base/data.service.d.ts +7 -7
  103. package/build/_services/base/data.service.d.ts.map +1 -1
  104. package/build/_services/base/data.service.js +22 -9
  105. package/build/_services/base/data.service.js.map +1 -1
  106. package/build/_services/base/db.service.d.ts +3 -3
  107. package/build/_services/base/db.service.d.ts.map +1 -1
  108. package/build/_services/base/db.service.js +23 -14
  109. package/build/_services/base/db.service.js.map +1 -1
  110. package/build/_services/base/singleton.service-base.d.ts.map +1 -1
  111. package/build/_services/base/singleton.service-base.js.map +1 -1
  112. package/build/_services/core/api.service.d.ts +1 -1
  113. package/build/_services/core/api.service.d.ts.map +1 -1
  114. package/build/_services/core/api.service.js +5 -5
  115. package/build/_services/core/api.service.js.map +1 -1
  116. package/build/_services/core/api.service.spec.d.ts +2 -0
  117. package/build/_services/core/api.service.spec.d.ts.map +1 -0
  118. package/build/_services/core/api.service.spec.js +75 -0
  119. package/build/_services/core/api.service.spec.js.map +1 -0
  120. package/build/_services/core/email.service.d.ts +6 -6
  121. package/build/_services/core/email.service.d.ts.map +1 -1
  122. package/build/_services/core/email.service.js.map +1 -1
  123. package/build/_services/core/email.service.spec.d.ts +2 -0
  124. package/build/_services/core/email.service.spec.d.ts.map +1 -0
  125. package/build/_services/core/email.service.spec.js +77 -0
  126. package/build/_services/core/email.service.spec.js.map +1 -0
  127. package/build/_services/core/global.service.d.ts +2 -2
  128. package/build/_services/core/global.service.d.ts.map +1 -1
  129. package/build/_services/core/global.service.js +3 -2
  130. package/build/_services/core/global.service.js.map +1 -1
  131. package/build/_services/route/controller.service.d.ts +3 -3
  132. package/build/_services/route/controller.service.d.ts.map +1 -1
  133. package/build/_services/route/controller.service.js +2 -2
  134. package/build/_services/route/controller.service.js.map +1 -1
  135. package/build/_services/route/controller.service.spec.d.ts +2 -0
  136. package/build/_services/route/controller.service.spec.d.ts.map +1 -0
  137. package/build/_services/route/controller.service.spec.js +48 -0
  138. package/build/_services/route/controller.service.spec.js.map +1 -0
  139. package/build/_services/route/routing-module.service.spec.d.ts +2 -0
  140. package/build/_services/route/routing-module.service.spec.d.ts.map +1 -0
  141. package/build/_services/route/routing-module.service.spec.js +65 -0
  142. package/build/_services/route/routing-module.service.spec.js.map +1 -0
  143. package/build/_services/server/app.server.d.ts +5 -5
  144. package/build/_services/server/app.server.d.ts.map +1 -1
  145. package/build/_services/server/app.server.js +9 -7
  146. package/build/_services/server/app.server.js.map +1 -1
  147. package/package.json +8 -8
  148. package/spec/support/jasmine.json +8 -0
  149. package/src/_collections/archive.util.spec.ts +22 -0
  150. package/src/_models/control-models/api-call-params.control-model.spec.ts +94 -0
  151. package/src/_models/control-models/app-params.control-model.spec.ts +69 -0
  152. package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -0
  153. package/src/_models/control-models/endpoint-params.control-model.ts +7 -6
  154. package/src/_models/control-models/http-settings.control-model.spec.ts +66 -0
  155. package/src/_models/control-models/system-control.control-model.spec.ts +27 -0
  156. package/src/_models/interfaces/global-service-settings.interface.ts +3 -3
  157. package/src/_modules/custom-data/custom-data.controller.ts +6 -6
  158. package/src/_modules/custom-data/custom-data.data-service.ts +4 -3
  159. package/src/_modules/mock/app-params.mock.spec.ts +21 -0
  160. package/src/_modules/mock/auth-service.mock.spec.ts +47 -0
  161. package/src/_modules/mock/controller.mock.spec.ts +26 -0
  162. package/src/_modules/mock/data-model.mock.spec.ts +109 -0
  163. package/src/_modules/mock/data-model.mock.ts +23 -23
  164. package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -0
  165. package/src/_modules/mock/email-service.mock.spec.ts +17 -0
  166. package/src/_modules/mock/socket-client.mock.spec.ts +40 -0
  167. package/src/_modules/mock/socket-client.mock.ts +4 -4
  168. package/src/_modules/mock/socket-server.mock.spec.ts +44 -0
  169. package/src/_modules/mock/socket-server.mock.ts +5 -5
  170. package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +30 -0
  171. package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +33 -0
  172. package/src/_modules/socket/_services/socket-server.service.spec.ts +1 -1
  173. package/src/_modules/socket/_services/socket-server.service.ts +2 -2
  174. package/src/_modules/test/get-test-routing-module.util.ts +2 -2
  175. package/src/_modules/usage/usage.controller.ts +10 -8
  176. package/src/_modules/usage/usage.data-service.ts +10 -7
  177. package/src/_services/base/archive-data.service.ts +2 -2
  178. package/src/_services/base/data.service.ts +100 -76
  179. package/src/_services/base/db.service.ts +77 -55
  180. package/src/_services/base/singleton.service-base.ts +0 -2
  181. package/src/_services/core/api.service.spec.ts +96 -0
  182. package/src/_services/core/api.service.ts +7 -7
  183. package/src/_services/core/email.service.spec.ts +93 -0
  184. package/src/_services/core/email.service.ts +9 -11
  185. package/src/_services/core/global.service.ts +19 -16
  186. package/src/_services/route/controller.service.spec.ts +52 -0
  187. package/src/_services/route/controller.service.ts +5 -6
  188. package/src/_services/route/routing-module.service.spec.ts +81 -0
  189. package/src/_services/server/app.server.ts +26 -24
@@ -0,0 +1,93 @@
1
+
2
+ import { DyFM_Error } from '@futdevpro/fsm-dynamo';
3
+ import { DyNTS_EmailService, DyNTS_EmailService_Settings, DyNTS_EmailTemplateComponent, DyNTS_SendEmail_Settings } from './email.service';
4
+
5
+ describe('DyNTS_EmailService', () => {
6
+ let emailService: DyNTS_EmailService;
7
+ const settings: DyNTS_EmailService_Settings = {
8
+ host: 'smtp.example.com',
9
+ port: 587,
10
+ email: 'test@example.com',
11
+ pass: 'password',
12
+ senderName: 'Test Sender',
13
+ rootPath: '/path/to/templates',
14
+ templateComponents: [
15
+ new DyNTS_EmailTemplateComponent({
16
+ name: 'testComponent',
17
+ selector: 'test-selector',
18
+ template: '<div>{{property}}</div>',
19
+ properties: [ 'property' ],
20
+ }),
21
+ ],
22
+ };
23
+
24
+ beforeEach(() => {
25
+ emailService = new DyNTS_EmailService(settings);
26
+ });
27
+
28
+ it('should initialize with correct settings', () => {
29
+ expect(emailService.serviceName).toBe('DyNTS_EmailService');
30
+ expect(emailService['senderName']).toBe(settings.senderName);
31
+ expect(emailService['senderNEmail']).toBe(`${settings.senderName} <${settings.email}>`);
32
+ });
33
+
34
+ it('should load email template components', async () => {
35
+ await emailService.asyncPostConstruct();
36
+ expect(emailService['componentsByName']['testComponent']).toBeDefined();
37
+ expect(emailService['componentsBySelector']['test-selector']).toBeDefined();
38
+ });
39
+
40
+ xit('should send email with direct content', async () => {
41
+ const sendEmailSettings: DyNTS_SendEmail_Settings = {
42
+ to: 'recipient@example.com',
43
+ subject: 'Test Subject',
44
+ content: '<p>Test Content</p>',
45
+ };
46
+
47
+ await emailService.sendEmail(sendEmailSettings, 'testIssuer');
48
+ // No error should be thrown
49
+ });
50
+
51
+ it('should throw error if no template component name is provided', async () => {
52
+ const sendEmailSettings: DyNTS_SendEmail_Settings = {
53
+ to: 'recipient@example.com',
54
+ subject: 'Test Subject',
55
+ };
56
+
57
+ await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer'))
58
+ .toBeRejectedWith(jasmine.any(DyFM_Error));
59
+ });
60
+
61
+ it('should throw error if template component is not found', async () => {
62
+ const sendEmailSettings: DyNTS_SendEmail_Settings = {
63
+ to: 'recipient@example.com',
64
+ subject: 'Test Subject',
65
+ templateComponentName: 'nonExistentComponent',
66
+ };
67
+
68
+ await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer'))
69
+ .toBeRejectedWith(jasmine.any(DyFM_Error));
70
+ });
71
+
72
+ xit('should compile template component correctly', async () => {
73
+ const compiledTemplate = await emailService['compileTemplateComponent'](
74
+ 'testComponent',
75
+ { property: 'value' },
76
+ 'testIssuer'
77
+ );
78
+
79
+ expect(compiledTemplate).toContain('<div>value</div>');
80
+ });
81
+
82
+ it('should throw error if template property is missing', async () => {
83
+ const component = new DyNTS_EmailTemplateComponent({
84
+ name: 'testComponent',
85
+ selector: 'test-selector',
86
+ template: '<div>{{missingProperty}}</div>',
87
+ properties: [ 'missingProperty' ],
88
+ });
89
+
90
+ await expectAsync(emailService['compileComponentProperties'](component, {}, '', 'testIssuer'))
91
+ .toBeRejectedWith(jasmine.any(DyFM_Error));
92
+ });
93
+ });
@@ -1,14 +1,12 @@
1
1
 
2
2
  import * as FileSystem from 'fs';
3
- import * as Path from 'path';
4
3
  import * as NodeMailer from 'nodemailer';
5
4
 
6
- import { Options as MailOptions, Attachment } from 'nodemailer/lib/mailer';
5
+ import { Attachment, Options as MailOptions } from 'nodemailer/lib/mailer';
7
6
 
8
- import {
9
- DyFM_AnyError, DyFM_Array, DyFM_Error, DyFM_Error_Settings, DyFM_Log
7
+ import {
8
+ DyFM_AnyError, DyFM_Array, DyFM_Error, DyFM_Error_Settings, DyFM_Log
10
9
  } from '@futdevpro/fsm-dynamo';
11
- import { DyNTS_SingletonService } from '../base/singleton.service';
12
10
  import { DyNTS_global_settings } from '../../_collections/global-settings.const';
13
11
 
14
12
  export interface DyNTS_EmailService_Settings {
@@ -63,15 +61,15 @@ export interface DyNTS_SendEmail_Settings<T = { [propertyKey: string]: string; }
63
61
  export class DyNTS_EmailService /* extends DyNTS_SingletonService */ {
64
62
  serviceName: string;
65
63
 
66
- private nmTransporter: NodeMailer.Transporter;
67
- private senderName: string;
68
- private senderNEmail: string;
64
+ private readonly nmTransporter: NodeMailer.Transporter;
65
+ private readonly senderName: string;
66
+ private readonly senderNEmail: string;
69
67
 
70
- private components: DyNTS_EmailTemplateComponent[] = [];
71
- private componentsBySelector: {
68
+ private readonly components: DyNTS_EmailTemplateComponent[] = [];
69
+ private readonly componentsBySelector: {
72
70
  [selector: string]: DyNTS_EmailTemplateComponent
73
71
  } = {};
74
- private componentsByName: {
72
+ private readonly componentsByName: {
75
73
  [componentName: string]: DyNTS_EmailTemplateComponent
76
74
  } = {};
77
75
 
@@ -1,18 +1,20 @@
1
1
 
2
2
 
3
- import { Request, Response } from 'express';
4
3
 
5
- import {
6
- DyFM_Metadata, DyFM_DataModel_Params, DyFM_Log, DyFM_Error, DyFM_Array,
7
- DyFM_errorFlag,
4
+ import {
8
5
  DyFM_AnyError,
9
- DyFM_Error_Settings
6
+ DyFM_Array,
7
+ DyFM_DataModel_Params,
8
+ DyFM_Error,
9
+ DyFM_Error_Settings,
10
+ DyFM_Log,
11
+ DyFM_Metadata
10
12
  } from '@futdevpro/fsm-dynamo';
11
13
  import { DyNTS_App_Params } from '../../_models/control-models/app-params.control-model';
12
14
 
13
- import {
15
+ import {
14
16
  DyNTS_GlobalErrorHandlerFn,
15
- DyNTS_GlobalService_Settings
17
+ DyNTS_GlobalService_Settings
16
18
  } from '../../_models/interfaces/global-service-settings.interface';
17
19
 
18
20
  import { DyNTS_AuthService } from './auth.service';
@@ -21,8 +23,8 @@ import { DyNTS_DBService } from '../base/db.service';
21
23
  import { DyNTS_EmailService } from './email.service';
22
24
  import { DyNTS_Service_Collection } from './service-collection.service';
23
25
  /* import { DyNTS_EmailServiceCollection } from './email-service-collection.service'; */
24
- import { DyNTS_SingletonService } from '../base/singleton.service';
25
26
  import { DyNTS_global_settings } from '../../_collections/global-settings.const';
27
+ import { DyNTS_SingletonService } from '../base/singleton.service';
26
28
  /* import { DyNTS_archiveFlag } from '../../_collections/archive-flag.const'; */
27
29
  import { DyNTS_getArchivedDBName } from '../../_collections/archive.util';
28
30
 
@@ -84,11 +86,11 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
84
86
  }
85
87
  }
86
88
 
87
- private static async setDBServices(dbModels?: DyFM_DataModel_Params[]): Promise<void> {
89
+ private static async setDBServices(dbModels?: DyFM_DataModel_Params<any>[]): Promise<void> {
88
90
  try {
89
91
  this.instance.dbServiceCollection = {};
90
92
 
91
- dbModels?.forEach((dbModel: DyFM_DataModel_Params): void => {
93
+ dbModels?.forEach((dbModel: DyFM_DataModel_Params<any>): void => {
92
94
  if (!dbModel) {
93
95
  throw new DyFM_Error({
94
96
  ...this.getDefaultErrorSettings(
@@ -100,13 +102,13 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
100
102
  errorCode: 'NTS-GS0-SDBS2',
101
103
  additionalContent: {
102
104
  dbModels: dbModels,
103
- dbModelNames: dbModels.map((dbModel: DyFM_DataModel_Params) => dbModel.dataName),
105
+ dbModelNames: dbModels.map((dbModel: DyFM_DataModel_Params<any>) => dbModel.dataName),
104
106
  },
105
107
  });
106
108
  }
107
109
 
108
110
  if (dbModel.addArchive) {
109
- const archiveModel: DyFM_DataModel_Params = new DyFM_DataModel_Params({
111
+ const archiveModel: DyFM_DataModel_Params<any> = new DyFM_DataModel_Params<any>({
110
112
  ...dbModel,
111
113
  dataName: DyNTS_getArchivedDBName(dbModel.dataName),
112
114
  });
@@ -115,7 +117,7 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
115
117
  }
116
118
  });
117
119
 
118
- dbModels?.forEach((dbModel: DyFM_DataModel_Params): void => {
120
+ dbModels?.forEach((dbModel: DyFM_DataModel_Params<any>): void => {
119
121
  if (!dbModel.constructed) {
120
122
  throw new DyFM_Error({
121
123
  ...this.getDefaultErrorSettings(
@@ -223,8 +225,9 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
223
225
  }
224
226
  } catch (error) {
225
227
  DyFM_Log.error(
226
- `NTS GLOBAL MULTILEVEL ERROR: \nFailed to handle error on globalErrorHandler.`,
227
- error
228
+ `NTS GLOBAL MULTILEVEL ERROR: ` +
229
+ `\nFailed to handle error on globalErrorHandler.`,
230
+ (error as DyFM_Error)?.getErrorSimplified?.() ?? error
228
231
  );
229
232
  }
230
233
  });
@@ -280,7 +283,7 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
280
283
  * @returns
281
284
  */
282
285
  static getDBService<T extends DyFM_Metadata>(
283
- dataParams: DyFM_DataModel_Params
286
+ dataParams: DyFM_DataModel_Params<T>
284
287
  ): DyNTS_DBService<T> {
285
288
  return this.getDBServiceByKey<T>(dataParams.dataName);
286
289
  }
@@ -0,0 +1,52 @@
1
+
2
+ import { DyNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
3
+ import { DyNTS_Endpoint_Params } from '../../_models/control-models/endpoint-params.control-model';
4
+ import { DyNTS_Controller } from './controller.service';
5
+
6
+ class TestController extends DyNTS_Controller {
7
+ setupEndpoints(): void {
8
+ this.endpoints = [
9
+ new DyNTS_Endpoint_Params({
10
+ name: 'testEndpoint',
11
+ type: DyNTS_HttpCallType.get,
12
+ endpoint: '/test-endpoint',
13
+ preProcesses: [],
14
+ tasks: [
15
+ async (req: any, res: any) => {
16
+ res.send({ message: 'Test successful' });
17
+ },
18
+ ],
19
+ }),
20
+ ];
21
+ }
22
+
23
+ static getInstance(): TestController {
24
+ return new TestController();
25
+ }
26
+ }
27
+
28
+ describe('DyNTS_Controller', () => {
29
+ let controller: TestController;
30
+
31
+ beforeEach(() => {
32
+ controller = TestController.getInstance();
33
+ controller.setupEndpoints();
34
+ });
35
+
36
+ it('should initialize endpoints correctly', () => {
37
+ expect(controller.endpoints.length).toBe(1);
38
+ expect(controller.endpoints[0].name).toBe('testEndpoint');
39
+ expect(controller.endpoints[0].endpoint).toBe('/test-endpoint');
40
+ });
41
+
42
+ /* it('should execute task and send response', async () => {
43
+ const req = {};
44
+ const res = {
45
+ send: jasmine.createSpy('send'),
46
+ };
47
+
48
+ await controller.endpoints[0].tasks[0](req, res);
49
+
50
+ expect(res.send).toHaveBeenCalledWith({ message: 'Test successful' });
51
+ }); */
52
+ });
@@ -1,8 +1,7 @@
1
1
 
2
2
 
3
- import { DyFM_Error, DyFM_ErrorLevel, DyFM_Log } from '@futdevpro/fsm-dynamo';
4
- import {
5
- DyNTS_Endpoint_Params
3
+ import {
4
+ DyNTS_Endpoint_Params
6
5
  } from '../../_models/control-models/endpoint-params.control-model';
7
6
 
8
7
  import { DyNTS_SingletonService } from '../base/singleton.service';
@@ -24,7 +23,7 @@ import { DyNTS_SingletonService } from '../base/singleton.service';
24
23
  * this.authService = AuthService.getInstance();
25
24
  *
26
25
  * this.endpoints = [
27
- * new DyNTS_EndpointParams({
26
+ * new DyNTS_Endpoint_Params({
28
27
  * name: 'getUserMatchStatistics',
29
28
  * type: DyNX_HttpCallType.get,
30
29
  * endpoint: '/get/user-match-statistics/:userId',
@@ -55,7 +54,7 @@ export abstract class DyNTS_Controller extends DyNTS_SingletonService {
55
54
  * @example
56
55
  *
57
56
  * this.endpoints = [
58
- * new DyNTS_EndpointParams({
57
+ * new DyNTS_Endpoint_Params({
59
58
  * name: 'getUserMatchStatistics',
60
59
  * type: DyNX_HttpCallType.get,
61
60
  * endpoint: '/get/user-match-statistics/:userId',
@@ -103,7 +102,7 @@ export abstract class DyNTS_Controller extends DyNTS_SingletonService {
103
102
  * this.authService = AuthService.getInstance();
104
103
  *
105
104
  * this.endpoints = [
106
- * new DyNTS_EndpointParams({
105
+ * new DyNTS_Endpoint_Params({
107
106
  * name: 'getUserMatchStatistics',
108
107
  * type: DyNX_HttpCallType.get,
109
108
  * endpoint: '/get/user-match-statistics/:userId',
@@ -0,0 +1,81 @@
1
+
2
+ import { DyFM_Error } from '@futdevpro/fsm-dynamo';
3
+ import { DyNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
4
+ import { DyNTS_RouteSecurity } from '../../_enums/route-security.enum';
5
+ import { DyNTS_Endpoint_Params } from '../../_models/control-models/endpoint-params.control-model';
6
+ import {
7
+ DyNTS_RoutingModule_Settings
8
+ } from '../../_models/interfaces/routing-module-settings.interface';
9
+ import { DyNTS_Controller } from './controller.service';
10
+ import { DyNTS_RoutingModule } from './routing-module.service';
11
+
12
+ describe('DyNTS_RoutingModule', () => {
13
+ let routingModule: DyNTS_RoutingModule;
14
+ let mockController: DyNTS_Controller;
15
+ let mockEndpoint: DyNTS_Endpoint_Params;
16
+
17
+ beforeEach(() => {
18
+ mockController = {
19
+ setupEndpoints: jasmine.createSpy('setupEndpoints'),
20
+ endpoints: [],
21
+ } as unknown as DyNTS_Controller;
22
+
23
+ mockEndpoint = {
24
+ endpoint: '/test',
25
+ type: DyNTS_HttpCallType.get,
26
+ getFullExecution: jasmine.createSpy('getFullExecution'),
27
+ security: DyNTS_RouteSecurity.open,
28
+ } as any as DyNTS_Endpoint_Params;
29
+
30
+ const settings: DyNTS_RoutingModule_Settings = {
31
+ route: '/test',
32
+ controllers: [ mockController ],
33
+ };
34
+
35
+ routingModule = new DyNTS_RoutingModule(settings);
36
+ });
37
+
38
+ it('should initialize with given settings', () => {
39
+ expect(routingModule.route).toContain('/test');
40
+ expect(routingModule.endpoints.length).toBe(0);
41
+ });
42
+
43
+ it('should setup routes by calling setupEndpoints on each controller', () => {
44
+ routingModule['setupRoutes']();
45
+ expect(mockController.setupEndpoints).toHaveBeenCalled();
46
+ });
47
+
48
+ it('should add endpoints from controllers to the routing module', () => {
49
+ mockController.endpoints = [ mockEndpoint ];
50
+ routingModule['setupRoutes']();
51
+ expect(routingModule.endpoints).toContain(mockEndpoint);
52
+ });
53
+
54
+ xit('should mount open routes correctly', () => {
55
+ routingModule.endpoints = [ mockEndpoint ];
56
+ routingModule['mountOpenRoute'](mockEndpoint);
57
+ expect(routingModule.openRouter.stack.length).toBeGreaterThan(0);
58
+ });
59
+
60
+ xit('should mount secure routes correctly', () => {
61
+ mockEndpoint.security = DyNTS_RouteSecurity.secure;
62
+ routingModule.endpoints = [ mockEndpoint ];
63
+ routingModule['mountSecureRoute'](mockEndpoint);
64
+ expect(routingModule.secureRouter.stack.length).toBeGreaterThan(0);
65
+ });
66
+
67
+ xit('should throw error for invalid route type in open route', () => {
68
+ mockEndpoint.type = 'invalid' as DyNTS_HttpCallType;
69
+ expect(() => routingModule['mountOpenRoute'](mockEndpoint)).toThrow(DyFM_Error);
70
+ });
71
+
72
+ xit('should throw error for invalid route type in secure route', () => {
73
+ mockEndpoint.type = 'invalid' as DyNTS_HttpCallType;
74
+ expect(() => routingModule['mountSecureRoute'](mockEndpoint)).toThrow(DyFM_Error);
75
+ });
76
+
77
+ it('should handle endpoint duplication error', () => {
78
+ routingModule.endpoints = [ mockEndpoint, mockEndpoint ];
79
+ expect(() => routingModule['mountRoutes']()).toThrowError(/ENDPOINT DUPLICATION/);
80
+ });
81
+ });
@@ -4,41 +4,43 @@ import Express = require('express');
4
4
  /* import Mongoose from 'mongoose';
5
5
  import Express from 'express'; */
6
6
 
7
+ import * as BodyParser from 'body-parser';
8
+ import * as FileSystem from 'fs';
7
9
  import * as Http from 'http';
8
10
  import * as Https from 'https';
9
- import * as FileSystem from 'fs';
10
- import * as BodyParser from 'body-parser';
11
11
 
12
12
  /* import { version } from '../../../package.json'; */
13
13
 
14
- import {
14
+ import {
15
15
  DyFM_AnyError,
16
- DyFM_Array, DyFM_Error, DyFM_error_defaults,
17
- DyFM_Error_Settings,
18
- DyFM_ErrorLevel, DyFM_Log, second, DyFM_wait,
19
- DyFM_errorFlag,
20
- DyFM_delay
16
+ DyFM_Array,
17
+ DyFM_delay,
18
+ DyFM_Error, DyFM_error_defaults,
19
+ DyFM_Error_Settings,
20
+ DyFM_ErrorLevel, DyFM_Log,
21
+ DyFM_wait,
22
+ second
21
23
  } from '@futdevpro/fsm-dynamo';
22
24
 
23
- import { DyNTS_SingletonService } from '../base/singleton.service';
25
+ import { DyNTS_global_settings } from '../../_collections/global-settings.const';
24
26
  import { DyNTS_RouteSecurity } from '../../_enums/route-security.enum';
25
- import { DyNTS_RoutingModule } from '../route/routing-module.service';
26
- import { DyNTS_GlobalService } from '../core/global.service';
27
+ import { DyNTS_App_Params } from '../../_models/control-models/app-params.control-model';
28
+ import {
29
+ DyNTS_AppSystemControls
30
+ } from '../../_models/control-models/app-system-controls.control-model';
31
+ import {
32
+ DyNTS_Endpoint_Params
33
+ } from '../../_models/control-models/endpoint-params.control-model';
27
34
  import { DyNTS_Http_Settings } from '../../_models/control-models/http-settings.control-model';
28
- import {
29
- DyNTS_Certification_Settings
35
+ import {
36
+ DyNTS_Certification_Settings
30
37
  } from '../../_models/interfaces/certification-settings.interface';
31
- import {
32
- DyNTS_GlobalService_Settings
38
+ import {
39
+ DyNTS_GlobalService_Settings
33
40
  } from '../../_models/interfaces/global-service-settings.interface';
34
- import { DyNTS_App_Params } from '../../_models/control-models/app-params.control-model';
35
- import {
36
- DyNTS_Endpoint_Params
37
- } from '../../_models/control-models/endpoint-params.control-model';
38
- import {
39
- DyNTS_AppSystemControls
40
- } from '../../_models/control-models/app-system-controls.control-model';
41
- import { DyNTS_global_settings } from '../../_collections/global-settings.const';
41
+ import { DyNTS_SingletonService } from '../base/singleton.service';
42
+ import { DyNTS_GlobalService } from '../core/global.service';
43
+ import { DyNTS_RoutingModule } from '../route/routing-module.service';
42
44
 
43
45
  /**
44
46
  * This will be the MAIN service of our server project,
@@ -167,7 +169,7 @@ import { DyNTS_global_settings } from '../../_collections/global-settings.const'
167
169
  * getAppParams(): DyNTS_AppParams
168
170
  *
169
171
  * // this is where you connect your main services
170
- * getGlobalServiceSettings(): DyNTS_GlobalServiceSettings
172
+ * getGlobalServiceSettings(): DyNTS_GlobalService_Settings
171
173
  *
172
174
  * // this is where you set up your ports
173
175
  * getPorts(): DyNTS_PortSettings