@futdevpro/nts-dynamo 1.9.15 → 1.9.16

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 (117) hide show
  1. package/.copilot/patterns.json +7 -7
  2. package/.github/workflows/main.yml +206 -0
  3. package/HOWTO.md +15 -15
  4. package/README.md +140 -140
  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 +2 -0
  7. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  8. package/build/_models/control-models/socket-event.control-model.js +1 -1
  9. package/build/_services/core/global.service.d.ts.map +1 -1
  10. package/build/_services/core/global.service.js +1 -0
  11. package/build/_services/core/global.service.js.map +1 -1
  12. package/build/_services/route/routing-module.service.d.ts +1 -0
  13. package/build/_services/route/routing-module.service.d.ts.map +1 -1
  14. package/build/_services/route/routing-module.service.js +17 -23
  15. package/build/_services/route/routing-module.service.js.map +1 -1
  16. package/build/_services/server/app.server.d.ts.map +1 -1
  17. package/build/_services/server/app.server.js +4 -1
  18. package/build/_services/server/app.server.js.map +1 -1
  19. package/build/_services/socket/socket-client.service.d.ts.map +1 -1
  20. package/build/_services/socket/socket-client.service.js +1 -0
  21. package/build/_services/socket/socket-client.service.js.map +1 -1
  22. package/nodemon.json +17 -15
  23. package/package.json +5 -5
  24. package/src/_constants/global-settings.const.ts +27 -27
  25. package/src/_constants/index.ts +2 -2
  26. package/src/_constants/mocks/app-extended-server.mock.ts +198 -198
  27. package/src/_constants/mocks/app-params.mock.ts +9 -9
  28. package/src/_constants/mocks/app-server.mock.ts +185 -185
  29. package/src/_constants/mocks/auth-service.mock.ts +28 -28
  30. package/src/_constants/mocks/controller.mock.ts +16 -16
  31. package/src/_constants/mocks/data-model.mock.ts +83 -83
  32. package/src/_constants/mocks/email-service-collection.mock.ts +13 -13
  33. package/src/_constants/mocks/email-service.mock.ts +19 -19
  34. package/src/_constants/mocks/email-template.mock.html +14 -14
  35. package/src/_constants/mocks/endpoint.mock.ts +90 -90
  36. package/src/_constants/mocks/socket-client.mock.ts +43 -43
  37. package/src/_constants/mocks/socket-server.mock.ts +43 -43
  38. package/src/_enums/data-model-type.enum.ts +14 -14
  39. package/src/_enums/data-service-function.enum.ts +15 -15
  40. package/src/_enums/http/http-call-type.enum.ts +12 -12
  41. package/src/_enums/http/http-response-type.enum.ts +7 -7
  42. package/src/_enums/http/socket-event-type.enum.ts +18 -18
  43. package/src/_enums/index.ts +13 -13
  44. package/src/_enums/predefined-data-types.enum.ts +27 -27
  45. package/src/_enums/route-security.enum.ts +12 -12
  46. package/src/_enums/socket-security.enum.ts +11 -11
  47. package/src/_models/control-models/api-call-params.control-model.ts +126 -126
  48. package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
  49. package/src/_models/control-models/app-params.control-model.ts +45 -45
  50. package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
  51. package/src/_models/control-models/endpoint-params.control-model.ts +309 -307
  52. package/src/_models/control-models/http-settings.control-model.ts +29 -29
  53. package/src/_models/control-models/index.ts +13 -13
  54. package/src/_models/control-models/socket-client-service-params.control-model.ts +28 -28
  55. package/src/_models/control-models/socket-event.control-model.ts +150 -150
  56. package/src/_models/control-models/socket-presence.control-model.ts +207 -207
  57. package/src/_models/control-models/socket-server-service-params.control-model.ts +20 -20
  58. package/src/_models/control-models/system-control.control-model.ts +12 -12
  59. package/src/_models/index.ts +9 -9
  60. package/src/_models/interfaces/certification-settings.interface.ts +7 -7
  61. package/src/_models/interfaces/global-service-settings.interface.ts +45 -45
  62. package/src/_models/interfaces/global-settings.interface.ts +83 -83
  63. package/src/_models/interfaces/index.ts +7 -7
  64. package/src/_models/interfaces/routing-module-settings.interface.ts +20 -20
  65. package/src/_models/types/db-filter.type.ts +108 -108
  66. package/src/_models/types/db-update.type.ts +100 -100
  67. package/src/_models/types/index.ts +5 -5
  68. package/src/_modules/api-service.index.ts +12 -12
  69. package/src/_modules/app-extended.index.ts +28 -28
  70. package/src/_modules/app.index.ts +24 -24
  71. package/src/_modules/auth.index.ts +7 -7
  72. package/src/_modules/constants.index.ts +2 -2
  73. package/src/_modules/controller.index.ts +10 -10
  74. package/src/_modules/custom-data/custom-data.controller.ts +69 -69
  75. package/src/_modules/custom-data/custom-data.data-service.ts +20 -20
  76. package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +23 -23
  77. package/src/_modules/custom-data/index.ts +6 -6
  78. package/src/_modules/custom-data-module.index.ts +2 -2
  79. package/src/_modules/data-service.index.ts +9 -9
  80. package/src/_modules/email.index.ts +8 -8
  81. package/src/_modules/enums.index.ts +2 -2
  82. package/src/_modules/extended.index.ts +8 -8
  83. package/src/_modules/models.index.ts +2 -2
  84. package/src/_modules/services.index.ts +2 -2
  85. package/src/_modules/test/get-test-routing-module.util.ts +23 -23
  86. package/src/_modules/test/index.ts +5 -5
  87. package/src/_modules/test/test.controller.ts +115 -115
  88. package/src/_modules/test-module.index.ts +2 -2
  89. package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
  90. package/src/_modules/usage/index.ts +7 -7
  91. package/src/_modules/usage/usage.controller.ts +120 -120
  92. package/src/_modules/usage/usage.data-service.ts +172 -172
  93. package/src/_modules/usage-module.index.ts +2 -2
  94. package/src/_services/base/data.service.ts +921 -921
  95. package/src/_services/base/db.service.spec.ts +32 -32
  96. package/src/_services/base/db.service.ts +1063 -1063
  97. package/src/_services/base/singleton.service.ts +21 -21
  98. package/src/_services/core/api.service.ts +453 -453
  99. package/src/_services/core/auth.service.ts +172 -172
  100. package/src/_services/core/email.service.ts +678 -678
  101. package/src/_services/core/global.service.ts +270 -269
  102. package/src/_services/core/service-collection.service.ts +5 -5
  103. package/src/_services/index.ts +23 -23
  104. package/src/_services/route/controller.service.ts +129 -129
  105. package/src/_services/route/routing-module.service.ts +293 -273
  106. package/src/_services/server/app-extended.server.spec.ts +76 -76
  107. package/src/_services/server/app-extended.server.ts +520 -520
  108. package/src/_services/server/app.server.spec.ts +67 -67
  109. package/src/_services/server/app.server.ts +1181 -1179
  110. package/src/_services/shared.service.spec.ts +19 -19
  111. package/src/_services/shared.static-service.ts +73 -73
  112. package/src/_services/socket/socket-client.service.ts +236 -235
  113. package/src/_services/socket/socket-server.service.spec.ts +11 -11
  114. package/src/_services/socket/socket-server.service.ts +761 -761
  115. package/src/index.ts +18 -18
  116. package/tsconfig.json +41 -41
  117. package/build/tsconfig.tsbuildinfo +0 -1
@@ -1,172 +1,172 @@
1
-
2
- import { Request } from 'express';
3
- import { DynamoFM_Error, DynamoFM_Time, DynamoFM_RelativeDate } from '@futdevpro/fsm-dynamo';
4
- import { DynamoFM_UsageSession, DynamoFM_usageSessionModel_params, DynamoFM_UsageData,
5
- DynamoFM_DailyUsageData } from '@futdevpro/fsm-dynamo/usage-module';
6
-
7
- import { DynamoNTS_DataService } from '../../_services/base/data.service';
8
- import { DynamoNTS_Shared } from '../../_services/shared.static-service';
9
-
10
- export class DynamoNTS_Usage_DataService extends DynamoNTS_DataService<DynamoFM_UsageSession> {
11
- usageData: DynamoFM_UsageData[] = [];
12
- simplifiedDailyUsage: DynamoFM_DailyUsageData[] = [];
13
-
14
- constructor(
15
- set?: {
16
- usageSession?: DynamoFM_UsageSession,
17
- usageData?: DynamoFM_UsageData[],
18
- issuer?: string,
19
- }
20
- ) {
21
- super(
22
- new DynamoFM_UsageSession(set?.usageSession),
23
- DynamoFM_usageSessionModel_params,
24
- set?.issuer
25
- );
26
- this.usageData = set?.usageData ? set?.usageData : [];
27
- }
28
-
29
- getLocationDataFromRequest(req: Request): void {
30
- try {
31
- this.data.address = DynamoNTS_Shared.getIpFromRequest(req);
32
- this.data.locationData = DynamoNTS_Shared.getLocationDataByRequest(req);
33
-
34
- /* console.log(`...getLocationDataFromRequest... ip: ${this.data.address}`, this.data.locationData); */
35
- } catch (error) {
36
- throw new DynamoFM_Error({
37
- ...this.getDefaultErrorSettings('getLocationDataFromRequest', error),
38
-
39
- errorCode: 'NTS-US0-GLD',
40
- userMessage: `We were unable to deep analyze your request.`,
41
- });
42
- }
43
- }
44
-
45
- async getUsage(range: DynamoFM_RelativeDate = DynamoFM_RelativeDate.lastWeek): Promise<void> {
46
- try {
47
- await this.dataDBService.find({
48
- sessionStart: { $gte: DynamoFM_Time.getDateByRelativeDate(range) },
49
- }).then((res: DynamoFM_UsageSession[]): void => {
50
- this.dataList = res;
51
- });
52
- this.simplifiedDailyUsage = [];
53
- this.dataList.forEach((session: DynamoFM_UsageSession): void => {
54
- let dateIndex = this.simplifiedDailyUsage.findIndex(
55
- (dailyData: DynamoFM_DailyUsageData): boolean => dailyData.date === session.date
56
- );
57
-
58
- if (-1 < dateIndex) {
59
- this.simplifiedDailyUsage[dateIndex].visitations.push(session);
60
- } else {
61
- const newUsageSimple = new DynamoFM_DailyUsageData({
62
- date: session.date,
63
- visitations: [ session ],
64
- });
65
-
66
- this.simplifiedDailyUsage.push(newUsageSimple);
67
- dateIndex = this.simplifiedDailyUsage.length - 1;
68
- }
69
-
70
- if (session?.locationData?.country) {
71
- if (session.locationData.country === 'HU') {
72
- this.simplifiedDailyUsage[dateIndex].visitorsHun++;
73
- } else {
74
- this.simplifiedDailyUsage[dateIndex].visitorsElse++;
75
- }
76
- }
77
- this.simplifiedDailyUsage[dateIndex].totalVisitTime += session.totalSessionTime;
78
- this.simplifiedDailyUsage[dateIndex].averageVisitTime = Math.round(
79
- (this.simplifiedDailyUsage[dateIndex].totalVisitTime /
80
- this.simplifiedDailyUsage[dateIndex].visitations.length) * 100
81
- ) / 100;
82
- });
83
-
84
- this.simplifiedDailyUsage.sort(
85
- (a: DynamoFM_DailyUsageData, b: DynamoFM_DailyUsageData): number =>
86
- +new Date(b.date) - +new Date(a.date)
87
- );
88
- this.simplifiedDailyUsage.forEach((daily: DynamoFM_DailyUsageData): void => {
89
- daily.visitations.sort(
90
- (a: DynamoFM_UsageSession, b: DynamoFM_UsageSession): number =>
91
- +a.sessionStart - +b.sessionStart
92
- );
93
- });
94
-
95
- } catch (error) {
96
- throw new DynamoFM_Error({
97
- ...this.getDefaultErrorSettings('getLastWeekUsage', error),
98
-
99
- errorCode: 'NTS-US0-GLW',
100
- userMessage: `We've failed to collect last week's usage data.`,
101
- });
102
- }
103
- }
104
-
105
- async updateUsageData(req: Request): Promise<void> {
106
- try {
107
- await this.getDataById();
108
- this.data.usageData = this.usageData;
109
- let totalTime = 0;
110
-
111
- this.data.usageData.forEach((data: DynamoFM_UsageData): void => {
112
- totalTime += data.timeSpentOnPage;
113
- });
114
-
115
- if (!this.data.locationData) {
116
- this.getLocationDataFromRequest(req);
117
- }
118
- this.data.totalSessionTime = totalTime;
119
- await this.saveData();
120
- } catch (error) {
121
- throw new DynamoFM_Error({
122
- ...this.getDefaultErrorSettings('updateUsageData', error),
123
-
124
- errorCode: 'NTS-US0-UU0',
125
- userMessage: `The attempt to update Usage Data was unsuccessful.`,
126
- });
127
- }
128
- }
129
-
130
- async closeSession(req: Request): Promise<void> {
131
- try {
132
- await this.getDataById();
133
- this.data.sessionEnd = new Date();
134
- const newTotalSessionTime = +this.data.sessionEnd - +this.data.sessionStart;
135
-
136
- this.data.usageData[this.data.usageData.length - 1].timeSpentOnPage =
137
- newTotalSessionTime - this.data.totalSessionTime;
138
-
139
- if (!this.data.locationData) {
140
- this.getLocationDataFromRequest(req);
141
- }
142
- this.data.usageData.sort(
143
- (a: DynamoFM_UsageData, b: DynamoFM_UsageData): number => +a.opened - +b.opened
144
- );
145
- this.data.totalSessionTime = newTotalSessionTime;
146
- await this.saveData();
147
- } catch (error) {
148
- throw new DynamoFM_Error({
149
- ...this.getDefaultErrorSettings('closeSession', error),
150
-
151
- errorCode: 'NTS-US0-CS0',
152
- userMessage: `The attempt to close Usage Session was unsuccessful.`,
153
- });
154
- }
155
- }
156
-
157
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
158
- private getDefaultErrorSettings(
159
- fnName: string,
160
- error: Error | DynamoFM_Error
161
- )/* : DynamoFM_ErrorSettings */ {
162
- return {
163
- status: (error as DynamoFM_Error)?.___status ?? 417,
164
- message: (error as Error)?.message ?? `${fnName} was UNSUCCESFUL (NTS; ${this.serviceName})`,
165
- addECToUserMsg: true,
166
- userMessage: this.defaultErrorUserMsg,
167
- issuer: this.issuer,
168
- issuerService: this.serviceName,
169
- error: error,
170
- };
171
- }
172
- }
1
+
2
+ import { Request } from 'express';
3
+ import { DynamoFM_Error, DynamoFM_Time, DynamoFM_RelativeDate } from '@futdevpro/fsm-dynamo';
4
+ import { DynamoFM_UsageSession, DynamoFM_usageSessionModel_params, DynamoFM_UsageData,
5
+ DynamoFM_DailyUsageData } from '@futdevpro/fsm-dynamo/usage-module';
6
+
7
+ import { DynamoNTS_DataService } from '../../_services/base/data.service';
8
+ import { DynamoNTS_Shared } from '../../_services/shared.static-service';
9
+
10
+ export class DynamoNTS_Usage_DataService extends DynamoNTS_DataService<DynamoFM_UsageSession> {
11
+ usageData: DynamoFM_UsageData[] = [];
12
+ simplifiedDailyUsage: DynamoFM_DailyUsageData[] = [];
13
+
14
+ constructor(
15
+ set?: {
16
+ usageSession?: DynamoFM_UsageSession,
17
+ usageData?: DynamoFM_UsageData[],
18
+ issuer?: string,
19
+ }
20
+ ) {
21
+ super(
22
+ new DynamoFM_UsageSession(set?.usageSession),
23
+ DynamoFM_usageSessionModel_params,
24
+ set?.issuer
25
+ );
26
+ this.usageData = set?.usageData ? set?.usageData : [];
27
+ }
28
+
29
+ getLocationDataFromRequest(req: Request): void {
30
+ try {
31
+ this.data.address = DynamoNTS_Shared.getIpFromRequest(req);
32
+ this.data.locationData = DynamoNTS_Shared.getLocationDataByRequest(req);
33
+
34
+ /* console.log(`...getLocationDataFromRequest... ip: ${this.data.address}`, this.data.locationData); */
35
+ } catch (error) {
36
+ throw new DynamoFM_Error({
37
+ ...this.getDefaultErrorSettings('getLocationDataFromRequest', error),
38
+
39
+ errorCode: 'NTS-US0-GLD',
40
+ userMessage: `We were unable to deep analyze your request.`,
41
+ });
42
+ }
43
+ }
44
+
45
+ async getUsage(range: DynamoFM_RelativeDate = DynamoFM_RelativeDate.lastWeek): Promise<void> {
46
+ try {
47
+ await this.dataDBService.find({
48
+ sessionStart: { $gte: DynamoFM_Time.getDateByRelativeDate(range) },
49
+ }).then((res: DynamoFM_UsageSession[]): void => {
50
+ this.dataList = res;
51
+ });
52
+ this.simplifiedDailyUsage = [];
53
+ this.dataList.forEach((session: DynamoFM_UsageSession): void => {
54
+ let dateIndex = this.simplifiedDailyUsage.findIndex(
55
+ (dailyData: DynamoFM_DailyUsageData): boolean => dailyData.date === session.date
56
+ );
57
+
58
+ if (-1 < dateIndex) {
59
+ this.simplifiedDailyUsage[dateIndex].visitations.push(session);
60
+ } else {
61
+ const newUsageSimple = new DynamoFM_DailyUsageData({
62
+ date: session.date,
63
+ visitations: [ session ],
64
+ });
65
+
66
+ this.simplifiedDailyUsage.push(newUsageSimple);
67
+ dateIndex = this.simplifiedDailyUsage.length - 1;
68
+ }
69
+
70
+ if (session?.locationData?.country) {
71
+ if (session.locationData.country === 'HU') {
72
+ this.simplifiedDailyUsage[dateIndex].visitorsHun++;
73
+ } else {
74
+ this.simplifiedDailyUsage[dateIndex].visitorsElse++;
75
+ }
76
+ }
77
+ this.simplifiedDailyUsage[dateIndex].totalVisitTime += session.totalSessionTime;
78
+ this.simplifiedDailyUsage[dateIndex].averageVisitTime = Math.round(
79
+ (this.simplifiedDailyUsage[dateIndex].totalVisitTime /
80
+ this.simplifiedDailyUsage[dateIndex].visitations.length) * 100
81
+ ) / 100;
82
+ });
83
+
84
+ this.simplifiedDailyUsage.sort(
85
+ (a: DynamoFM_DailyUsageData, b: DynamoFM_DailyUsageData): number =>
86
+ +new Date(b.date) - +new Date(a.date)
87
+ );
88
+ this.simplifiedDailyUsage.forEach((daily: DynamoFM_DailyUsageData): void => {
89
+ daily.visitations.sort(
90
+ (a: DynamoFM_UsageSession, b: DynamoFM_UsageSession): number =>
91
+ +a.sessionStart - +b.sessionStart
92
+ );
93
+ });
94
+
95
+ } catch (error) {
96
+ throw new DynamoFM_Error({
97
+ ...this.getDefaultErrorSettings('getLastWeekUsage', error),
98
+
99
+ errorCode: 'NTS-US0-GLW',
100
+ userMessage: `We've failed to collect last week's usage data.`,
101
+ });
102
+ }
103
+ }
104
+
105
+ async updateUsageData(req: Request): Promise<void> {
106
+ try {
107
+ await this.getDataById();
108
+ this.data.usageData = this.usageData;
109
+ let totalTime = 0;
110
+
111
+ this.data.usageData.forEach((data: DynamoFM_UsageData): void => {
112
+ totalTime += data.timeSpentOnPage;
113
+ });
114
+
115
+ if (!this.data.locationData) {
116
+ this.getLocationDataFromRequest(req);
117
+ }
118
+ this.data.totalSessionTime = totalTime;
119
+ await this.saveData();
120
+ } catch (error) {
121
+ throw new DynamoFM_Error({
122
+ ...this.getDefaultErrorSettings('updateUsageData', error),
123
+
124
+ errorCode: 'NTS-US0-UU0',
125
+ userMessage: `The attempt to update Usage Data was unsuccessful.`,
126
+ });
127
+ }
128
+ }
129
+
130
+ async closeSession(req: Request): Promise<void> {
131
+ try {
132
+ await this.getDataById();
133
+ this.data.sessionEnd = new Date();
134
+ const newTotalSessionTime = +this.data.sessionEnd - +this.data.sessionStart;
135
+
136
+ this.data.usageData[this.data.usageData.length - 1].timeSpentOnPage =
137
+ newTotalSessionTime - this.data.totalSessionTime;
138
+
139
+ if (!this.data.locationData) {
140
+ this.getLocationDataFromRequest(req);
141
+ }
142
+ this.data.usageData.sort(
143
+ (a: DynamoFM_UsageData, b: DynamoFM_UsageData): number => +a.opened - +b.opened
144
+ );
145
+ this.data.totalSessionTime = newTotalSessionTime;
146
+ await this.saveData();
147
+ } catch (error) {
148
+ throw new DynamoFM_Error({
149
+ ...this.getDefaultErrorSettings('closeSession', error),
150
+
151
+ errorCode: 'NTS-US0-CS0',
152
+ userMessage: `The attempt to close Usage Session was unsuccessful.`,
153
+ });
154
+ }
155
+ }
156
+
157
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
158
+ private getDefaultErrorSettings(
159
+ fnName: string,
160
+ error: Error | DynamoFM_Error
161
+ )/* : DynamoFM_ErrorSettings */ {
162
+ return {
163
+ status: (error as DynamoFM_Error)?.___status ?? 417,
164
+ message: (error as Error)?.message ?? `${fnName} was UNSUCCESFUL (NTS; ${this.serviceName})`,
165
+ addECToUserMsg: true,
166
+ userMessage: this.defaultErrorUserMsg,
167
+ issuer: this.issuer,
168
+ issuerService: this.serviceName,
169
+ error: error,
170
+ };
171
+ }
172
+ }
@@ -1,2 +1,2 @@
1
-
2
- export * from './usage';
1
+
2
+ export * from './usage';