@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.
- package/.github/workflows/main.yml +57 -3
- package/build/_collections/archive.util.spec.d.ts +2 -0
- package/build/_collections/archive.util.spec.d.ts.map +1 -0
- package/build/_collections/archive.util.spec.js +21 -0
- package/build/_collections/archive.util.spec.js.map +1 -0
- package/build/_models/control-models/api-call-params.control-model.spec.d.ts +2 -0
- package/build/_models/control-models/api-call-params.control-model.spec.d.ts.map +1 -0
- package/build/_models/control-models/api-call-params.control-model.spec.js +82 -0
- package/build/_models/control-models/api-call-params.control-model.spec.js.map +1 -0
- package/build/_models/control-models/app-params.control-model.spec.d.ts +2 -0
- package/build/_models/control-models/app-params.control-model.spec.d.ts.map +1 -0
- package/build/_models/control-models/app-params.control-model.spec.js +59 -0
- package/build/_models/control-models/app-params.control-model.spec.js.map +1 -0
- package/build/_models/control-models/app-system-controls.control-model.spec.d.ts +2 -0
- package/build/_models/control-models/app-system-controls.control-model.spec.d.ts.map +1 -0
- package/build/_models/control-models/app-system-controls.control-model.spec.js +26 -0
- package/build/_models/control-models/app-system-controls.control-model.spec.js.map +1 -0
- package/build/_models/control-models/endpoint-params.control-model.d.ts +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +3 -3
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/control-models/http-settings.control-model.spec.d.ts +2 -0
- package/build/_models/control-models/http-settings.control-model.spec.d.ts.map +1 -0
- package/build/_models/control-models/http-settings.control-model.spec.js +62 -0
- package/build/_models/control-models/http-settings.control-model.spec.js.map +1 -0
- package/build/_models/control-models/system-control.control-model.spec.d.ts +2 -0
- package/build/_models/control-models/system-control.control-model.spec.d.ts.map +1 -0
- package/build/_models/control-models/system-control.control-model.spec.js +24 -0
- package/build/_models/control-models/system-control.control-model.spec.js.map +1 -0
- package/build/_models/interfaces/global-service-settings.interface.d.ts +3 -3
- package/build/_models/interfaces/global-service-settings.interface.d.ts.map +1 -1
- package/build/_modules/custom-data/custom-data.controller.d.ts.map +1 -1
- package/build/_modules/custom-data/custom-data.controller.js +3 -3
- package/build/_modules/custom-data/custom-data.controller.js.map +1 -1
- package/build/_modules/custom-data/custom-data.data-service.d.ts +1 -1
- package/build/_modules/custom-data/custom-data.data-service.d.ts.map +1 -1
- package/build/_modules/custom-data/custom-data.data-service.js +3 -3
- package/build/_modules/custom-data/custom-data.data-service.js.map +1 -1
- package/build/_modules/mock/app-params.mock.spec.d.ts +2 -0
- package/build/_modules/mock/app-params.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/app-params.mock.spec.js +19 -0
- package/build/_modules/mock/app-params.mock.spec.js.map +1 -0
- package/build/_modules/mock/auth-service.mock.spec.d.ts +2 -0
- package/build/_modules/mock/auth-service.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/auth-service.mock.spec.js +40 -0
- package/build/_modules/mock/auth-service.mock.spec.js.map +1 -0
- package/build/_modules/mock/controller.mock.spec.d.ts +2 -0
- package/build/_modules/mock/controller.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/controller.mock.spec.js +23 -0
- package/build/_modules/mock/controller.mock.spec.js.map +1 -0
- package/build/_modules/mock/data-model.mock.d.ts +2 -2
- package/build/_modules/mock/data-model.mock.d.ts.map +1 -1
- package/build/_modules/mock/data-model.mock.js +21 -21
- package/build/_modules/mock/data-model.mock.js.map +1 -1
- package/build/_modules/mock/data-model.mock.spec.d.ts +2 -0
- package/build/_modules/mock/data-model.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/data-model.mock.spec.js +99 -0
- package/build/_modules/mock/data-model.mock.spec.js.map +1 -0
- package/build/_modules/mock/email-service-collection.mock.spec.d.ts +2 -0
- package/build/_modules/mock/email-service-collection.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/email-service-collection.mock.spec.js +21 -0
- package/build/_modules/mock/email-service-collection.mock.spec.js.map +1 -0
- package/build/_modules/mock/email-service.mock.spec.d.ts +2 -0
- package/build/_modules/mock/email-service.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/email-service.mock.spec.js +14 -0
- package/build/_modules/mock/email-service.mock.spec.js.map +1 -0
- package/build/_modules/mock/socket-client.mock.js +2 -2
- package/build/_modules/mock/socket-client.mock.spec.d.ts +2 -0
- package/build/_modules/mock/socket-client.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/socket-client.mock.spec.js +32 -0
- package/build/_modules/mock/socket-client.mock.spec.js.map +1 -0
- package/build/_modules/mock/socket-server.mock.d.ts +1 -1
- package/build/_modules/mock/socket-server.mock.d.ts.map +1 -1
- package/build/_modules/mock/socket-server.mock.spec.d.ts +2 -0
- package/build/_modules/mock/socket-server.mock.spec.d.ts.map +1 -0
- package/build/_modules/mock/socket-server.mock.spec.js +36 -0
- package/build/_modules/mock/socket-server.mock.spec.js.map +1 -0
- package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.d.ts +2 -0
- package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.d.ts.map +1 -0
- package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.js +22 -0
- package/build/_modules/socket/_models/socket-client-service-params.control-model.spec.js.map +1 -0
- package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.d.ts +2 -0
- package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.d.ts.map +1 -0
- package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.js +29 -0
- package/build/_modules/socket/_models/socket-server-service-params.control-model.spec.js.map +1 -0
- package/build/_modules/socket/_services/socket-server.service.d.ts +1 -1
- package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.js +1 -1
- package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.spec.js +1 -1
- package/build/_modules/socket/_services/socket-server.service.spec.js.map +1 -1
- package/build/_modules/usage/usage.controller.d.ts.map +1 -1
- package/build/_modules/usage/usage.controller.js +6 -4
- package/build/_modules/usage/usage.controller.js.map +1 -1
- package/build/_modules/usage/usage.data-service.d.ts +4 -4
- package/build/_modules/usage/usage.data-service.d.ts.map +1 -1
- package/build/_modules/usage/usage.data-service.js +2 -2
- package/build/_modules/usage/usage.data-service.js.map +1 -1
- package/build/_services/base/archive-data.service.d.ts +1 -1
- package/build/_services/base/archive-data.service.d.ts.map +1 -1
- package/build/_services/base/archive-data.service.js.map +1 -1
- package/build/_services/base/data.service.d.ts +7 -7
- package/build/_services/base/data.service.d.ts.map +1 -1
- package/build/_services/base/data.service.js +22 -9
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/db.service.d.ts +3 -3
- package/build/_services/base/db.service.d.ts.map +1 -1
- package/build/_services/base/db.service.js +23 -14
- package/build/_services/base/db.service.js.map +1 -1
- package/build/_services/base/singleton.service-base.d.ts.map +1 -1
- package/build/_services/base/singleton.service-base.js.map +1 -1
- package/build/_services/core/api.service.d.ts +1 -1
- package/build/_services/core/api.service.d.ts.map +1 -1
- package/build/_services/core/api.service.js +5 -5
- package/build/_services/core/api.service.js.map +1 -1
- package/build/_services/core/api.service.spec.d.ts +2 -0
- package/build/_services/core/api.service.spec.d.ts.map +1 -0
- package/build/_services/core/api.service.spec.js +75 -0
- package/build/_services/core/api.service.spec.js.map +1 -0
- package/build/_services/core/email.service.d.ts +6 -6
- package/build/_services/core/email.service.d.ts.map +1 -1
- package/build/_services/core/email.service.js.map +1 -1
- package/build/_services/core/email.service.spec.d.ts +2 -0
- package/build/_services/core/email.service.spec.d.ts.map +1 -0
- package/build/_services/core/email.service.spec.js +77 -0
- package/build/_services/core/email.service.spec.js.map +1 -0
- package/build/_services/core/global.service.d.ts +2 -2
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +3 -2
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/route/controller.service.d.ts +3 -3
- package/build/_services/route/controller.service.d.ts.map +1 -1
- package/build/_services/route/controller.service.js +2 -2
- package/build/_services/route/controller.service.js.map +1 -1
- package/build/_services/route/controller.service.spec.d.ts +2 -0
- package/build/_services/route/controller.service.spec.d.ts.map +1 -0
- package/build/_services/route/controller.service.spec.js +48 -0
- package/build/_services/route/controller.service.spec.js.map +1 -0
- package/build/_services/route/routing-module.service.spec.d.ts +2 -0
- package/build/_services/route/routing-module.service.spec.d.ts.map +1 -0
- package/build/_services/route/routing-module.service.spec.js +65 -0
- package/build/_services/route/routing-module.service.spec.js.map +1 -0
- package/build/_services/server/app.server.d.ts +5 -5
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +9 -7
- package/build/_services/server/app.server.js.map +1 -1
- package/package.json +8 -8
- package/spec/support/jasmine.json +8 -0
- package/src/_collections/archive.util.spec.ts +22 -0
- package/src/_models/control-models/api-call-params.control-model.spec.ts +94 -0
- package/src/_models/control-models/app-params.control-model.spec.ts +69 -0
- package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -0
- package/src/_models/control-models/endpoint-params.control-model.ts +7 -6
- package/src/_models/control-models/http-settings.control-model.spec.ts +66 -0
- package/src/_models/control-models/system-control.control-model.spec.ts +27 -0
- package/src/_models/interfaces/global-service-settings.interface.ts +3 -3
- package/src/_modules/custom-data/custom-data.controller.ts +6 -6
- package/src/_modules/custom-data/custom-data.data-service.ts +4 -3
- package/src/_modules/mock/app-params.mock.spec.ts +21 -0
- package/src/_modules/mock/auth-service.mock.spec.ts +47 -0
- package/src/_modules/mock/controller.mock.spec.ts +26 -0
- package/src/_modules/mock/data-model.mock.spec.ts +109 -0
- package/src/_modules/mock/data-model.mock.ts +23 -23
- package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -0
- package/src/_modules/mock/email-service.mock.spec.ts +17 -0
- package/src/_modules/mock/socket-client.mock.spec.ts +40 -0
- package/src/_modules/mock/socket-client.mock.ts +4 -4
- package/src/_modules/mock/socket-server.mock.spec.ts +44 -0
- package/src/_modules/mock/socket-server.mock.ts +5 -5
- package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +30 -0
- package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +33 -0
- package/src/_modules/socket/_services/socket-server.service.spec.ts +1 -1
- package/src/_modules/socket/_services/socket-server.service.ts +2 -2
- package/src/_modules/test/get-test-routing-module.util.ts +2 -2
- package/src/_modules/usage/usage.controller.ts +10 -8
- package/src/_modules/usage/usage.data-service.ts +10 -7
- package/src/_services/base/archive-data.service.ts +2 -2
- package/src/_services/base/data.service.ts +100 -76
- package/src/_services/base/db.service.ts +77 -55
- package/src/_services/base/singleton.service-base.ts +0 -2
- package/src/_services/core/api.service.spec.ts +96 -0
- package/src/_services/core/api.service.ts +7 -7
- package/src/_services/core/email.service.spec.ts +93 -0
- package/src/_services/core/email.service.ts +9 -11
- package/src/_services/core/global.service.ts +19 -16
- package/src/_services/route/controller.service.spec.ts +52 -0
- package/src/_services/route/controller.service.ts +5 -6
- package/src/_services/route/routing-module.service.spec.ts +81 -0
- package/src/_services/server/app.server.ts +26 -24
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
import {
|
|
3
3
|
DyFM_AnyError,
|
|
4
4
|
DyFM_Array,
|
|
5
|
-
|
|
5
|
+
DyFM_Data_Params,
|
|
6
|
+
DyFM_DataModel_Params,
|
|
7
|
+
DyFM_DataProperty_Params,
|
|
6
8
|
DyFM_DBFilter,
|
|
7
9
|
DyFM_Error,
|
|
8
|
-
DyFM_Error_Settings,
|
|
10
|
+
DyFM_Error_Settings,
|
|
11
|
+
DyFM_ErrorLevel,
|
|
9
12
|
DyFM_Log,
|
|
10
13
|
DyFM_Metadata,
|
|
11
|
-
DyFM_SearchQuery
|
|
14
|
+
DyFM_SearchQuery,
|
|
15
|
+
DyFM_SearchResult
|
|
12
16
|
} from '@futdevpro/fsm-dynamo';
|
|
13
17
|
|
|
14
18
|
import { DyNTS_getArchivedDBName } from '../../_collections/archive.util';
|
|
@@ -26,16 +30,16 @@ import { DyNTS_DBService } from './db.service';
|
|
|
26
30
|
* @example
|
|
27
31
|
* export class UserMatchStatisticsService extends DyNTS_DataService<UserMatchStatistics> {
|
|
28
32
|
* constructor(
|
|
29
|
-
* set
|
|
33
|
+
* set: {
|
|
30
34
|
* data?: UserMatchStatistics,
|
|
31
|
-
* issuer
|
|
35
|
+
* issuer: string,
|
|
32
36
|
* }
|
|
33
37
|
* ) {
|
|
34
38
|
* super(
|
|
35
39
|
* new UserMatchStatistics(set?.data),
|
|
36
40
|
* userMatchStatisticsModelParams
|
|
37
41
|
* );
|
|
38
|
-
* this.issuer = set
|
|
42
|
+
* this.issuer = set.issuer;
|
|
39
43
|
* }
|
|
40
44
|
* }
|
|
41
45
|
*/
|
|
@@ -56,7 +60,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
56
60
|
depKeyIsRequired?: boolean;
|
|
57
61
|
private depDataDBService: DyNTS_DBService<any>;
|
|
58
62
|
|
|
59
|
-
dataParams: DyFM_DataModel_Params
|
|
63
|
+
dataParams: DyFM_DataModel_Params<T>;
|
|
60
64
|
|
|
61
65
|
readonly defaultErrorUserMsg: string =
|
|
62
66
|
`We encountered an unhandled Data Service Error, ` +
|
|
@@ -73,7 +77,8 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
73
77
|
/**
|
|
74
78
|
* DB data prams will be used to connect to usable dbService on GlobalService
|
|
75
79
|
*/
|
|
76
|
-
dataParams: DyFM_DataModel_Params,
|
|
80
|
+
/* dataParams: DyFM_DataModel_Params, */
|
|
81
|
+
dataParams: DyFM_Data_Params<T>,
|
|
77
82
|
/**
|
|
78
83
|
* Initial set for issuer to be able to follow the issuer's activity
|
|
79
84
|
*/
|
|
@@ -1005,66 +1010,68 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1005
1010
|
try {
|
|
1006
1011
|
data = this.ensureData(data);
|
|
1007
1012
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
(
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
// specific Date validation
|
|
1038
|
-
if (element.type === 'Date' &&
|
|
1039
|
-
!(new Date(data[element.key]) instanceof Date)
|
|
1040
|
-
) {
|
|
1041
|
-
throw new DyFM_Error({
|
|
1042
|
-
...this._getDefaultErrorSettings(
|
|
1043
|
-
'validateForSave',
|
|
1044
|
-
new Error(
|
|
1045
|
-
`validateForSave failed, "${element.key}" is not a date! ` +
|
|
1046
|
-
`(${this.dataParams.dataName})`
|
|
1047
|
-
)
|
|
1048
|
-
),
|
|
1013
|
+
Object.values(this.dataParams.properties).forEach(
|
|
1014
|
+
(element: DyFM_DataProperty_Params<any>) => {
|
|
1015
|
+
// basic required validations
|
|
1016
|
+
if (
|
|
1017
|
+
(
|
|
1018
|
+
element.required ||
|
|
1019
|
+
element.index
|
|
1020
|
+
) && (
|
|
1021
|
+
data[element.key] === null ||
|
|
1022
|
+
data[element.key] === undefined
|
|
1023
|
+
)
|
|
1024
|
+
) {
|
|
1025
|
+
throw new DyFM_Error({
|
|
1026
|
+
...this._getDefaultErrorSettings(
|
|
1027
|
+
'validateForSave',
|
|
1028
|
+
new Error(
|
|
1029
|
+
`validateForSave failed, "${element.key}" is missing! ` +
|
|
1030
|
+
`(${this.dataParams.dataName})`
|
|
1031
|
+
)
|
|
1032
|
+
),
|
|
1033
|
+
|
|
1034
|
+
status: 522,
|
|
1035
|
+
errorCode: 'NTS-DS0-VD1',
|
|
1036
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1037
|
+
additionalContent: {
|
|
1038
|
+
data: data,
|
|
1039
|
+
},
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1049
1042
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1043
|
+
// specific Date validation
|
|
1044
|
+
if (element.type === 'Date' &&
|
|
1045
|
+
!(new Date(data[element.key]) instanceof Date)
|
|
1046
|
+
) {
|
|
1047
|
+
throw new DyFM_Error({
|
|
1048
|
+
...this._getDefaultErrorSettings(
|
|
1049
|
+
'validateForSave',
|
|
1050
|
+
new Error(
|
|
1051
|
+
`validateForSave failed, "${element.key}" is not a date! ` +
|
|
1052
|
+
`(${this.dataParams.dataName})`
|
|
1053
|
+
)
|
|
1054
|
+
),
|
|
1055
|
+
|
|
1056
|
+
status: 522,
|
|
1057
|
+
errorCode: 'NTS-DS0-VD2',
|
|
1058
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1059
|
+
additionalContent: {
|
|
1060
|
+
data: data,
|
|
1061
|
+
},
|
|
1062
|
+
});
|
|
1063
|
+
}
|
|
1058
1064
|
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
+
// call additional validators
|
|
1066
|
+
if (element.additionalValidators) {
|
|
1067
|
+
for (let j = 0; j < element.additionalValidators.length; j++) {
|
|
1068
|
+
element.additionalValidators[j](
|
|
1069
|
+
data[element.key]
|
|
1070
|
+
);
|
|
1071
|
+
}
|
|
1065
1072
|
}
|
|
1066
1073
|
}
|
|
1067
|
-
|
|
1074
|
+
);
|
|
1068
1075
|
} catch (error) {
|
|
1069
1076
|
if ([ 'NTS-DS0-VD1', 'NTS-DS0-VD2' ].includes(error?.errorCode)) {
|
|
1070
1077
|
throw error;
|
|
@@ -1079,10 +1086,15 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1079
1086
|
}
|
|
1080
1087
|
}
|
|
1081
1088
|
|
|
1082
|
-
async searchData(query?: DyFM_SearchQuery<T>): Promise<T
|
|
1089
|
+
async searchData(query?: DyFM_SearchQuery<T>): Promise<DyFM_SearchResult<T>> {
|
|
1083
1090
|
try {
|
|
1084
1091
|
if (!query || Object.keys(query).length === 0) {
|
|
1085
|
-
|
|
1092
|
+
const allData: T[] = await this.getAll();
|
|
1093
|
+
|
|
1094
|
+
return {
|
|
1095
|
+
results: allData,
|
|
1096
|
+
total: allData.length,
|
|
1097
|
+
};
|
|
1086
1098
|
}
|
|
1087
1099
|
|
|
1088
1100
|
if (!query.filterBy) {
|
|
@@ -1090,7 +1102,12 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1090
1102
|
}
|
|
1091
1103
|
|
|
1092
1104
|
if (!query.page && !query.pageSize && !query.sortBy) {
|
|
1093
|
-
|
|
1105
|
+
const dataFindResult: T[] = await this.dataDBService.find(query.filterBy);
|
|
1106
|
+
|
|
1107
|
+
return {
|
|
1108
|
+
results: dataFindResult,
|
|
1109
|
+
total: dataFindResult.length,
|
|
1110
|
+
};
|
|
1094
1111
|
}
|
|
1095
1112
|
|
|
1096
1113
|
if (!query.page) {
|
|
@@ -1106,12 +1123,18 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1106
1123
|
query.sortBy = { __lastModified: -1 };
|
|
1107
1124
|
}
|
|
1108
1125
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1126
|
+
const dataFindWithPagingResult: T[] =
|
|
1127
|
+
await this.dataDBService.findWithPaging(
|
|
1128
|
+
query.filterBy,
|
|
1129
|
+
query.page,
|
|
1130
|
+
query.pageSize,
|
|
1131
|
+
query.sortBy
|
|
1132
|
+
);
|
|
1133
|
+
|
|
1134
|
+
return {
|
|
1135
|
+
results: dataFindWithPagingResult,
|
|
1136
|
+
total: dataFindWithPagingResult.length,
|
|
1137
|
+
};
|
|
1115
1138
|
} catch (error) {
|
|
1116
1139
|
throw new DyFM_Error({
|
|
1117
1140
|
...this._getDefaultErrorSettings('searchData', error),
|
|
@@ -1126,9 +1149,10 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1126
1149
|
* setting up dependency dataHook by DynamoBEDataModelParams
|
|
1127
1150
|
*/
|
|
1128
1151
|
private lookForDependencyDataSettings(): void {
|
|
1129
|
-
const dependencyParam: DyFM_DataProperty_Params =
|
|
1130
|
-
(
|
|
1131
|
-
|
|
1152
|
+
const dependencyParam: DyFM_DataProperty_Params<any> =
|
|
1153
|
+
Object.values(this.dataParams.properties).find(
|
|
1154
|
+
(modelParams: DyFM_DataProperty_Params<any>): boolean => modelParams.isDependencyHook
|
|
1155
|
+
);
|
|
1132
1156
|
|
|
1133
1157
|
if (dependencyParam) {
|
|
1134
1158
|
this.depKey = dependencyParam.key;
|
|
@@ -4,7 +4,9 @@ import { Schema } from 'mongoose';
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
DyFM_AnyError,
|
|
7
|
-
DyFM_DataModel_Params,
|
|
7
|
+
DyFM_DataModel_Params,
|
|
8
|
+
DyFM_DataProperties,
|
|
9
|
+
DyFM_DataProperty_Params,
|
|
8
10
|
DyFM_DBFilter, DyFM_DBFilterSimple, DyFM_DBSort,
|
|
9
11
|
DyFM_Error,
|
|
10
12
|
DyFM_Error_Settings, DyFM_ErrorLevel,
|
|
@@ -36,7 +38,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
36
38
|
* schemaSettings also MUST contain specific types that differs from the listed above (Array, Date)
|
|
37
39
|
*/
|
|
38
40
|
constructor(
|
|
39
|
-
public dataParams: DyFM_DataModel_Params
|
|
41
|
+
public dataParams: DyFM_DataModel_Params<T>
|
|
40
42
|
){
|
|
41
43
|
try {
|
|
42
44
|
this.serviceName = this.constructor?.name;
|
|
@@ -102,7 +104,10 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
102
104
|
throw new DyFM_Error({
|
|
103
105
|
...this._getDefaultErrorSettings('createData', error, issuer),
|
|
104
106
|
errorCode: 'NTS-DBS-CD0',
|
|
105
|
-
additionalContent: {
|
|
107
|
+
additionalContent: {
|
|
108
|
+
data: data,
|
|
109
|
+
dataModel: this.dataModel,
|
|
110
|
+
},
|
|
106
111
|
message:
|
|
107
112
|
`createData failed, Create new "${this.dataParams.dbName}" was unsuccessful (NTS DB)`,
|
|
108
113
|
issuer,
|
|
@@ -349,7 +354,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
349
354
|
_deleted: new Date(),
|
|
350
355
|
_deletedBy: issuer,
|
|
351
356
|
},
|
|
352
|
-
issuer
|
|
357
|
+
/* issuer */
|
|
353
358
|
).catch(
|
|
354
359
|
(error): void => {
|
|
355
360
|
throw new DyFM_Error({
|
|
@@ -392,7 +397,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
392
397
|
__lastModified: new Date(),
|
|
393
398
|
__lastModifiedBy: issuer,
|
|
394
399
|
},
|
|
395
|
-
issuer
|
|
400
|
+
/* issuer */
|
|
396
401
|
).catch((error): void => {
|
|
397
402
|
throw new DyFM_Error({
|
|
398
403
|
...this._getDefaultErrorSettings('restoreDeletedById', error, issuer),
|
|
@@ -531,55 +536,63 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
531
536
|
filter[this.depDataName] = { $in: narrowByDependencyIds };
|
|
532
537
|
}
|
|
533
538
|
|
|
534
|
-
this.dataParams.properties.forEach(
|
|
535
|
-
|
|
536
|
-
(
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
539
|
+
Object.values(this.dataParams.properties).forEach(
|
|
540
|
+
(modelParam: DyFM_DataProperty_Params<any>): void => {
|
|
541
|
+
if (
|
|
542
|
+
(filterBy[modelParam.key] !== null && filterBy[modelParam.key] !== undefined) ||
|
|
543
|
+
filterBy[modelParam.key + 'Range']
|
|
544
|
+
) {
|
|
545
|
+
if (modelParam.key.includes('Range') || modelParam.type.includes('[]')) {
|
|
546
|
+
// inverz search filter (for Range and Array functions)
|
|
547
|
+
if (modelParam.key.includes('Range')) {
|
|
548
|
+
const searchParamKeyWithoutRange = modelParam.key.split('Range')[0];
|
|
549
|
+
|
|
550
|
+
if (
|
|
551
|
+
filterBy[searchParamKeyWithoutRange] !== null &&
|
|
552
|
+
filterBy[searchParamKeyWithoutRange] !== undefined
|
|
553
|
+
) {
|
|
554
|
+
filter[modelParam.key] = {
|
|
555
|
+
from: { $lte: filterBy[searchParamKeyWithoutRange] },
|
|
556
|
+
to: { $gte: filterBy[searchParamKeyWithoutRange] },
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
} else {
|
|
560
|
+
if (
|
|
561
|
+
filterBy[modelParam.key] !== null &&
|
|
562
|
+
filterBy[modelParam.key] !== undefined
|
|
563
|
+
) {
|
|
564
|
+
filter[modelParam.key] = { $in: filterBy[modelParam.key] };
|
|
565
|
+
}
|
|
552
566
|
}
|
|
553
567
|
} else {
|
|
554
|
-
|
|
568
|
+
// basic search filter
|
|
569
|
+
if (filterBy[modelParam.key + 'Range']) {
|
|
570
|
+
if (
|
|
571
|
+
filterBy[modelParam.key + 'Range'].from ||
|
|
572
|
+
filterBy[modelParam.key + 'Range'].to
|
|
573
|
+
) {
|
|
574
|
+
filter[modelParam.key] = {};
|
|
575
|
+
|
|
576
|
+
if (filterBy[modelParam.key + 'Range'].from) {
|
|
577
|
+
filter[modelParam.key].$gte = filterBy[modelParam.key + 'Range'].from;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
if (filterBy[modelParam.key + 'Range'].to) {
|
|
581
|
+
filter[modelParam.key].$lte = filterBy[modelParam.key + 'Range'].to;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
} else if (
|
|
555
585
|
filterBy[modelParam.key] !== null &&
|
|
556
586
|
filterBy[modelParam.key] !== undefined
|
|
557
587
|
) {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
}
|
|
561
|
-
} else {
|
|
562
|
-
// basic search filter
|
|
563
|
-
if (filterBy[modelParam.key + 'Range']) {
|
|
564
|
-
if (filterBy[modelParam.key + 'Range'].from || filterBy[modelParam.key + 'Range'].to) {
|
|
565
|
-
filter[modelParam.key] = {};
|
|
566
|
-
|
|
567
|
-
if (filterBy[modelParam.key + 'Range'].from) {
|
|
568
|
-
filter[modelParam.key].$gte = filterBy[modelParam.key + 'Range'].from;
|
|
588
|
+
if (filterBy[modelParam.key].lenght > 0) {
|
|
589
|
+
filter[modelParam.key] = { $in: filterBy[modelParam.key] };
|
|
569
590
|
}
|
|
570
|
-
|
|
571
|
-
if (filterBy[modelParam.key + 'Range'].to) {
|
|
572
|
-
filter[modelParam.key].$lte = filterBy[modelParam.key + 'Range'].to;
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
} else if (filterBy[modelParam.key] !== null && filterBy[modelParam.key] !== undefined) {
|
|
576
|
-
if (filterBy[modelParam.key].lenght > 0) {
|
|
577
|
-
filter[modelParam.key] = { $in: filterBy[modelParam.key] };
|
|
578
591
|
}
|
|
579
592
|
}
|
|
580
593
|
}
|
|
581
594
|
}
|
|
582
|
-
|
|
595
|
+
);
|
|
583
596
|
|
|
584
597
|
let dataList: T[] = await this.dataModel
|
|
585
598
|
.find(filter)
|
|
@@ -1013,23 +1026,29 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1013
1026
|
|
|
1014
1027
|
/**
|
|
1015
1028
|
* builds mongoose schema building settings object by dynamoDataModelParamsList
|
|
1016
|
-
* @param
|
|
1029
|
+
* @param properties DynamoBEDataPropertyParams
|
|
1017
1030
|
* @returns mongoose schema object
|
|
1018
1031
|
*/
|
|
1019
|
-
private buildMongooseSchemaByModelParams(
|
|
1032
|
+
private buildMongooseSchemaByModelParams(properties?: DyFM_DataProperties<T>): any {
|
|
1020
1033
|
const schemaSettingsObj = {};
|
|
1021
1034
|
|
|
1022
|
-
if (!
|
|
1023
|
-
|
|
1035
|
+
if (!properties) {
|
|
1036
|
+
properties = this.dataParams.properties;
|
|
1024
1037
|
}
|
|
1025
1038
|
|
|
1026
|
-
|
|
1039
|
+
Object.values(properties).forEach((property: DyFM_DataProperty_Params<any>): void => {
|
|
1040
|
+
if (!property) {
|
|
1041
|
+
DyFM_Log.warn(`property is undefined on ${this.dataParams.dbName} (NTS DB)`);
|
|
1042
|
+
|
|
1043
|
+
return;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1027
1046
|
const beType = this.getBEType(property.type);
|
|
1028
1047
|
|
|
1029
1048
|
if (
|
|
1030
1049
|
beType !== Object ||
|
|
1031
1050
|
!property?.subObjectParams ||
|
|
1032
|
-
property?.subObjectParams
|
|
1051
|
+
(property?.subObjectParams && Object.keys(property.subObjectParams).length == 0)
|
|
1033
1052
|
) {
|
|
1034
1053
|
schemaSettingsObj[property.key] = {
|
|
1035
1054
|
type: beType,
|
|
@@ -1123,12 +1142,15 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1123
1142
|
* sets depDataKey
|
|
1124
1143
|
*/
|
|
1125
1144
|
private lookForDependencyDataSettings(): void {
|
|
1126
|
-
const dependencyParam: DyFM_DataProperty_Params =
|
|
1127
|
-
(
|
|
1128
|
-
|
|
1145
|
+
const dependencyParam: DyFM_DataProperty_Params<any> =
|
|
1146
|
+
Object.values(this.dataParams.properties).find(
|
|
1147
|
+
(modelParams: DyFM_DataProperty_Params<any>): boolean => modelParams.isDependencyHook
|
|
1148
|
+
);
|
|
1129
1149
|
|
|
1130
|
-
if (
|
|
1131
|
-
(
|
|
1150
|
+
if (
|
|
1151
|
+
Object.values(this.dataParams.properties).filter(
|
|
1152
|
+
(modelParams: DyFM_DataProperty_Params<any>): boolean => modelParams.isDependencyHook
|
|
1153
|
+
).length > 1
|
|
1132
1154
|
) {
|
|
1133
1155
|
throw new DyFM_Error({
|
|
1134
1156
|
...this._getDefaultErrorSettings(
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
|
|
2
|
+
import { DyNTS_ApiService, DyNTS_ApiCallInput_Params } from './api.service';
|
|
3
|
+
import { DyNTS_ApiCall_Params } from '../../_models/control-models/api-call-params.control-model';
|
|
4
|
+
import { DyNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
|
|
5
|
+
import { DyNTS_HttpResponseType } from '../../_enums/http/http-response-type.enum';
|
|
6
|
+
import { DyFM_Error } from '@futdevpro/fsm-dynamo';
|
|
7
|
+
import Axios from 'axios';
|
|
8
|
+
|
|
9
|
+
describe('DyNTS_ApiService', () => {
|
|
10
|
+
let callParams: DyNTS_ApiCall_Params;
|
|
11
|
+
let inputParams: DyNTS_ApiCallInput_Params;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
callParams = {
|
|
15
|
+
baseUrl: 'http://example.com',
|
|
16
|
+
endPoint: '/api/test',
|
|
17
|
+
type: DyNTS_HttpCallType.get,
|
|
18
|
+
httpOptions: {
|
|
19
|
+
headers: {},
|
|
20
|
+
responseType: DyNTS_HttpResponseType.json,
|
|
21
|
+
},
|
|
22
|
+
name: 'Test API Call',
|
|
23
|
+
getFullResponse: false,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
inputParams = {
|
|
27
|
+
pathParams: { id: '123' },
|
|
28
|
+
body: { key: 'value' },
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('should make a GET request successfully', async () => {
|
|
33
|
+
callParams.type = DyNTS_HttpCallType.get;
|
|
34
|
+
const response = { data: { success: true } };
|
|
35
|
+
spyOn(Axios, 'create').and.returnValue({
|
|
36
|
+
get: jasmine.createSpy().and.returnValue(Promise.resolve(response)),
|
|
37
|
+
} as any);
|
|
38
|
+
|
|
39
|
+
const result = await DyNTS_ApiService.startApiCall(callParams, inputParams);
|
|
40
|
+
expect(result).toEqual(response.data);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('should handle a POST request successfully', async () => {
|
|
44
|
+
callParams.type = DyNTS_HttpCallType.post;
|
|
45
|
+
const response = { data: { success: true } };
|
|
46
|
+
spyOn(Axios, 'create').and.returnValue({
|
|
47
|
+
post: jasmine.createSpy().and.returnValue(Promise.resolve(response)),
|
|
48
|
+
} as any);
|
|
49
|
+
|
|
50
|
+
const result = await DyNTS_ApiService.startApiCall(callParams, inputParams);
|
|
51
|
+
expect(result).toEqual(response.data);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('should throw an error for unsupported HTTP method', async () => {
|
|
55
|
+
callParams.type = 'unsupported' as DyNTS_HttpCallType;
|
|
56
|
+
|
|
57
|
+
await expectAsync(DyNTS_ApiService.startApiCall(callParams, inputParams)).toBeRejectedWith(
|
|
58
|
+
jasmine.any(DyFM_Error)
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('should handle error response with DYNAMO flag', async () => {
|
|
63
|
+
const errorResponse = {
|
|
64
|
+
response: { data: { flag: 'DYNAMO', message: 'Error' } },
|
|
65
|
+
};
|
|
66
|
+
spyOn(Axios, 'create').and.returnValue({
|
|
67
|
+
get: jasmine.createSpy().and.returnValue(Promise.reject(errorResponse)),
|
|
68
|
+
} as any);
|
|
69
|
+
|
|
70
|
+
await expectAsync(DyNTS_ApiService.startApiCall(callParams, inputParams)).toBeRejectedWith(
|
|
71
|
+
jasmine.any(DyFM_Error)
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('should handle DNS error', async () => {
|
|
76
|
+
const error = { code: 'ENOTFOUND' };
|
|
77
|
+
spyOn(Axios, 'create').and.returnValue({
|
|
78
|
+
get: jasmine.createSpy().and.returnValue(Promise.reject(error)),
|
|
79
|
+
} as any);
|
|
80
|
+
|
|
81
|
+
await expectAsync(DyNTS_ApiService.startApiCall(callParams, inputParams)).toBeRejectedWith(
|
|
82
|
+
jasmine.any(DyFM_Error)
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should handle connection refused error', async () => {
|
|
87
|
+
const error = { code: 'ECONNREFUSED' };
|
|
88
|
+
spyOn(Axios, 'create').and.returnValue({
|
|
89
|
+
get: jasmine.createSpy().and.returnValue(Promise.reject(error)),
|
|
90
|
+
} as any);
|
|
91
|
+
|
|
92
|
+
await expectAsync(DyNTS_ApiService.startApiCall(callParams, inputParams)).toBeRejectedWith(
|
|
93
|
+
jasmine.any(DyFM_Error)
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
DyFM_AnyError, DyFM_Error, DyFM_Error_Settings, DyFM_Log
|
|
2
|
+
import {
|
|
3
|
+
DyFM_AnyError, DyFM_Error, DyFM_Error_Settings, DyFM_Log
|
|
5
4
|
} from '@futdevpro/fsm-dynamo';
|
|
5
|
+
import * as Axios from 'axios';
|
|
6
6
|
|
|
7
|
+
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
7
8
|
import { DyNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
|
|
8
9
|
import { DyNTS_HttpResponseType } from '../../_enums/http/http-response-type.enum';
|
|
9
10
|
import {
|
|
10
11
|
DyNTS_ApiCall_Params
|
|
11
12
|
} from '../../_models/control-models/api-call-params.control-model';
|
|
12
|
-
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
13
13
|
|
|
14
14
|
export interface DyNTS_ApiCallInput_Params<T_Body = any> {
|
|
15
15
|
pathParams?: {
|
|
@@ -45,7 +45,7 @@ export class DyNTS_ApiService {
|
|
|
45
45
|
public static async startApiCall<T_Response, T_Body = any>(
|
|
46
46
|
/**
|
|
47
47
|
* you must setup the basic api call params with this.
|
|
48
|
-
* follow the instructions in the constructor: new
|
|
48
|
+
* follow the instructions in the constructor: new DyNTS_ApiCall_Params({ ... })
|
|
49
49
|
*/
|
|
50
50
|
callParams: DyNTS_ApiCall_Params,
|
|
51
51
|
/**
|
|
@@ -77,7 +77,7 @@ export class DyNTS_ApiService {
|
|
|
77
77
|
switch (callParams.type) {
|
|
78
78
|
case DyNTS_HttpCallType.get:
|
|
79
79
|
if (inputParams?.body) {
|
|
80
|
-
DyFM_Log.warn(
|
|
80
|
+
DyFM_Log.warn(`WARNING you cant send body in get calls (${callParams.name})`);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
a = await this.get<T_Response>(axios, url, callParams);
|
|
@@ -133,7 +133,7 @@ export class DyNTS_ApiService {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
/* private static setupQueryParams<T_Body = any>(
|
|
136
|
-
inputParams: DyNTS_ApiCallInputParams<T_Body>, callParams:
|
|
136
|
+
inputParams: DyNTS_ApiCallInputParams<T_Body>, callParams: DyNTS_ApiCall_Params) {
|
|
137
137
|
const httpParams = new HttpParams();
|
|
138
138
|
|
|
139
139
|
for (const queryParamKey in inputParams.queryParams) {
|