@futdevpro/nts-dynamo 1.11.37 → 1.11.38

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,87 +1180,276 @@ 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`,
1259
1218
  });
1260
1219
  }
1261
1220
  }
1262
1221
  }
1263
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
+ !(date instanceof Date) ||
1265
+ date.toString() === 'Invalid Date' ||
1266
+ (propertyParams.required &&
1267
+ (isNaN(date.getTime()) ||
1268
+ date.toString() === new Date(0).toString()))
1269
+ ) {
1270
+ throw new DyFM_Error({
1271
+ ...this._getDefaultErrorSettings(
1272
+ 'validateProperty',
1273
+ new Error(
1274
+ `validateProperty failed, "${propertyParams.key}" is not a valid date! ` +
1275
+ `(${this.dataParams.dataName})`
1276
+ )
1277
+ ),
1278
+
1279
+ status: 522,
1280
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP2`,
1281
+ userMessage: this.defaultValidationErrorUserMsg,
1282
+ __localStack: this.dataParams.stackLocation,
1283
+ additionalContent: {
1284
+ data: data,
1285
+ },
1286
+ });
1287
+ }
1288
+ break;
1289
+
1290
+ case DyFM_BasicProperty_Type.number:
1291
+ if (propertyParams.required && isNaN(propertyValue)) {
1292
+ throw new DyFM_Error({
1293
+ ...this._getDefaultErrorSettings(
1294
+ 'validateProperty',
1295
+ new Error(
1296
+ `validateProperty failed, "${propertyParams.key}" is not a valid number! ` +
1297
+ `(${this.dataParams.dataName})`
1298
+ )
1299
+ ),
1300
+
1301
+ status: 522,
1302
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP3`,
1303
+ userMessage: this.defaultValidationErrorUserMsg,
1304
+ __localStack: this.dataParams.stackLocation,
1305
+ additionalContent: {
1306
+ data: data,
1307
+ },
1308
+ });
1309
+ }
1310
+ break;
1311
+
1312
+ case DyFM_BasicProperty_Type.string:
1313
+ if (propertyParams.required && typeof propertyValue !== 'string') {
1314
+ throw new DyFM_Error({
1315
+ ...this._getDefaultErrorSettings(
1316
+ 'validateProperty',
1317
+ new Error(
1318
+ `validateProperty failed, "${propertyParams.key}" is not a valid string! ` +
1319
+ `(${this.dataParams.dataName})`
1320
+ )
1321
+ ),
1322
+
1323
+ status: 522,
1324
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP4`,
1325
+ userMessage: this.defaultValidationErrorUserMsg,
1326
+ __localStack: this.dataParams.stackLocation,
1327
+ additionalContent: {
1328
+ data: data,
1329
+ },
1330
+ });
1331
+ }
1332
+ break;
1333
+
1334
+ case DyFM_BasicProperty_Type.boolean:
1335
+ if (propertyParams.required && typeof propertyValue !== 'boolean') {
1336
+ throw new DyFM_Error({
1337
+ ...this._getDefaultErrorSettings(
1338
+ 'validateProperty',
1339
+ new Error(
1340
+ `validateProperty failed, "${propertyParams.key}" is not a valid boolean! ` +
1341
+ `(${this.dataParams.dataName})`
1342
+ )
1343
+ ),
1344
+
1345
+ status: 522,
1346
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP5`,
1347
+ userMessage: this.defaultValidationErrorUserMsg,
1348
+ __localStack: this.dataParams.stackLocation,
1349
+ });
1350
+ }
1351
+ break;
1352
+
1353
+ case DyFM_BasicProperty_Type.object:
1354
+ if (propertyParams.required && typeof propertyValue !== 'object') {
1355
+ throw new DyFM_Error({
1356
+ ...this._getDefaultErrorSettings(
1357
+ 'validateProperty',
1358
+ new Error(
1359
+ `validateProperty failed, "${propertyParams.key}" is not a valid object! ` +
1360
+ `(${this.dataParams.dataName})`
1361
+ )
1362
+ ),
1363
+
1364
+ status: 522,
1365
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VD6`,
1366
+ userMessage: this.defaultValidationErrorUserMsg,
1367
+ __localStack: this.dataParams.stackLocation,
1368
+ });
1369
+ }
1370
+
1371
+ if (propertyParams.subObjectParams) {
1372
+ this.validateDataByPropertyParams(propertyValue, propertyParams.subObjectParams, propertyParams);
1373
+ }
1374
+ break;
1375
+
1376
+ case DyFM_BasicProperty_Type.array:
1377
+ if (propertyParams.required && !Array.isArray(propertyValue)) {
1378
+ throw new DyFM_Error({
1379
+ ...this._getDefaultErrorSettings(
1380
+ 'validateProperty',
1381
+ new Error(
1382
+ `validateProperty failed, "${propertyParams.key}" is not a valid array! ` +
1383
+ `(${this.dataParams.dataName})`
1384
+ )
1385
+ ),
1386
+
1387
+ status: 522,
1388
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP6`,
1389
+ userMessage: this.defaultValidationErrorUserMsg,
1390
+ __localStack: this.dataParams.stackLocation,
1391
+ });
1392
+ }
1393
+
1394
+ if (propertyParams.subObjectParams) {
1395
+ propertyValue.forEach((item: any): void => {
1396
+ this.validateDataByPropertyParams(item, propertyParams.subObjectParams, propertyParams);
1397
+ });
1398
+ }
1399
+ break;
1400
+
1401
+ case DyFM_BasicProperty_Type.function:
1402
+ DyFM_Log.warn(
1403
+ 'validateProperty: function type is not supported yet! ' +
1404
+ '(it will be skipped, but you still can use it in additionalValidators)'
1405
+ );
1406
+ /* if (propertyParams.required && typeof propertyValue !== 'function') {
1407
+ throw new DyFM_Error({
1408
+ ...this._getDefaultErrorSettings(
1409
+ 'validateProperty',
1410
+ new Error(
1411
+ `validateProperty failed, "${propertyParams.key}" is not a valid function! ` +
1412
+ `(${this.dataParams.dataName})`
1413
+ )
1414
+ ),
1415
+
1416
+ status: 522,
1417
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP7`,
1418
+ userMessage: this.defaultValidationErrorUserMsg,
1419
+ __localStack: this.dataParams.stackLocation,
1420
+ });
1421
+ } */
1422
+ break;
1423
+
1424
+ default:
1425
+ throw new DyFM_Error({
1426
+ ...this._getDefaultErrorSettings(
1427
+ 'validateProperty',
1428
+ new Error(
1429
+ `validateProperty failed, "${propertyParams.key}" is not a valid property type! ` +
1430
+ `(type: ${propertyParams.type}, nonBasicType: ${propertyParams.nonBasicType}) ` +
1431
+ `(${this.dataParams.dataName})`
1432
+ )
1433
+ ),
1434
+
1435
+ status: 522,
1436
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-VP8`,
1437
+ userMessage: this.defaultValidationErrorUserMsg,
1438
+ __localStack: this.dataParams.stackLocation,
1439
+ });
1440
+ }
1441
+
1442
+ // call additional validators
1443
+ if (propertyParams.additionalValidators) {
1444
+ for (let j = 0; j < propertyParams.additionalValidators.length; j++) {
1445
+ propertyParams.additionalValidators[j](
1446
+ propertyValue,
1447
+ data
1448
+ );
1449
+ }
1450
+ }
1451
+ }
1452
+
1264
1453
  async searchData(query?: DyFM_SearchQuery<T>, dataList?: T[]): Promise<DyFM_SearchResult<T>> {
1265
1454
  try {
1266
1455
  const searchResult = await this.sortAndFilterDataList(query, dataList);
@@ -1906,9 +2095,9 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
1906
2095
  * setting up dependency dataHook by DynamoBEDataModelParams
1907
2096
  */
1908
2097
  private lookForDependencyDataSettings(): void {
1909
- const dependencyParams: DyFM_DataProperty_Params<any>[] =
2098
+ const dependencyParams: DyFM_DataProperty_Params<any, T>[] =
1910
2099
  Object.values(this.dataParams.properties).filter(
1911
- (modelParams: DyFM_DataProperty_Params<any>): boolean =>
2100
+ (modelParams: DyFM_DataProperty_Params<any, T>): boolean =>
1912
2101
  Boolean(modelParams.dependencyDataName)
1913
2102
  );
1914
2103
 
@@ -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;
1291
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;
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,27 @@ 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 = { key: '__created', type: DyFM_BasicProperty_Type.date/* , required: true */ };
1345
1403
  }
1346
1404
 
1347
1405
  if (!properties.__createdBy) {
1348
- properties.__createdBy = { key: '__createdBy', type: 'string'/* , required: true */ };
1406
+ properties.__createdBy = { key: '__createdBy', type: DyFM_BasicProperty_Type.string/* , required: true */ };
1349
1407
  }
1350
1408
 
1351
1409
  if (!properties.__lastModified) {
1352
- properties.__lastModified = { key: '__lastModified', type: 'Date'/* , required: true */ };
1410
+ properties.__lastModified = { key: '__lastModified', type: DyFM_BasicProperty_Type.date/* , required: true */ };
1353
1411
  }
1354
1412
 
1355
1413
  if (!properties.__lastModifiedBy) {
1356
- properties.__lastModifiedBy = { key: '__lastModifiedBy', type: 'string'/* , required: true */ };
1414
+ properties.__lastModifiedBy = { key: '__lastModifiedBy', type: DyFM_BasicProperty_Type.string/* , required: true */ };
1357
1415
  }
1358
1416
 
1359
1417
  if (!properties._deleted) {
1360
- properties._deleted = { key: '_deleted', type: 'Date' };
1418
+ properties._deleted = { key: '_deleted', type: DyFM_BasicProperty_Type.date };
1361
1419
  }
1362
1420
 
1363
1421
  if (!properties._deletedBy) {
1364
- properties._deletedBy = { key: '_deletedBy', type: 'string' };
1422
+ properties._deletedBy = { key: '_deletedBy', type: DyFM_BasicProperty_Type.string };
1365
1423
  }
1366
1424
 
1367
1425
  return properties;
@@ -1397,15 +1455,15 @@ export class DyNTS_DBService<T extends DyFM_Metadata> {
1397
1455
  * sets depDataKey
1398
1456
  */
1399
1457
  private lookForDependencyDataSettings(): void {
1400
- const dependencyParams: DyFM_DataProperty_Params<any>[] =
1458
+ const dependencyParams: DyFM_DataProperty_Params<any, T>[] =
1401
1459
  Object.values(this.dataParams.properties).filter(
1402
- (modelParams: DyFM_DataProperty_Params<any>): boolean =>
1460
+ (modelParams: DyFM_DataProperty_Params<any, T>): boolean =>
1403
1461
  Boolean(modelParams.dependencyDataName)
1404
1462
  );
1405
1463
 
1406
1464
  if (dependencyParams) {
1407
1465
  this.depKeys.push(...dependencyParams.map(
1408
- (dependencyParam: DyFM_DataProperty_Params<any>): string => dependencyParam.key
1466
+ (dependencyParam: DyFM_DataProperty_Params<any, T>): string => dependencyParam.key
1409
1467
  ));
1410
1468
  }
1411
1469
  }