@futdevpro/nts-dynamo 1.11.37 → 1.11.39
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/_modules/open-ai/_services/oai-llm-chat.service-base.js +1 -1
- package/build/_modules/open-ai/_services/oai-llm-chat.service-base.js.map +1 -1
- package/build/_modules/open-ai/_services/oai-vector-data.service.d.ts +2 -2
- package/build/_modules/open-ai/_services/oai-vector-data.service.d.ts.map +1 -1
- package/build/_modules/open-ai/_services/oai-vector-data.service.js.map +1 -1
- package/build/_services/base/data.service.d.ts +5 -3
- package/build/_services/base/data.service.d.ts.map +1 -1
- package/build/_services/base/data.service.js +158 -30
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/db.service.d.ts.map +1 -1
- package/build/_services/base/db.service.js +83 -23
- package/build/_services/base/db.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +25 -15
- package/build/_services/server/app.server.js.map +1 -1
- package/package.json +3 -3
- package/src/_modules/open-ai/_services/oai-llm-chat.service-base.ts +1 -1
- package/src/_modules/open-ai/_services/oai-vector-data.service.ts +13 -13
- package/src/_services/base/data.service.ts +260 -70
- package/src/_services/base/db.service.ts +89 -18
- package/src/_services/server/app.server.ts +6 -4
|
@@ -58,8 +58,8 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
58
58
|
* Properties that are vectorized
|
|
59
59
|
* (properties that are marked with vectorizeFrom in other properties)
|
|
60
60
|
*/
|
|
61
|
-
readonly vectorizeProperties: DyFM_DataProperty_Params<any>[];
|
|
62
|
-
readonly vectorizedProperties: DyFM_DataProperty_Params<any>[];
|
|
61
|
+
readonly vectorizeProperties: DyFM_DataProperty_Params<any, T>[];
|
|
62
|
+
readonly vectorizedProperties: DyFM_DataProperty_Params<any, T>[];
|
|
63
63
|
/* readonly vectorizeProperties: { from: string, to: string }[]; */
|
|
64
64
|
|
|
65
65
|
debugLog: boolean = true;
|
|
@@ -88,15 +88,15 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
88
88
|
super(data, dataParams, issuer);
|
|
89
89
|
|
|
90
90
|
this.vectorizedProperties = Object.values(dataParams.properties).filter(
|
|
91
|
-
(property: DyFM_DataProperty_Params<any>) => property.vectorizedFrom
|
|
91
|
+
(property: DyFM_DataProperty_Params<any, T>) => property.vectorizedFrom
|
|
92
92
|
);
|
|
93
93
|
|
|
94
94
|
this.vectorizeProperties = Object.keys(dataParams.properties).filter(
|
|
95
95
|
(key: string): boolean => this.vectorizedProperties.some(
|
|
96
|
-
(property: DyFM_DataProperty_Params<any>) => property.vectorizedFrom.includes(key)
|
|
96
|
+
(property: DyFM_DataProperty_Params<any, T>) => property.vectorizedFrom.includes(key)
|
|
97
97
|
)
|
|
98
98
|
).map(
|
|
99
|
-
(key: string): DyFM_DataProperty_Params<any> => dataParams.properties[key] as DyFM_DataProperty_Params<any>
|
|
99
|
+
(key: string): DyFM_DataProperty_Params<any, T> => dataParams.properties[key] as DyFM_DataProperty_Params<any, T>
|
|
100
100
|
);
|
|
101
101
|
|
|
102
102
|
/* const vectorizePropertyKeys: string[] = Object.keys(dataParams.properties).filter(
|
|
@@ -134,7 +134,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
134
134
|
'vectorizedProperties is missing! ' +
|
|
135
135
|
`\nkeys with vectorizedFrom: ${Object.keys(dataParams.properties).filter(
|
|
136
136
|
(key: string): boolean => Boolean(
|
|
137
|
-
(dataParams.properties[key] as DyFM_DataProperty_Params<any>).vectorizedFrom
|
|
137
|
+
(dataParams.properties[key] as DyFM_DataProperty_Params<any, T>).vectorizedFrom
|
|
138
138
|
)
|
|
139
139
|
).map(key => `"${key}"`).join(', ')}`
|
|
140
140
|
);
|
|
@@ -145,7 +145,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
145
145
|
'vectorizeProperties is missing! ' +
|
|
146
146
|
`\nkeys with vectorizeFrom: ${Object.keys(dataParams.properties).filter(
|
|
147
147
|
(key: string): boolean => Boolean(
|
|
148
|
-
(dataParams.properties[key] as DyFM_DataProperty_Params<any>).vectorizedFrom
|
|
148
|
+
(dataParams.properties[key] as DyFM_DataProperty_Params<any, T>).vectorizedFrom
|
|
149
149
|
)
|
|
150
150
|
).map(key => `"${key}"`).join(', ')}`
|
|
151
151
|
);
|
|
@@ -166,7 +166,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
166
166
|
dataParams.properties[key].embeddingModel ??= model;
|
|
167
167
|
}); */
|
|
168
168
|
|
|
169
|
-
this.vectorizedProperties.forEach((property: DyFM_DataProperty_Params<any>): void => {
|
|
169
|
+
this.vectorizedProperties.forEach((property: DyFM_DataProperty_Params<any, T>): void => {
|
|
170
170
|
property.embeddingModel ??= model;
|
|
171
171
|
});
|
|
172
172
|
|
|
@@ -196,7 +196,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
196
196
|
|
|
197
197
|
await DyFM_Array.asyncForEachAllAtOnce(
|
|
198
198
|
this.vectorizedProperties,
|
|
199
|
-
async (property: DyFM_DataProperty_Params<any>) => {
|
|
199
|
+
async (property: DyFM_DataProperty_Params<any, T>) => {
|
|
200
200
|
await this.checkAndVectorizeSingleProperty(property, newData, existingData, forceVectorize);
|
|
201
201
|
}
|
|
202
202
|
);
|
|
@@ -210,7 +210,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
private async checkAndVectorizeSingleProperty(
|
|
213
|
-
vectorizedProperty: DyFM_DataProperty_Params<any>,
|
|
213
|
+
vectorizedProperty: DyFM_DataProperty_Params<any, T>,
|
|
214
214
|
newData: T,
|
|
215
215
|
existingData: T,
|
|
216
216
|
forceVectorize?: boolean
|
|
@@ -257,7 +257,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
private async getVectorizingDataForVectorizedProperty(
|
|
260
|
-
vectorizedProperty: DyFM_DataProperty_Params<any>,
|
|
260
|
+
vectorizedProperty: DyFM_DataProperty_Params<any, T>,
|
|
261
261
|
data: T,
|
|
262
262
|
/* alwaysVectorize?: boolean */
|
|
263
263
|
): Promise<string> {
|
|
@@ -361,7 +361,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
361
361
|
this.openAISettings
|
|
362
362
|
);
|
|
363
363
|
|
|
364
|
-
const property: DyFM_DataProperty_Params<any> = this.dataParams.properties[searchInKey];
|
|
364
|
+
const property: DyFM_DataProperty_Params<any, T> = this.dataParams.properties[searchInKey];
|
|
365
365
|
|
|
366
366
|
if (!property) {
|
|
367
367
|
throw new DyFM_Error({
|
|
@@ -449,7 +449,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
|
|
|
449
449
|
data = await super.saveData(data, dontSetToService);
|
|
450
450
|
|
|
451
451
|
if (this.swallowVectorizedProperties) {
|
|
452
|
-
this.vectorizedProperties.forEach((property: DyFM_DataProperty_Params<any>): void => {
|
|
452
|
+
this.vectorizedProperties.forEach((property: DyFM_DataProperty_Params<any, T>): void => {
|
|
453
453
|
delete data[property.key];
|
|
454
454
|
});
|
|
455
455
|
}
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
DyFM_AnyError,
|
|
4
4
|
DyFM_Array,
|
|
5
5
|
DyFM_BasicProperty_Type,
|
|
6
|
-
DyFM_Data_Params,
|
|
7
6
|
DyFM_DataModel_Params,
|
|
7
|
+
DyFM_DataProperties,
|
|
8
8
|
DyFM_DataProperty_Params,
|
|
9
9
|
DyFM_DBFilter,
|
|
10
10
|
DyFM_DBĐNestedPropertySort,
|
|
@@ -91,7 +91,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
91
91
|
* DB data prams will be used to connect to usable dbService on GlobalService
|
|
92
92
|
*/
|
|
93
93
|
/* dataParams: DyFM_DataModel_Params, */
|
|
94
|
-
public dataParams:
|
|
94
|
+
public dataParams: DyFM_DataModel_Params<T>,
|
|
95
95
|
/**
|
|
96
96
|
* Initial set for issuer to be able to follow the issuer's activity
|
|
97
97
|
*/
|
|
@@ -1180,83 +1180,273 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1180
1180
|
try {
|
|
1181
1181
|
data = this.ensureData(data);
|
|
1182
1182
|
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
) && (
|
|
1191
|
-
data[element.key] === null ||
|
|
1192
|
-
data[element.key] === undefined
|
|
1193
|
-
)
|
|
1194
|
-
) {
|
|
1195
|
-
throw new DyFM_Error({
|
|
1196
|
-
...this._getDefaultErrorSettings(
|
|
1197
|
-
'validateForSave',
|
|
1198
|
-
new Error(
|
|
1199
|
-
`validateForSave failed, "${element.key}" is missing! ` +
|
|
1200
|
-
`(index or required in "${this.dataParams.dataName}" dataParams) `
|
|
1201
|
-
)
|
|
1202
|
-
),
|
|
1203
|
-
|
|
1204
|
-
status: 522,
|
|
1205
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD1`,
|
|
1206
|
-
userMessage: this.defaultValidationErrorUserMsg,
|
|
1207
|
-
__localStack: this.dataParams.stackLocation,
|
|
1208
|
-
additionalContent: {
|
|
1209
|
-
data: data,
|
|
1210
|
-
},
|
|
1211
|
-
});
|
|
1212
|
-
}
|
|
1213
|
-
|
|
1214
|
-
// specific Date validation
|
|
1215
|
-
if (element.type === 'Date' &&
|
|
1216
|
-
!(new Date(data[element.key]) instanceof Date)
|
|
1217
|
-
) {
|
|
1218
|
-
throw new DyFM_Error({
|
|
1219
|
-
...this._getDefaultErrorSettings(
|
|
1220
|
-
'validateForSave',
|
|
1221
|
-
new Error(
|
|
1222
|
-
`validateForSave failed, "${element.key}" is not a date! ` +
|
|
1223
|
-
`(${this.dataParams.dataName})`
|
|
1224
|
-
)
|
|
1225
|
-
),
|
|
1183
|
+
await this.validateDataByPropertyParams(data, this.dataParams.properties);
|
|
1184
|
+
} catch (error) {
|
|
1185
|
+
if (error?.errorCode?.includes?.('DyNTS-DS0-VBP') || error?.errorCode?.includes?.('DyNTS-DS0-VP')) {
|
|
1186
|
+
throw error;
|
|
1187
|
+
} else {
|
|
1188
|
+
throw new DyFM_Error({
|
|
1189
|
+
...this._getDefaultErrorSettings('validateForSave', error),
|
|
1226
1190
|
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
},
|
|
1234
|
-
});
|
|
1235
|
-
}
|
|
1191
|
+
status: 522,
|
|
1192
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD0`,
|
|
1193
|
+
});
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1236
1197
|
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1198
|
+
private validateDataByPropertyParams(
|
|
1199
|
+
data: T,
|
|
1200
|
+
properties: DyFM_DataProperties<T>,
|
|
1201
|
+
isSubObjectOf?: DyFM_DataProperty_Params<any, T>
|
|
1202
|
+
): void {
|
|
1203
|
+
try {
|
|
1204
|
+
Object.values(properties).forEach(
|
|
1205
|
+
(propertyParams: DyFM_DataProperty_Params<any, T>) => {
|
|
1206
|
+
this.validateProperty(data, data[propertyParams.key], propertyParams, isSubObjectOf);
|
|
1245
1207
|
}
|
|
1246
1208
|
);
|
|
1247
1209
|
} catch (error) {
|
|
1248
|
-
if (
|
|
1249
|
-
`${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD1`,
|
|
1250
|
-
`${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD2`
|
|
1251
|
-
].includes(error?.errorCode)) {
|
|
1210
|
+
if (error?.errorCode?.includes?.('DyNTS-DS0-VP')) {
|
|
1252
1211
|
throw error;
|
|
1253
1212
|
} else {
|
|
1254
1213
|
throw new DyFM_Error({
|
|
1255
|
-
...this._getDefaultErrorSettings('
|
|
1214
|
+
...this._getDefaultErrorSettings('validateByPropertyParams', error),
|
|
1256
1215
|
|
|
1257
1216
|
status: 522,
|
|
1258
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-
|
|
1217
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP0`,
|
|
1218
|
+
});
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
private validateProperty(
|
|
1224
|
+
data: T,
|
|
1225
|
+
propertyValue: any,
|
|
1226
|
+
propertyParams: DyFM_DataProperty_Params<any, T>,
|
|
1227
|
+
isSubObjectOf?: DyFM_DataProperty_Params<any, T>
|
|
1228
|
+
): void {
|
|
1229
|
+
|
|
1230
|
+
// basic required validations
|
|
1231
|
+
if (
|
|
1232
|
+
(
|
|
1233
|
+
propertyParams.required ||
|
|
1234
|
+
propertyParams.index
|
|
1235
|
+
) && (
|
|
1236
|
+
propertyValue === null ||
|
|
1237
|
+
propertyValue === undefined
|
|
1238
|
+
)
|
|
1239
|
+
) {
|
|
1240
|
+
throw new DyFM_Error({
|
|
1241
|
+
...this._getDefaultErrorSettings(
|
|
1242
|
+
'validateProperty',
|
|
1243
|
+
new Error(
|
|
1244
|
+
`validateProperty failed, "${propertyParams.key}" is missing! ` +
|
|
1245
|
+
`(index or required in "${this.dataParams.dataName}" dataParams) `
|
|
1246
|
+
)
|
|
1247
|
+
),
|
|
1248
|
+
|
|
1249
|
+
status: 522,
|
|
1250
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP1`,
|
|
1251
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1252
|
+
__localStack: this.dataParams.stackLocation,
|
|
1253
|
+
additionalContent: {
|
|
1254
|
+
data: data,
|
|
1255
|
+
},
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
// specific Date validation
|
|
1260
|
+
switch (propertyParams.type) {
|
|
1261
|
+
case DyFM_BasicProperty_Type.date:
|
|
1262
|
+
const date = new Date(propertyValue);
|
|
1263
|
+
if (
|
|
1264
|
+
propertyParams.required && (
|
|
1265
|
+
!(date instanceof Date) ||
|
|
1266
|
+
date.toString() === 'Invalid Date' ||
|
|
1267
|
+
isNaN(date.getTime()) ||
|
|
1268
|
+
date.toString() === new Date(0).toString()
|
|
1269
|
+
)
|
|
1270
|
+
) {
|
|
1271
|
+
throw new DyFM_Error({
|
|
1272
|
+
...this._getDefaultErrorSettings(
|
|
1273
|
+
'validateProperty',
|
|
1274
|
+
new Error(
|
|
1275
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid date! ` +
|
|
1276
|
+
`(${this.dataParams.dataName})`
|
|
1277
|
+
)
|
|
1278
|
+
),
|
|
1279
|
+
|
|
1280
|
+
status: 522,
|
|
1281
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP2`,
|
|
1282
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1283
|
+
__localStack: this.dataParams.stackLocation,
|
|
1284
|
+
additionalContent: {
|
|
1285
|
+
data: data,
|
|
1286
|
+
},
|
|
1287
|
+
});
|
|
1288
|
+
}
|
|
1289
|
+
break;
|
|
1290
|
+
|
|
1291
|
+
case DyFM_BasicProperty_Type.number:
|
|
1292
|
+
if (propertyParams.required && isNaN(propertyValue)) {
|
|
1293
|
+
throw new DyFM_Error({
|
|
1294
|
+
...this._getDefaultErrorSettings(
|
|
1295
|
+
'validateProperty',
|
|
1296
|
+
new Error(
|
|
1297
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid number! ` +
|
|
1298
|
+
`(${this.dataParams.dataName})`
|
|
1299
|
+
)
|
|
1300
|
+
),
|
|
1301
|
+
|
|
1302
|
+
status: 522,
|
|
1303
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP3`,
|
|
1304
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1305
|
+
__localStack: this.dataParams.stackLocation,
|
|
1306
|
+
additionalContent: {
|
|
1307
|
+
data: data,
|
|
1308
|
+
},
|
|
1309
|
+
});
|
|
1310
|
+
}
|
|
1311
|
+
break;
|
|
1312
|
+
|
|
1313
|
+
case DyFM_BasicProperty_Type.string:
|
|
1314
|
+
if (propertyParams.required && typeof propertyValue !== 'string') {
|
|
1315
|
+
throw new DyFM_Error({
|
|
1316
|
+
...this._getDefaultErrorSettings(
|
|
1317
|
+
'validateProperty',
|
|
1318
|
+
new Error(
|
|
1319
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid string! ` +
|
|
1320
|
+
`(${this.dataParams.dataName})`
|
|
1321
|
+
)
|
|
1322
|
+
),
|
|
1323
|
+
|
|
1324
|
+
status: 522,
|
|
1325
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP4`,
|
|
1326
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1327
|
+
__localStack: this.dataParams.stackLocation,
|
|
1328
|
+
additionalContent: {
|
|
1329
|
+
data: data,
|
|
1330
|
+
},
|
|
1331
|
+
});
|
|
1332
|
+
}
|
|
1333
|
+
break;
|
|
1334
|
+
|
|
1335
|
+
case DyFM_BasicProperty_Type.boolean:
|
|
1336
|
+
if (propertyParams.required && typeof propertyValue !== 'boolean') {
|
|
1337
|
+
throw new DyFM_Error({
|
|
1338
|
+
...this._getDefaultErrorSettings(
|
|
1339
|
+
'validateProperty',
|
|
1340
|
+
new Error(
|
|
1341
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid boolean! ` +
|
|
1342
|
+
`(${this.dataParams.dataName})`
|
|
1343
|
+
)
|
|
1344
|
+
),
|
|
1345
|
+
|
|
1346
|
+
status: 522,
|
|
1347
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP5`,
|
|
1348
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1349
|
+
__localStack: this.dataParams.stackLocation,
|
|
1350
|
+
});
|
|
1351
|
+
}
|
|
1352
|
+
break;
|
|
1353
|
+
|
|
1354
|
+
case DyFM_BasicProperty_Type.object:
|
|
1355
|
+
if (propertyParams.required && typeof propertyValue !== 'object') {
|
|
1356
|
+
throw new DyFM_Error({
|
|
1357
|
+
...this._getDefaultErrorSettings(
|
|
1358
|
+
'validateProperty',
|
|
1359
|
+
new Error(
|
|
1360
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid object! ` +
|
|
1361
|
+
`(${this.dataParams.dataName})`
|
|
1362
|
+
)
|
|
1363
|
+
),
|
|
1364
|
+
|
|
1365
|
+
status: 522,
|
|
1366
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD6`,
|
|
1367
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1368
|
+
__localStack: this.dataParams.stackLocation,
|
|
1369
|
+
});
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
if (propertyParams.subObjectParams) {
|
|
1373
|
+
this.validateDataByPropertyParams(propertyValue, propertyParams.subObjectParams, propertyParams);
|
|
1374
|
+
}
|
|
1375
|
+
break;
|
|
1376
|
+
|
|
1377
|
+
case DyFM_BasicProperty_Type.array:
|
|
1378
|
+
if (propertyParams.required && !Array.isArray(propertyValue)) {
|
|
1379
|
+
throw new DyFM_Error({
|
|
1380
|
+
...this._getDefaultErrorSettings(
|
|
1381
|
+
'validateProperty',
|
|
1382
|
+
new Error(
|
|
1383
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid array! ` +
|
|
1384
|
+
`(${this.dataParams.dataName})`
|
|
1385
|
+
)
|
|
1386
|
+
),
|
|
1387
|
+
|
|
1388
|
+
status: 522,
|
|
1389
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP7`,
|
|
1390
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1391
|
+
__localStack: this.dataParams.stackLocation,
|
|
1392
|
+
});
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
if (propertyParams.subObjectParams) {
|
|
1396
|
+
propertyValue.forEach((item: any): void => {
|
|
1397
|
+
this.validateDataByPropertyParams(item, propertyParams.subObjectParams, propertyParams);
|
|
1398
|
+
});
|
|
1399
|
+
}
|
|
1400
|
+
break;
|
|
1401
|
+
|
|
1402
|
+
case DyFM_BasicProperty_Type.function:
|
|
1403
|
+
DyFM_Log.warn(
|
|
1404
|
+
'validateProperty: function type is not supported yet! ' +
|
|
1405
|
+
'(it will be skipped, but you still can use it in additionalValidators)'
|
|
1406
|
+
);
|
|
1407
|
+
/* if (propertyParams.required && typeof propertyValue !== 'function') {
|
|
1408
|
+
throw new DyFM_Error({
|
|
1409
|
+
...this._getDefaultErrorSettings(
|
|
1410
|
+
'validateProperty',
|
|
1411
|
+
new Error(
|
|
1412
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid function! ` +
|
|
1413
|
+
`(${this.dataParams.dataName})`
|
|
1414
|
+
)
|
|
1415
|
+
),
|
|
1416
|
+
|
|
1417
|
+
status: 522,
|
|
1418
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP7`,
|
|
1419
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1420
|
+
__localStack: this.dataParams.stackLocation,
|
|
1421
|
+
});
|
|
1422
|
+
} */
|
|
1423
|
+
break;
|
|
1424
|
+
|
|
1425
|
+
default:
|
|
1426
|
+
throw new DyFM_Error({
|
|
1427
|
+
...this._getDefaultErrorSettings(
|
|
1428
|
+
'validateProperty',
|
|
1429
|
+
new Error(
|
|
1430
|
+
`validateProperty failed, "${propertyParams.key}" is not a valid property type! ` +
|
|
1431
|
+
`(type: ${propertyParams.type}, nonBasicType: ${propertyParams.nonBasicType}) ` +
|
|
1432
|
+
`(${this.dataParams.dataName})`
|
|
1433
|
+
)
|
|
1434
|
+
),
|
|
1435
|
+
|
|
1436
|
+
status: 522,
|
|
1437
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP8`,
|
|
1438
|
+
userMessage: this.defaultValidationErrorUserMsg,
|
|
1439
|
+
__localStack: this.dataParams.stackLocation,
|
|
1259
1440
|
});
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
// call additional validators
|
|
1444
|
+
if (propertyParams.additionalValidators) {
|
|
1445
|
+
for (let j = 0; j < propertyParams.additionalValidators.length; j++) {
|
|
1446
|
+
propertyParams.additionalValidators[j](
|
|
1447
|
+
propertyValue,
|
|
1448
|
+
data
|
|
1449
|
+
);
|
|
1260
1450
|
}
|
|
1261
1451
|
}
|
|
1262
1452
|
}
|
|
@@ -1906,9 +2096,9 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
1906
2096
|
* setting up dependency dataHook by DynamoBEDataModelParams
|
|
1907
2097
|
*/
|
|
1908
2098
|
private lookForDependencyDataSettings(): void {
|
|
1909
|
-
const dependencyParams: DyFM_DataProperty_Params<any>[] =
|
|
2099
|
+
const dependencyParams: DyFM_DataProperty_Params<any, T>[] =
|
|
1910
2100
|
Object.values(this.dataParams.properties).filter(
|
|
1911
|
-
(modelParams: DyFM_DataProperty_Params<any>): boolean =>
|
|
2101
|
+
(modelParams: DyFM_DataProperty_Params<any, T>): boolean =>
|
|
1912
2102
|
Boolean(modelParams.dependencyDataName)
|
|
1913
2103
|
);
|
|
1914
2104
|
|
|
@@ -4,6 +4,7 @@ import { Schema } from 'mongoose';
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
DyFM_AnyError,
|
|
7
|
+
DyFM_BasicProperty_Type,
|
|
7
8
|
DyFM_DataModel_Params,
|
|
8
9
|
DyFM_DataProperties,
|
|
9
10
|
DyFM_DataProperty_Params,
|
|
@@ -11,7 +12,8 @@ import {
|
|
|
11
12
|
DyFM_Error,
|
|
12
13
|
DyFM_Error_Settings, DyFM_ErrorLevel,
|
|
13
14
|
DyFM_Log,
|
|
14
|
-
DyFM_Metadata
|
|
15
|
+
DyFM_Metadata,
|
|
16
|
+
DyFM_Object
|
|
15
17
|
} from '@futdevpro/fsm-dynamo';
|
|
16
18
|
import { DyNTS_archiveSuffix } from '../../_collections/archive.util';
|
|
17
19
|
import { DyNTS_DBUpdate } from '../../_models/types/db-update.type';
|
|
@@ -51,6 +53,18 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
51
53
|
);
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
if (!this.dataParams.constructed?.()) {
|
|
57
|
+
throw new DyFM_Error({
|
|
58
|
+
error: new Error(
|
|
59
|
+
`DataModelParams is not constructed properly! (${this.dataParams.dataName}) ` +
|
|
60
|
+
`Use the DyFM_DataModel_Params.constructor to construct it properly! (NTS DB)`
|
|
61
|
+
),
|
|
62
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DBS-C01`,
|
|
63
|
+
additionalContent: { dataParams: this.dataParams },
|
|
64
|
+
__localStack: this.dataParams.stackLocation,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
54
68
|
try {
|
|
55
69
|
this.dataModel = mongoose.model(this.dataParams.dataName, this.getSchema());
|
|
56
70
|
} catch (error) {
|
|
@@ -644,7 +658,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
644
658
|
}
|
|
645
659
|
|
|
646
660
|
Object.values(this.dataParams.properties).forEach(
|
|
647
|
-
(modelParam: DyFM_DataProperty_Params<any>): void => {
|
|
661
|
+
(modelParam: DyFM_DataProperty_Params<any, T>): void => {
|
|
648
662
|
if (
|
|
649
663
|
(filterBy[modelParam.key] !== null && filterBy[modelParam.key] !== undefined) ||
|
|
650
664
|
filterBy[modelParam.key + 'Range']
|
|
@@ -1215,7 +1229,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1215
1229
|
properties = this.dataParams.properties;
|
|
1216
1230
|
} */
|
|
1217
1231
|
|
|
1218
|
-
Object.values(properties).forEach((property: DyFM_DataProperty_Params<any>): void => {
|
|
1232
|
+
Object.values(properties).forEach((property: DyFM_DataProperty_Params<any, T>): void => {
|
|
1219
1233
|
if (!property) {
|
|
1220
1234
|
DyFM_Log.warn(`property is undefined on ${this.dataParams.dataName} (NTS DB)`);
|
|
1221
1235
|
|
|
@@ -1239,7 +1253,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1239
1253
|
});
|
|
1240
1254
|
}
|
|
1241
1255
|
|
|
1242
|
-
const beType = this.getBEType(property.type);
|
|
1256
|
+
const beType = this.getBEType(property.type as DyFM_BasicProperty_Type);
|
|
1243
1257
|
|
|
1244
1258
|
/* TODO if (beType === Array && property.archiveable && !property.archiveListAfter) {
|
|
1245
1259
|
property.archiveListAfter = DyNTS_global_settings.archiveListAfter;
|
|
@@ -1285,24 +1299,68 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1285
1299
|
}
|
|
1286
1300
|
|
|
1287
1301
|
private getBEType(
|
|
1288
|
-
type:
|
|
1302
|
+
type: DyFM_BasicProperty_Type
|
|
1289
1303
|
): string | number | boolean | object | Function | Array<any> | Date {
|
|
1290
|
-
switch (type
|
|
1304
|
+
switch (type) {
|
|
1305
|
+
case DyFM_BasicProperty_Type.string:
|
|
1306
|
+
return String;
|
|
1307
|
+
|
|
1308
|
+
case DyFM_BasicProperty_Type.number:
|
|
1309
|
+
return Number;
|
|
1310
|
+
|
|
1311
|
+
case DyFM_BasicProperty_Type.boolean:
|
|
1312
|
+
return Boolean;
|
|
1313
|
+
|
|
1314
|
+
case DyFM_BasicProperty_Type.date:
|
|
1315
|
+
return Date;
|
|
1316
|
+
|
|
1317
|
+
case DyFM_BasicProperty_Type.object:
|
|
1318
|
+
return Object;
|
|
1319
|
+
|
|
1320
|
+
case DyFM_BasicProperty_Type.array:
|
|
1321
|
+
return Array;
|
|
1322
|
+
|
|
1323
|
+
case DyFM_BasicProperty_Type.function:
|
|
1324
|
+
return Function;
|
|
1291
1325
|
|
|
1326
|
+
default:
|
|
1327
|
+
DyFM_Log.H_info('wtf', DyFM_Object.cleanObject(this.dataParams));
|
|
1328
|
+
|
|
1329
|
+
throw new DyFM_Error({
|
|
1330
|
+
error: new Error(
|
|
1331
|
+
`Invalid property type: ${type} (${this.dataParams.dataName})` +
|
|
1332
|
+
(this.dataParams.constructed?.() ? '' : ('\nThe dataParams is not constructed properly! \n' +
|
|
1333
|
+
'Use the DyFM_DataModel_Params.constructor to construct it properly!'))
|
|
1334
|
+
),
|
|
1335
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DBS-GTP0`,
|
|
1336
|
+
additionalContent: { type: type, dataParams: this.dataParams },
|
|
1337
|
+
__localStack: this.dataParams.stackLocation,
|
|
1338
|
+
});
|
|
1339
|
+
}
|
|
1340
|
+
/* switch (type.toLocaleLowerCase()) {
|
|
1341
|
+
case DyFM_BasicProperty_Type.string:
|
|
1292
1342
|
case 'string':
|
|
1293
1343
|
return String;
|
|
1294
1344
|
|
|
1345
|
+
case DyFM_BasicProperty_Type.number:
|
|
1295
1346
|
case 'number':
|
|
1296
1347
|
return Number;
|
|
1297
1348
|
|
|
1349
|
+
case DyFM_BasicProperty_Type.boolean:
|
|
1298
1350
|
case 'boolean':
|
|
1299
1351
|
return Boolean;
|
|
1300
1352
|
|
|
1353
|
+
case DyFM_BasicProperty_Type.date:
|
|
1301
1354
|
case 'date':
|
|
1302
1355
|
return Date;
|
|
1303
1356
|
|
|
1357
|
+
case DyFM_BasicProperty_Type.object:
|
|
1304
1358
|
case 'object':
|
|
1305
1359
|
return Object;
|
|
1360
|
+
|
|
1361
|
+
case DyFM_BasicProperty_Type.array:
|
|
1362
|
+
case 'array':
|
|
1363
|
+
return Array;
|
|
1306
1364
|
|
|
1307
1365
|
default:
|
|
1308
1366
|
if (type.includes('[]') || type.includes('array')) {
|
|
@@ -1312,7 +1370,7 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1312
1370
|
} else {
|
|
1313
1371
|
return Object;
|
|
1314
1372
|
}
|
|
1315
|
-
}
|
|
1373
|
+
} */
|
|
1316
1374
|
}
|
|
1317
1375
|
|
|
1318
1376
|
/**
|
|
@@ -1341,27 +1399,39 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1341
1399
|
// TOD: ezek a kikommentelt "required: true"-k kellenek, csak félő, hogy gondokat okoznak a
|
|
1342
1400
|
// jelenlegi rendszerekben, ezért akkor kell majd visszarakni, ha lesz tesztelői ÉS fejlesztői kapacitás rá
|
|
1343
1401
|
if (!properties.__created) {
|
|
1344
|
-
properties.__created = {
|
|
1402
|
+
properties.__created = {
|
|
1403
|
+
key: '__created', type: DyFM_BasicProperty_Type.date/* , required: true */,
|
|
1404
|
+
};
|
|
1345
1405
|
}
|
|
1346
1406
|
|
|
1347
1407
|
if (!properties.__createdBy) {
|
|
1348
|
-
properties.__createdBy = {
|
|
1408
|
+
properties.__createdBy = {
|
|
1409
|
+
key: '__createdBy', type: DyFM_BasicProperty_Type.string/* , required: true */,
|
|
1410
|
+
};
|
|
1349
1411
|
}
|
|
1350
1412
|
|
|
1351
1413
|
if (!properties.__lastModified) {
|
|
1352
|
-
properties.__lastModified = {
|
|
1414
|
+
properties.__lastModified = {
|
|
1415
|
+
key: '__lastModified', type: DyFM_BasicProperty_Type.date/* , required: true */,
|
|
1416
|
+
};
|
|
1353
1417
|
}
|
|
1354
1418
|
|
|
1355
1419
|
if (!properties.__lastModifiedBy) {
|
|
1356
|
-
properties.__lastModifiedBy = {
|
|
1420
|
+
properties.__lastModifiedBy = {
|
|
1421
|
+
key: '__lastModifiedBy', type: DyFM_BasicProperty_Type.string/* , required: true */,
|
|
1422
|
+
};
|
|
1357
1423
|
}
|
|
1358
1424
|
|
|
1359
1425
|
if (!properties._deleted) {
|
|
1360
|
-
properties._deleted = {
|
|
1426
|
+
properties._deleted = {
|
|
1427
|
+
key: '_deleted', type: DyFM_BasicProperty_Type.date,
|
|
1428
|
+
};
|
|
1361
1429
|
}
|
|
1362
1430
|
|
|
1363
1431
|
if (!properties._deletedBy) {
|
|
1364
|
-
properties._deletedBy = {
|
|
1432
|
+
properties._deletedBy = {
|
|
1433
|
+
key: '_deletedBy', type: DyFM_BasicProperty_Type.string,
|
|
1434
|
+
};
|
|
1365
1435
|
}
|
|
1366
1436
|
|
|
1367
1437
|
return properties;
|
|
@@ -1379,14 +1449,15 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1379
1449
|
): DyFM_DataProperties<T> {
|
|
1380
1450
|
if (!properties._originalId) {
|
|
1381
1451
|
properties._originalId = {
|
|
1382
|
-
key: '_originalId', type:
|
|
1452
|
+
key: '_originalId', type: DyFM_BasicProperty_Type.string,
|
|
1383
1453
|
required: true, index: true, unique: true,
|
|
1384
1454
|
};
|
|
1385
1455
|
}
|
|
1386
1456
|
|
|
1387
1457
|
if (!properties._archived) {
|
|
1388
1458
|
properties._archived = {
|
|
1389
|
-
key: '_archived', type:
|
|
1459
|
+
key: '_archived', type: DyFM_BasicProperty_Type.date,
|
|
1460
|
+
required: true,
|
|
1390
1461
|
};
|
|
1391
1462
|
}
|
|
1392
1463
|
|
|
@@ -1397,15 +1468,15 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
|
|
|
1397
1468
|
* sets depDataKey
|
|
1398
1469
|
*/
|
|
1399
1470
|
private lookForDependencyDataSettings(): void {
|
|
1400
|
-
const dependencyParams: DyFM_DataProperty_Params<any>[] =
|
|
1471
|
+
const dependencyParams: DyFM_DataProperty_Params<any, T>[] =
|
|
1401
1472
|
Object.values(this.dataParams.properties).filter(
|
|
1402
|
-
(modelParams: DyFM_DataProperty_Params<any>): boolean =>
|
|
1473
|
+
(modelParams: DyFM_DataProperty_Params<any, T>): boolean =>
|
|
1403
1474
|
Boolean(modelParams.dependencyDataName)
|
|
1404
1475
|
);
|
|
1405
1476
|
|
|
1406
1477
|
if (dependencyParams) {
|
|
1407
1478
|
this.depKeys.push(...dependencyParams.map(
|
|
1408
|
-
(dependencyParam: DyFM_DataProperty_Params<any>): string => dependencyParam.key
|
|
1479
|
+
(dependencyParam: DyFM_DataProperty_Params<any, T>): string => dependencyParam.key
|
|
1409
1480
|
));
|
|
1410
1481
|
}
|
|
1411
1482
|
}
|