@futdevpro/nts-dynamo 1.10.2 → 1.10.4
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/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +2 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.d.ts +5 -6
- package/build/_models/control-models/api-call-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.js.map +1 -1
- package/build/_models/control-models/api-call-params.control-model.spec.js +8 -10
- package/build/_models/control-models/api-call-params.control-model.spec.js.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts +3 -3
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/interfaces/global-log-settings.interface.d.ts +4 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_models/interfaces/global-settings.interface.d.ts +4 -0
- package/build/_models/interfaces/global-settings.interface.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/mock/app-extended-server.mock.d.ts +3 -3
- package/build/_modules/mock/app-extended-server.mock.d.ts.map +1 -1
- package/build/_modules/mock/app-extended-server.mock.js +8 -8
- package/build/_modules/mock/app-extended-server.mock.js.map +1 -1
- package/build/_modules/mock/app-server.mock.d.ts +2 -2
- package/build/_modules/mock/app-server.mock.d.ts.map +1 -1
- package/build/_modules/mock/app-server.mock.js +6 -6
- package/build/_modules/mock/app-server.mock.js.map +1 -1
- package/build/_modules/mock/endpoint.mock.d.ts.map +1 -1
- package/build/_modules/mock/endpoint.mock.js +7 -7
- package/build/_modules/mock/endpoint.mock.js.map +1 -1
- package/build/_modules/socket/{_services/app-extended.server.d.ts → app-extended.server.d.ts} +2 -2
- package/build/_modules/socket/app-extended.server.d.ts.map +1 -0
- package/build/_modules/socket/{_services/app-extended.server.js → app-extended.server.js} +6 -6
- package/build/_modules/socket/app-extended.server.js.map +1 -0
- package/build/_modules/socket/app-extended.server.spec.d.ts.map +1 -0
- package/build/_modules/socket/{_services/app-extended.server.spec.js → app-extended.server.spec.js} +5 -5
- package/build/_modules/socket/app-extended.server.spec.js.map +1 -0
- package/build/_modules/socket/index.d.ts +1 -1
- package/build/_modules/socket/index.d.ts.map +1 -1
- package/build/_modules/socket/index.js +1 -1
- package/build/_modules/socket/index.js.map +1 -1
- package/build/_modules/test/test.controller.d.ts.map +1 -1
- package/build/_modules/test/test.controller.js +8 -8
- package/build/_modules/test/test.controller.js.map +1 -1
- package/build/_modules/usage/usage.controller.d.ts.map +1 -1
- package/build/_modules/usage/usage.controller.js +5 -5
- package/build/_modules/usage/usage.controller.js.map +1 -1
- package/build/_services/base/data.service.d.ts +9 -5
- package/build/_services/base/data.service.d.ts.map +1 -1
- package/build/_services/base/data.service.js +48 -32
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/db.service.d.ts +6 -1
- package/build/_services/base/db.service.d.ts.map +1 -1
- package/build/_services/base/db.service.js +54 -14
- package/build/_services/base/db.service.js.map +1 -1
- package/build/_services/core/api.service.d.ts.map +1 -1
- package/build/_services/core/api.service.js +15 -18
- package/build/_services/core/api.service.js.map +1 -1
- package/build/_services/core/api.service.spec.js +6 -8
- package/build/_services/core/api.service.spec.js.map +1 -1
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +9 -1
- 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.js +2 -2
- package/build/_services/route/controller.service.spec.js +2 -2
- package/build/_services/route/controller.service.spec.js.map +1 -1
- package/build/_services/route/routing-module.service.d.ts +1 -1
- package/build/_services/route/routing-module.service.d.ts.map +1 -1
- package/build/_services/route/routing-module.service.js +10 -11
- package/build/_services/route/routing-module.service.js.map +1 -1
- package/build/_services/route/routing-module.service.spec.js +1 -2
- package/build/_services/route/routing-module.service.spec.js.map +1 -1
- package/build/_services/server/app.server.d.ts +25 -0
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +1 -4
- package/build/_services/server/app.server.js.map +1 -1
- package/build/_services/server/app.server.spec.js +4 -1
- package/build/_services/server/app.server.spec.js.map +1 -1
- package/build/_services/server/env-set.d.ts +2 -0
- package/build/_services/server/env-set.d.ts.map +1 -0
- package/build/_services/server/env-set.js +20 -0
- package/build/_services/server/env-set.js.map +1 -0
- package/build/index.d.ts +1 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -3
- package/build/index.js.map +1 -1
- package/package.json +14 -18
- package/src/_collections/global-settings.const.ts +2 -0
- package/src/_models/control-models/api-call-params.control-model.spec.ts +10 -11
- package/src/_models/control-models/api-call-params.control-model.ts +5 -7
- package/src/_models/control-models/endpoint-params.control-model.ts +6 -5
- package/src/_models/interfaces/global-log-settings.interface.ts +5 -0
- package/src/_models/interfaces/global-settings.interface.ts +5 -0
- package/src/_modules/custom-data/custom-data.controller.ts +3 -3
- package/src/_modules/mock/app-extended-server.mock.ts +13 -13
- package/src/_modules/mock/app-server.mock.ts +10 -10
- package/src/_modules/mock/endpoint.mock.ts +8 -8
- package/src/_modules/socket/{_services/app-extended.server.spec.ts → app-extended.server.spec.ts} +7 -7
- package/src/_modules/socket/{_services/app-extended.server.ts → app-extended.server.ts} +18 -13
- package/src/_modules/socket/index.ts +1 -1
- package/src/_modules/test/test.controller.ts +10 -10
- package/src/_modules/usage/usage.controller.ts +5 -6
- package/src/_services/base/data.service.ts +81 -35
- package/src/_services/base/db.service.ts +63 -11
- package/src/_services/core/api.service.spec.ts +17 -10
- package/src/_services/core/api.service.ts +16 -16
- package/src/_services/core/global.service.ts +9 -1
- package/src/_services/route/controller.service.spec.ts +3 -2
- package/src/_services/route/controller.service.ts +3 -3
- package/src/_services/route/routing-module.service.spec.ts +5 -5
- package/src/_services/route/routing-module.service.ts +20 -19
- package/src/_services/server/app.server.spec.ts +7 -2
- package/src/_services/server/app.server.ts +2 -2
- package/src/_services/server/env-set.ts +21 -0
- package/src/index.ts +1 -4
- package/tsconfig.json +1 -1
- package/build/_enums/http/http-call-type.enum.d.ts +0 -12
- package/build/_enums/http/http-call-type.enum.d.ts.map +0 -1
- package/build/_enums/http/http-call-type.enum.js +0 -16
- package/build/_enums/http/http-call-type.enum.js.map +0 -1
- package/build/_enums/http/http-response-type.enum.d.ts +0 -7
- package/build/_enums/http/http-response-type.enum.d.ts.map +0 -1
- package/build/_enums/http/http-response-type.enum.js +0 -11
- package/build/_enums/http/http-response-type.enum.js.map +0 -1
- package/build/_modules/socket/_services/app-extended.server.d.ts.map +0 -1
- package/build/_modules/socket/_services/app-extended.server.js.map +0 -1
- package/build/_modules/socket/_services/app-extended.server.spec.d.ts.map +0 -1
- package/build/_modules/socket/_services/app-extended.server.spec.js.map +0 -1
- package/src/_enums/http/http-call-type.enum.ts +0 -12
- package/src/_enums/http/http-response-type.enum.ts +0 -7
- /package/build/_modules/socket/{_services/app-extended.server.spec.d.ts → app-extended.server.spec.d.ts} +0 -0
|
@@ -163,6 +163,9 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
163
163
|
* also if dontSetToService is false or not setted,
|
|
164
164
|
* the data will be saved to the service, even if its not found
|
|
165
165
|
*
|
|
166
|
+
* if the data is not found, it will try to find it from the archive
|
|
167
|
+
* unless skipArchiveLoad is set to true
|
|
168
|
+
*
|
|
166
169
|
* @remarks
|
|
167
170
|
* If you need to get-save a data, if possible,
|
|
168
171
|
* use db-service update instead.
|
|
@@ -173,9 +176,15 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
173
176
|
*
|
|
174
177
|
* @return {T} data: T
|
|
175
178
|
*/
|
|
176
|
-
async getDataById(
|
|
179
|
+
async getDataById(
|
|
180
|
+
id?: string,
|
|
181
|
+
dontSetToService?: boolean,
|
|
182
|
+
skipArchiveLoad?: boolean
|
|
183
|
+
): Promise<T> {
|
|
177
184
|
try {
|
|
178
|
-
|
|
185
|
+
id = id ?? this.data?._id;
|
|
186
|
+
|
|
187
|
+
if (!id) {
|
|
179
188
|
throw new DyFM_Error({
|
|
180
189
|
...this._getDefaultErrorSettings(
|
|
181
190
|
'getDataById',
|
|
@@ -190,7 +199,13 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
190
199
|
});
|
|
191
200
|
}
|
|
192
201
|
|
|
193
|
-
|
|
202
|
+
let dataExists: T = await this.dataDBService.getDataById(id);
|
|
203
|
+
|
|
204
|
+
if (this.haveArchiveDataService && !skipArchiveLoad) {
|
|
205
|
+
const archiveDataService: DyNTS_ArchiveDataService<T> = this.getArchiveDataService();
|
|
206
|
+
|
|
207
|
+
dataExists = await archiveDataService.getDataByOriginalId(id, true);
|
|
208
|
+
}
|
|
194
209
|
|
|
195
210
|
if (!dontSetToService) {
|
|
196
211
|
this.data = dataExists;
|
|
@@ -875,6 +890,17 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
875
890
|
|
|
876
891
|
this.data = await this.getDataById(id, true);
|
|
877
892
|
|
|
893
|
+
if (!this.data) {
|
|
894
|
+
throw new DyFM_Error({
|
|
895
|
+
...this._getDefaultErrorSettings(
|
|
896
|
+
'deleteData',
|
|
897
|
+
new Error(`deleteData failed, data not found! (${this.dataParams.dataName})`)
|
|
898
|
+
),
|
|
899
|
+
|
|
900
|
+
errorCode: 'NTS-DS0-DD2',
|
|
901
|
+
});
|
|
902
|
+
}
|
|
903
|
+
|
|
878
904
|
if (this.haveArchiveDataService) {
|
|
879
905
|
const archive_DS: DyNTS_DataService<T> = this.getArchiveDataService();
|
|
880
906
|
|
|
@@ -1088,38 +1114,44 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1088
1114
|
}
|
|
1089
1115
|
}
|
|
1090
1116
|
|
|
1091
|
-
async searchData(query?: DyFM_SearchQuery<T
|
|
1117
|
+
async searchData(query?: DyFM_SearchQuery<T>, dataList?: T[]): Promise<DyFM_SearchResult<T>> {
|
|
1092
1118
|
try {
|
|
1093
|
-
|
|
1094
|
-
console.log('T1');
|
|
1095
|
-
const allData: T[] = await this.getAll();
|
|
1119
|
+
const searchResult = await this.sortAndFilterDataList(query, dataList);
|
|
1096
1120
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1121
|
+
if (query.page !== undefined && query.pageSize !== undefined) {
|
|
1122
|
+
const start = query.page * query.pageSize;
|
|
1123
|
+
const end = start + query.pageSize;
|
|
1124
|
+
|
|
1125
|
+
searchResult.results = searchResult.results.slice(start, end);
|
|
1126
|
+
}
|
|
1102
1127
|
|
|
1128
|
+
return searchResult;
|
|
1129
|
+
} catch (error) {
|
|
1130
|
+
throw new DyFM_Error({
|
|
1131
|
+
...this._getDefaultErrorSettings('searchData', error),
|
|
1132
|
+
|
|
1133
|
+
errorCode: 'NTS-DS0-SD0',
|
|
1134
|
+
});
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
async sortAndFilterDataList(
|
|
1139
|
+
query: DyFM_SearchQuery<T>,
|
|
1140
|
+
dataList?: T[]
|
|
1141
|
+
): Promise<DyFM_SearchResult<T>> {
|
|
1142
|
+
try {
|
|
1103
1143
|
if (!query.filterBy) {
|
|
1104
1144
|
query.filterBy = {};
|
|
1105
1145
|
}
|
|
1106
|
-
|
|
1107
|
-
/* if (!query.page && !query.pageSize && !query.sortBy) {
|
|
1108
|
-
console.log('T2');
|
|
1109
|
-
const dataFindResult: T[] = await this.dataDBService.find(query.filterBy);
|
|
1110
|
-
|
|
1111
|
-
return {
|
|
1112
|
-
results: dataFindResult,
|
|
1113
|
-
totalItems: dataFindResult.length,
|
|
1114
|
-
};
|
|
1115
|
-
} */
|
|
1116
1146
|
|
|
1117
1147
|
if (!query.page) {
|
|
1118
1148
|
query.page = 0;
|
|
1119
1149
|
}
|
|
1120
1150
|
|
|
1121
1151
|
if (!query.pageSize) {
|
|
1122
|
-
DyFM_Log.warn(
|
|
1152
|
+
DyFM_Log.warn(
|
|
1153
|
+
`searchData pageSize is not setted, setting to ${DyNTS_global_settings.defaultPageSize}.`
|
|
1154
|
+
);
|
|
1123
1155
|
query.pageSize = DyNTS_global_settings.defaultPageSize;
|
|
1124
1156
|
}
|
|
1125
1157
|
|
|
@@ -1127,16 +1159,12 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1127
1159
|
query.sortBy = [{ key: '__lastModified', order: -1 }];
|
|
1128
1160
|
}
|
|
1129
1161
|
|
|
1130
|
-
console.log('T3');
|
|
1131
|
-
/* const dataFindWithPagingResult: T[] = await this.dataDBService.findWithPaging(
|
|
1132
|
-
query.filterBy,
|
|
1133
|
-
query.page,
|
|
1134
|
-
query.pageSize,
|
|
1135
|
-
query.sortBy
|
|
1136
|
-
); */
|
|
1137
1162
|
query.sortBy.reverse();
|
|
1138
|
-
|
|
1139
|
-
|
|
1163
|
+
|
|
1164
|
+
if (!dataList) {
|
|
1165
|
+
dataList = await this.getAll();
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1140
1168
|
const filterKeys = Object.keys(query.filterBy);
|
|
1141
1169
|
const filterFunctionsByKey: { [key: string]: (dataProperty) => boolean } = {};
|
|
1142
1170
|
|
|
@@ -1169,7 +1197,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1169
1197
|
}
|
|
1170
1198
|
}
|
|
1171
1199
|
|
|
1172
|
-
|
|
1200
|
+
protected getFilterFunctionForKey<T>(
|
|
1173
1201
|
key: string,
|
|
1174
1202
|
searchValue: T | T[] | DyFM_RangeValue<T>,
|
|
1175
1203
|
): (dataProperty) => boolean {
|
|
@@ -1201,9 +1229,27 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1201
1229
|
});
|
|
1202
1230
|
}
|
|
1203
1231
|
|
|
1232
|
+
|
|
1204
1233
|
switch (this.dataParams.properties[key].type) {
|
|
1205
1234
|
case 'String':
|
|
1206
|
-
|
|
1235
|
+
if (typeof searchValue !== 'string') {
|
|
1236
|
+
throw new DyFM_Error({
|
|
1237
|
+
...this._getDefaultErrorSettings(
|
|
1238
|
+
'getFilterFunctionForKey',
|
|
1239
|
+
new Error(
|
|
1240
|
+
`getFilterFunctionForKey failed, searchValue is not a string! ` +
|
|
1241
|
+
`(${this.dataParams.dataName})`
|
|
1242
|
+
)
|
|
1243
|
+
),
|
|
1244
|
+
|
|
1245
|
+
errorCode: 'NTS-DS0-GFF3',
|
|
1246
|
+
});
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
const lowerCaseSearchValue: string = (searchValue as string).toLowerCase();
|
|
1250
|
+
|
|
1251
|
+
return (dataProperty): boolean =>
|
|
1252
|
+
(dataProperty as string).toLowerCase().includes(lowerCaseSearchValue);
|
|
1207
1253
|
|
|
1208
1254
|
case 'Date':
|
|
1209
1255
|
if ((searchValue as DyFM_RangeValue).isRange) {
|
|
@@ -1268,7 +1314,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1268
1314
|
}
|
|
1269
1315
|
}
|
|
1270
1316
|
|
|
1271
|
-
|
|
1317
|
+
protected getSortFunctionForKey<T>(
|
|
1272
1318
|
key: string,
|
|
1273
1319
|
sortDirection: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending'
|
|
1274
1320
|
): (a: T, b: T) => number {
|
|
@@ -1009,14 +1009,18 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1009
1009
|
*/
|
|
1010
1010
|
private getSchema(): mongoose.Schema {
|
|
1011
1011
|
this.dataParams.properties = this.addMetadataToProperties(this.dataParams.properties);
|
|
1012
|
+
|
|
1013
|
+
if (this.dataParams.dataName.includes(DyNTS_archiveSuffix)) {
|
|
1014
|
+
this.dataParams.properties = this.addArchiveMetadataToProperties(this.dataParams.properties);
|
|
1015
|
+
}
|
|
1012
1016
|
|
|
1013
|
-
|
|
1017
|
+
const schema: any = this.buildMongooseSchemaByModelParams(this.dataParams.properties);
|
|
1014
1018
|
|
|
1015
1019
|
/* schema = this.addMetadataToSchema(schema); */
|
|
1016
1020
|
|
|
1017
|
-
if (this.dataParams.dataName.includes(DyNTS_archiveSuffix)) {
|
|
1021
|
+
/* if (this.dataParams.dataName.includes(DyNTS_archiveSuffix)) {
|
|
1018
1022
|
schema = this.addArchiveMetadataToSchema(schema);
|
|
1019
|
-
}
|
|
1023
|
+
} */
|
|
1020
1024
|
|
|
1021
1025
|
if (schema['_id']) {
|
|
1022
1026
|
delete schema['_id'];
|
|
@@ -1044,12 +1048,34 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1044
1048
|
return;
|
|
1045
1049
|
}
|
|
1046
1050
|
|
|
1051
|
+
if (!property.key) {
|
|
1052
|
+
throw new DyFM_Error({
|
|
1053
|
+
...this._getDefaultErrorSettings(
|
|
1054
|
+
'buildMongooseSchemaByModelParams',
|
|
1055
|
+
new Error(
|
|
1056
|
+
`property.key is undefined on ${this.dataParams.dbName} (NTS DB)` +
|
|
1057
|
+
`(keys: ${Object.keys(properties)})`
|
|
1058
|
+
)
|
|
1059
|
+
),
|
|
1060
|
+
errorCode: 'NTS-DBS-BMSBP0',
|
|
1061
|
+
additionalContent: {
|
|
1062
|
+
property,
|
|
1063
|
+
dataParams: this.dataParams,
|
|
1064
|
+
},
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1047
1068
|
const beType = this.getBEType(property.type);
|
|
1048
1069
|
|
|
1070
|
+
/* TODO if (beType === Array && property.archiveable && !property.archiveListAfter) {
|
|
1071
|
+
property.archiveListAfter = DyNTS_global_settings.archiveListAfter;
|
|
1072
|
+
} */
|
|
1073
|
+
|
|
1049
1074
|
if (
|
|
1050
1075
|
beType !== Object ||
|
|
1051
1076
|
!property?.subObjectParams ||
|
|
1052
|
-
(property?.subObjectParams &&
|
|
1077
|
+
(property?.subObjectParams &&
|
|
1078
|
+
Object.keys(property.subObjectParams).length == 0)
|
|
1053
1079
|
) {
|
|
1054
1080
|
schemaSettingsObj[property.key] = {
|
|
1055
1081
|
type: beType,
|
|
@@ -1132,39 +1158,65 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1132
1158
|
return schema;
|
|
1133
1159
|
} */
|
|
1134
1160
|
|
|
1161
|
+
/**
|
|
1162
|
+
* adds dynamo metadata settings to any mongoose schema building settings object
|
|
1163
|
+
* @param properties properties to update
|
|
1164
|
+
* @returns updated properties
|
|
1165
|
+
*/
|
|
1135
1166
|
private addMetadataToProperties(properties: DyFM_DataProperties<T>): DyFM_DataProperties<T> {
|
|
1167
|
+
// TOD: ezek a kikommentelt "required: true"-k kellenek, csak félő, hogy gondokat okoznak a
|
|
1168
|
+
// jelenlegi rendszerekben, ezért akkor kell majd visszarakni, ha lesz tesztelői ÉS fejlesztői kapacitás rá
|
|
1136
1169
|
if (!properties.__created) {
|
|
1137
|
-
properties.__created = { type: 'Date' };
|
|
1170
|
+
properties.__created = { key: '__created', type: 'Date'/* , required: true */ };
|
|
1138
1171
|
}
|
|
1139
1172
|
|
|
1140
1173
|
if (!properties.__createdBy) {
|
|
1141
|
-
properties.__createdBy = { type: '
|
|
1174
|
+
properties.__createdBy = { key: '__createdBy', type: 'string'/* , required: true */ };
|
|
1142
1175
|
}
|
|
1143
1176
|
|
|
1144
1177
|
if (!properties.__lastModified) {
|
|
1145
|
-
properties.__lastModified = { type: 'Date' };
|
|
1178
|
+
properties.__lastModified = { key: '__lastModified', type: 'Date'/* , required: true */ };
|
|
1146
1179
|
}
|
|
1147
1180
|
|
|
1148
1181
|
if (!properties.__lastModifiedBy) {
|
|
1149
|
-
properties.__lastModifiedBy = { type: '
|
|
1182
|
+
properties.__lastModifiedBy = { key: '__lastModifiedBy', type: 'string'/* , required: true */ };
|
|
1150
1183
|
}
|
|
1151
1184
|
|
|
1152
1185
|
if (!properties._deleted) {
|
|
1153
|
-
properties._deleted = { type: 'Date' };
|
|
1186
|
+
properties._deleted = { key: '_deleted', type: 'Date' };
|
|
1154
1187
|
}
|
|
1155
1188
|
|
|
1156
1189
|
if (!properties._deletedBy) {
|
|
1157
|
-
properties._deletedBy = { type: '
|
|
1190
|
+
properties._deletedBy = { key: '_deletedBy', type: 'string' };
|
|
1158
1191
|
}
|
|
1159
1192
|
|
|
1160
1193
|
return properties;
|
|
1161
1194
|
}
|
|
1162
1195
|
|
|
1163
|
-
private addArchiveMetadataToSchema(schema: any): any {
|
|
1196
|
+
/* private addArchiveMetadataToSchema(schema: any): any {
|
|
1164
1197
|
schema._originalId = { type: String, required: true, index: true, unique: true };
|
|
1165
1198
|
schema._archived = { type: Date, required: true };
|
|
1166
1199
|
|
|
1167
1200
|
return schema;
|
|
1201
|
+
} */
|
|
1202
|
+
|
|
1203
|
+
private addArchiveMetadataToProperties(
|
|
1204
|
+
properties: DyFM_DataProperties<T>
|
|
1205
|
+
): DyFM_DataProperties<T> {
|
|
1206
|
+
if (!properties._originalId) {
|
|
1207
|
+
properties._originalId = {
|
|
1208
|
+
key: '_originalId', type: 'string',
|
|
1209
|
+
required: true, index: true, unique: true,
|
|
1210
|
+
};
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
if (!properties._archived) {
|
|
1214
|
+
properties._archived = {
|
|
1215
|
+
key: '_archived', type: 'Date', required: true,
|
|
1216
|
+
};
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
return properties;
|
|
1168
1220
|
}
|
|
1169
1221
|
|
|
1170
1222
|
/**
|
|
@@ -1,11 +1,11 @@
|
|
|
1
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
2
|
import Axios from 'axios';
|
|
8
3
|
|
|
4
|
+
import { DyFM_Error, DyFM_HttpCallType, DyFM_HttpResponseType } from '@futdevpro/fsm-dynamo';
|
|
5
|
+
|
|
6
|
+
import { DyNTS_ApiCall_Params } from '../../_models/control-models/api-call-params.control-model';
|
|
7
|
+
import { DyNTS_ApiCallInput_Params, DyNTS_ApiService } from './api.service';
|
|
8
|
+
|
|
9
9
|
describe('DyNTS_ApiService', () => {
|
|
10
10
|
let callParams: DyNTS_ApiCall_Params;
|
|
11
11
|
let inputParams: DyNTS_ApiCallInput_Params;
|
|
@@ -14,10 +14,10 @@ describe('DyNTS_ApiService', () => {
|
|
|
14
14
|
callParams = {
|
|
15
15
|
baseUrl: 'http://example.com',
|
|
16
16
|
endPoint: '/api/test',
|
|
17
|
-
type:
|
|
17
|
+
type: DyFM_HttpCallType.get,
|
|
18
18
|
httpOptions: {
|
|
19
19
|
headers: {},
|
|
20
|
-
responseType:
|
|
20
|
+
responseType: DyFM_HttpResponseType.json,
|
|
21
21
|
},
|
|
22
22
|
name: 'Test API Call',
|
|
23
23
|
getFullResponse: false,
|
|
@@ -30,29 +30,33 @@ describe('DyNTS_ApiService', () => {
|
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
it('should make a GET request successfully', async () => {
|
|
33
|
-
callParams.type =
|
|
33
|
+
callParams.type = DyFM_HttpCallType.get;
|
|
34
34
|
const response = { data: { success: true } };
|
|
35
|
+
|
|
35
36
|
spyOn(Axios, 'create').and.returnValue({
|
|
36
37
|
get: jasmine.createSpy().and.returnValue(Promise.resolve(response)),
|
|
37
38
|
} as any);
|
|
38
39
|
|
|
39
40
|
const result = await DyNTS_ApiService.startApiCall(callParams, inputParams);
|
|
41
|
+
|
|
40
42
|
expect(result).toEqual(response.data);
|
|
41
43
|
});
|
|
42
44
|
|
|
43
45
|
it('should handle a POST request successfully', async () => {
|
|
44
|
-
callParams.type =
|
|
46
|
+
callParams.type = DyFM_HttpCallType.post;
|
|
45
47
|
const response = { data: { success: true } };
|
|
48
|
+
|
|
46
49
|
spyOn(Axios, 'create').and.returnValue({
|
|
47
50
|
post: jasmine.createSpy().and.returnValue(Promise.resolve(response)),
|
|
48
51
|
} as any);
|
|
49
52
|
|
|
50
53
|
const result = await DyNTS_ApiService.startApiCall(callParams, inputParams);
|
|
54
|
+
|
|
51
55
|
expect(result).toEqual(response.data);
|
|
52
56
|
});
|
|
53
57
|
|
|
54
58
|
it('should throw an error for unsupported HTTP method', async () => {
|
|
55
|
-
callParams.type = 'unsupported' as
|
|
59
|
+
callParams.type = 'unsupported' as DyFM_HttpCallType;
|
|
56
60
|
|
|
57
61
|
await expectAsync(DyNTS_ApiService.startApiCall(callParams, inputParams)).toBeRejectedWith(
|
|
58
62
|
jasmine.any(DyFM_Error)
|
|
@@ -63,6 +67,7 @@ describe('DyNTS_ApiService', () => {
|
|
|
63
67
|
const errorResponse = {
|
|
64
68
|
response: { data: { flag: 'DYNAMO', message: 'Error' } },
|
|
65
69
|
};
|
|
70
|
+
|
|
66
71
|
spyOn(Axios, 'create').and.returnValue({
|
|
67
72
|
get: jasmine.createSpy().and.returnValue(Promise.reject(errorResponse)),
|
|
68
73
|
} as any);
|
|
@@ -74,6 +79,7 @@ describe('DyNTS_ApiService', () => {
|
|
|
74
79
|
|
|
75
80
|
it('should handle DNS error', async () => {
|
|
76
81
|
const error = { code: 'ENOTFOUND' };
|
|
82
|
+
|
|
77
83
|
spyOn(Axios, 'create').and.returnValue({
|
|
78
84
|
get: jasmine.createSpy().and.returnValue(Promise.reject(error)),
|
|
79
85
|
} as any);
|
|
@@ -85,6 +91,7 @@ describe('DyNTS_ApiService', () => {
|
|
|
85
91
|
|
|
86
92
|
it('should handle connection refused error', async () => {
|
|
87
93
|
const error = { code: 'ECONNREFUSED' };
|
|
94
|
+
|
|
88
95
|
spyOn(Axios, 'create').and.returnValue({
|
|
89
96
|
get: jasmine.createSpy().and.returnValue(Promise.reject(error)),
|
|
90
97
|
} as any);
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
|
|
2
|
+
import * as Axios from 'axios';
|
|
3
|
+
|
|
2
4
|
import {
|
|
3
|
-
DyFM_AnyError, DyFM_Error, DyFM_Error_Settings,
|
|
5
|
+
DyFM_AnyError, DyFM_Error, DyFM_Error_Settings,
|
|
6
|
+
DyFM_HttpCallType, DyFM_HttpResponseType,
|
|
7
|
+
DyFM_Log
|
|
4
8
|
} from '@futdevpro/fsm-dynamo';
|
|
5
|
-
import * as Axios from 'axios';
|
|
6
9
|
|
|
7
10
|
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
8
|
-
import { DyNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
|
|
9
|
-
import { DyNTS_HttpResponseType } from '../../_enums/http/http-response-type.enum';
|
|
10
11
|
import {
|
|
11
12
|
DyNTS_ApiCall_Params
|
|
12
13
|
} from '../../_models/control-models/api-call-params.control-model';
|
|
@@ -75,7 +76,7 @@ export class DyNTS_ApiService {
|
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
switch (callParams.type) {
|
|
78
|
-
case
|
|
79
|
+
case DyFM_HttpCallType.get:
|
|
79
80
|
if (inputParams?.body) {
|
|
80
81
|
DyFM_Log.warn(`WARNING you cant send body in get calls (${callParams.name})`);
|
|
81
82
|
}
|
|
@@ -83,7 +84,7 @@ export class DyNTS_ApiService {
|
|
|
83
84
|
a = await this.get<T_Response>(axios, url, callParams);
|
|
84
85
|
break;
|
|
85
86
|
|
|
86
|
-
case
|
|
87
|
+
case DyFM_HttpCallType.delete:
|
|
87
88
|
if (inputParams?.body) {
|
|
88
89
|
DyFM_Log.warn('WARNING you cant send body in delete calls');
|
|
89
90
|
}
|
|
@@ -91,9 +92,9 @@ export class DyNTS_ApiService {
|
|
|
91
92
|
a = await this.delete<T_Response>(axios, url, callParams);
|
|
92
93
|
break;
|
|
93
94
|
|
|
94
|
-
case
|
|
95
|
-
case
|
|
96
|
-
case
|
|
95
|
+
case DyFM_HttpCallType.post:
|
|
96
|
+
case DyFM_HttpCallType.put:
|
|
97
|
+
case DyFM_HttpCallType.patch:
|
|
97
98
|
if (!inputParams?.body) {
|
|
98
99
|
if (!inputParams) {
|
|
99
100
|
inputParams = {};
|
|
@@ -109,7 +110,7 @@ export class DyNTS_ApiService {
|
|
|
109
110
|
throw new DyFM_Error({
|
|
110
111
|
...this._getDefaultErrorSettings(
|
|
111
112
|
'startApiCall',
|
|
112
|
-
new Error(
|
|
113
|
+
new Error(`unknown api call type: ${callParams.type}`)
|
|
113
114
|
),
|
|
114
115
|
errorCode: 'NTS-API-SAC0',
|
|
115
116
|
additionalContent: {
|
|
@@ -117,16 +118,15 @@ export class DyNTS_ApiService {
|
|
|
117
118
|
inputParams,
|
|
118
119
|
},
|
|
119
120
|
});
|
|
120
|
-
//DyFM_Log.error('DYNAMO-NTS ERROR: \n wrong api call type'/* , '\n\n', new Error() */);
|
|
121
|
-
break;
|
|
122
121
|
}
|
|
123
122
|
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
return a;
|
|
124
|
+
/* if (callParams.getFullResponse) {
|
|
125
|
+
return a as T_Response Axios.AxiosResponse;
|
|
126
126
|
|
|
127
127
|
} else {
|
|
128
128
|
return a as T_Response;
|
|
129
|
-
}
|
|
129
|
+
} */
|
|
130
130
|
} catch (error) {
|
|
131
131
|
this.handleError<T_Body>(callParams, error, inputParams);
|
|
132
132
|
}
|
|
@@ -176,7 +176,7 @@ export class DyNTS_ApiService {
|
|
|
176
176
|
DyFM_Log.error(`\ncallParams:`, callParams);
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
if (error && callParams?.httpOptions?.responseType ===
|
|
179
|
+
if (error && callParams?.httpOptions?.responseType === DyFM_HttpResponseType.text) {
|
|
180
180
|
error.error = JSON.parse(error?.error);
|
|
181
181
|
}
|
|
182
182
|
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
DyFM_DataModel_Params,
|
|
8
8
|
DyFM_Error,
|
|
9
9
|
DyFM_Error_Settings,
|
|
10
|
+
DyFM_global_settings,
|
|
10
11
|
DyFM_Log,
|
|
11
12
|
DyFM_Metadata
|
|
12
13
|
} from '@futdevpro/fsm-dynamo';
|
|
@@ -111,6 +112,9 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
111
112
|
const archiveModel: DyFM_DataModel_Params<any> = new DyFM_DataModel_Params<any>({
|
|
112
113
|
...dbModel,
|
|
113
114
|
dataName: DyNTS_getArchivedDBName(dbModel.dataName),
|
|
115
|
+
properties: {
|
|
116
|
+
...dbModel.properties,
|
|
117
|
+
},
|
|
114
118
|
});
|
|
115
119
|
|
|
116
120
|
dbModels.push(archiveModel);
|
|
@@ -136,7 +140,11 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
136
140
|
try {
|
|
137
141
|
this.instance.dbServiceCollection[dbModel.dataName] = new DyNTS_DBService(dbModel);
|
|
138
142
|
} catch (error) {
|
|
139
|
-
|
|
143
|
+
if (error instanceof DyFM_Error && !DyFM_global_settings.log_settings.highDetailedLogs) {
|
|
144
|
+
error.logSimple(`Failed to create DyNTS_DBService (${dbModel.dataName}).`);
|
|
145
|
+
} else {
|
|
146
|
+
DyFM_Log.error(`Failed to create DyNTS_DBService (${dbModel.dataName}).`, error);
|
|
147
|
+
}
|
|
140
148
|
|
|
141
149
|
throw new DyFM_Error({
|
|
142
150
|
...this.getDefaultErrorSettings('setDBServices', error, 'DyNTS_GlobalService'),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import { DyFM_HttpCallType } from '@futdevpro/fsm-dynamo';
|
|
3
|
+
|
|
3
4
|
import { DyNTS_Endpoint_Params } from '../../_models/control-models/endpoint-params.control-model';
|
|
4
5
|
import { DyNTS_Controller } from './controller.service';
|
|
5
6
|
|
|
@@ -8,7 +9,7 @@ class TestController extends DyNTS_Controller {
|
|
|
8
9
|
this.endpoints = [
|
|
9
10
|
new DyNTS_Endpoint_Params({
|
|
10
11
|
name: 'testEndpoint',
|
|
11
|
-
type:
|
|
12
|
+
type: DyFM_HttpCallType.get,
|
|
12
13
|
endpoint: '/test-endpoint',
|
|
13
14
|
preProcesses: [],
|
|
14
15
|
tasks: [
|
|
@@ -25,7 +25,7 @@ import { DyNTS_SingletonService } from '../base/singleton.service';
|
|
|
25
25
|
* this.endpoints = [
|
|
26
26
|
* new DyNTS_Endpoint_Params({
|
|
27
27
|
* name: 'getUserMatchStatistics',
|
|
28
|
-
* type:
|
|
28
|
+
* type: DyFM_HttpCallType.get,
|
|
29
29
|
* endpoint: '/get/user-match-statistics/:userId',
|
|
30
30
|
* preProcesses: [ this.authService.authenticate_tokenSelf ],
|
|
31
31
|
* tasks: [
|
|
@@ -56,7 +56,7 @@ export abstract class DyNTS_Controller extends DyNTS_SingletonService {
|
|
|
56
56
|
* this.endpoints = [
|
|
57
57
|
* new DyNTS_Endpoint_Params({
|
|
58
58
|
* name: 'getUserMatchStatistics',
|
|
59
|
-
* type:
|
|
59
|
+
* type: DyFM_HttpCallType.get,
|
|
60
60
|
* endpoint: '/get/user-match-statistics/:userId',
|
|
61
61
|
* preProcesses: [ this.authService.authenticate_tokenSelf ],
|
|
62
62
|
* tasks: [
|
|
@@ -104,7 +104,7 @@ export abstract class DyNTS_Controller extends DyNTS_SingletonService {
|
|
|
104
104
|
* this.endpoints = [
|
|
105
105
|
* new DyNTS_Endpoint_Params({
|
|
106
106
|
* name: 'getUserMatchStatistics',
|
|
107
|
-
* type:
|
|
107
|
+
* type: DyFM_HttpCallType.get,
|
|
108
108
|
* endpoint: '/get/user-match-statistics/:userId',
|
|
109
109
|
* preProcesses: [ this.authService.authenticate_tokenSelf ],
|
|
110
110
|
* tasks: [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import { DyFM_Error } from '@futdevpro/fsm-dynamo';
|
|
3
|
-
|
|
2
|
+
import { DyFM_Error, DyFM_HttpCallType } from '@futdevpro/fsm-dynamo';
|
|
3
|
+
|
|
4
4
|
import { DyNTS_RouteSecurity } from '../../_enums/route-security.enum';
|
|
5
5
|
import { DyNTS_Endpoint_Params } from '../../_models/control-models/endpoint-params.control-model';
|
|
6
6
|
import {
|
|
@@ -22,7 +22,7 @@ describe('DyNTS_RoutingModule', () => {
|
|
|
22
22
|
|
|
23
23
|
mockEndpoint = {
|
|
24
24
|
endpoint: '/test',
|
|
25
|
-
type:
|
|
25
|
+
type: DyFM_HttpCallType.get,
|
|
26
26
|
getFullExecution: jasmine.createSpy('getFullExecution'),
|
|
27
27
|
security: DyNTS_RouteSecurity.open,
|
|
28
28
|
} as any as DyNTS_Endpoint_Params;
|
|
@@ -65,12 +65,12 @@ describe('DyNTS_RoutingModule', () => {
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
xit('should throw error for invalid route type in open route', () => {
|
|
68
|
-
mockEndpoint.type = 'invalid' as
|
|
68
|
+
mockEndpoint.type = 'invalid' as DyFM_HttpCallType;
|
|
69
69
|
expect(() => routingModule['mountOpenRoute'](mockEndpoint)).toThrow(DyFM_Error);
|
|
70
70
|
});
|
|
71
71
|
|
|
72
72
|
xit('should throw error for invalid route type in secure route', () => {
|
|
73
|
-
mockEndpoint.type = 'invalid' as
|
|
73
|
+
mockEndpoint.type = 'invalid' as DyFM_HttpCallType;
|
|
74
74
|
expect(() => routingModule['mountSecureRoute'](mockEndpoint)).toThrow(DyFM_Error);
|
|
75
75
|
});
|
|
76
76
|
|