@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.
@@ -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: DyFM_Data_Params<T>,
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
- Object.values(this.dataParams.properties).forEach(
1184
- (element: DyFM_DataProperty_Params<any>) => {
1185
- // basic required validations
1186
- if (
1187
- (
1188
- element.required ||
1189
- element.index
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
- status: 522,
1228
- errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD2`,
1229
- userMessage: this.defaultValidationErrorUserMsg,
1230
- __localStack: this.dataParams.stackLocation,
1231
- additionalContent: {
1232
- data: data,
1233
- },
1234
- });
1235
- }
1191
+ status: 522,
1192
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD0`,
1193
+ });
1194
+ }
1195
+ }
1196
+ }
1236
1197
 
1237
- // call additional validators
1238
- if (element.additionalValidators) {
1239
- for (let j = 0; j < element.additionalValidators.length; j++) {
1240
- element.additionalValidators[j](
1241
- data[element.key]
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('validateForSave', error),
1214
+ ...this._getDefaultErrorSettings('validateByPropertyParams', error),
1256
1215
 
1257
1216
  status: 522,
1258
- errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD0`,
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: string
1302
+ type: DyFM_BasicProperty_Type
1289
1303
  ): string | number | boolean | object | Function | Array<any> | Date {
1290
- switch (type.toLocaleLowerCase()) {
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 = { key: '__created', type: 'Date'/* , required: true */ };
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 = { key: '__createdBy', type: 'string'/* , required: true */ };
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 = { key: '__lastModified', type: 'Date'/* , required: true */ };
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 = { key: '__lastModifiedBy', type: 'string'/* , required: true */ };
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 = { key: '_deleted', type: 'Date' };
1426
+ properties._deleted = {
1427
+ key: '_deleted', type: DyFM_BasicProperty_Type.date,
1428
+ };
1361
1429
  }
1362
1430
 
1363
1431
  if (!properties._deletedBy) {
1364
- properties._deletedBy = { key: '_deletedBy', type: 'string' };
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: 'string',
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: 'Date', required: true,
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
  }