@izara_project/izara-core-library-service-schemas 1.0.82 → 1.0.83

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@izara_project/izara-core-library-service-schemas",
3
- "version": "1.0.82",
3
+ "version": "1.0.83",
4
4
  "description": "Schemas for the service and objects it controls",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -29,7 +29,7 @@
29
29
  "@izara_project/izara-core-library-lambda": "^1.0.4",
30
30
  "@izara_project/izara-core-library-logger": "^1.0.7",
31
31
  "@izara_project/izara-shared-core": "^1.0.2",
32
- "@izara_project/izara-shared-service-schemas": "^1.0.25",
32
+ "@izara_project/izara-shared-service-schemas": "^1.0.26",
33
33
  "glob": "^11.0.3",
34
34
  "lodash": "^4.17.21",
35
35
  "object-hash": "^3.0.0",
@@ -242,8 +242,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
242
242
  uploadObjectToS3(
243
243
  _izContext,
244
244
  UPLOAD_PATH_S3.lambdaFunctions(_izContext, process.env.iz_serviceTag),
245
- lambdaFunctions,
246
-
245
+ lambdaFunctions
247
246
  )
248
247
  );
249
248
  }
@@ -253,8 +252,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
253
252
  uploadObjectToS3(
254
253
  _izContext,
255
254
  UPLOAD_PATH_S3.serviceName(_izContext, process.env.iz_serviceTag),
256
- { serviceName: process.env.iz_serviceName },
257
-
255
+ { serviceName: process.env.iz_serviceName }
258
256
  )
259
257
  );
260
258
 
@@ -272,8 +270,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
272
270
  objectType: objSchema.objectType
273
271
  }
274
272
  ),
275
- objSchema,
276
-
273
+ objSchema
277
274
  )
278
275
  );
279
276
 
@@ -290,8 +287,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
290
287
  objectType: createFieldSchema.objectType
291
288
  }
292
289
  ),
293
- createFieldSchema,
294
-
290
+ createFieldSchema
295
291
  )
296
292
  );
297
293
 
@@ -310,8 +306,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
310
306
  objectType: createFieldSchema.objectType
311
307
  }
312
308
  ),
313
- updateFieldSchema,
314
-
309
+ updateFieldSchema
315
310
  )
316
311
  );
317
312
 
@@ -329,8 +324,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
329
324
  objectType: combineFieldNamesObjectSchema.objectType
330
325
  }
331
326
  ),
332
- combineFieldNamesObjectSchema,
333
-
327
+ combineFieldNamesObjectSchema
334
328
  )
335
329
  );
336
330
 
@@ -340,8 +334,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
340
334
  uploadObjectToS3(
341
335
  _izContext,
342
336
  UPLOAD_PATH_S3.getEndpointPerObjectType(_izContext, { objectType: objSchema.objectType, serviceTag: process.env.iz_serviceTag }),
343
- apiLink,
344
-
337
+ apiLink
345
338
  )
346
339
  )
347
340
 
@@ -349,8 +342,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
349
342
  uploadObjectToS3(
350
343
  _izContext,
351
344
  UPLOAD_PATH_S3.getEndpointPerService(process.env.iz_serviceTag),
352
- apiLink,
353
-
345
+ apiLink
354
346
  )
355
347
  )
356
348
 
@@ -368,8 +360,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
368
360
  serviceTag: process.env.iz_serviceTag
369
361
  }
370
362
  ),
371
- existsRefObjectRel,
372
-
363
+ existsRefObjectRel
373
364
  )
374
365
  )
375
366
  } else {
@@ -388,8 +379,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
388
379
  serviceTag: process.env.iz_serviceTag
389
380
  }
390
381
  ),
391
- await refRelationshipPerObjectSchema(_izContext, objSchema),
392
-
382
+ await refRelationshipPerObjectSchema(_izContext, objSchema)
393
383
  )
394
384
  )
395
385
  }
@@ -402,8 +392,7 @@ async function uploadObjectSchemaByUseCase(_izContext, bucketName) {
402
392
  uploadObjectToS3(
403
393
  _izContext,
404
394
  UPLOAD_PATH_S3.objectListAll(_izContext, process.env.iz_serviceTag),
405
- foundedObjectTypes,
406
-
395
+ foundedObjectTypes
407
396
  )
408
397
  );
409
398
 
package/src/Utils.js CHANGED
@@ -228,6 +228,10 @@ function validateBasicObjectSchema(_izContext, objectSchema) {
228
228
  if (objectSchema.fieldNames[identifierFieldName]?.canUpdate === true) {
229
229
  errors.push(`${objectType}.fieldNames.${identifierFieldName}: canUpdate cannot be true because this fieldName is identifier`);
230
230
  }
231
+
232
+ if (objectSchema.fieldNames[identifierFieldName]?.userCanUpdate === true) {
233
+ errors.push(`${objectType}.fieldNames.${identifierFieldName}: userCanUpdate cannot be true because this fieldName is identifier`);
234
+ }
231
235
  }
232
236
 
233
237
  errors.push(...validateFieldNamesWithStorageResources(_izContext, objectSchema))
@@ -20,7 +20,7 @@ along with this program.If not, see < http://www.gnu.org/licenses/>.
20
20
 
21
21
  const readYamlFile = require('read-yaml-file');
22
22
  const lodash = require('lodash')
23
- const { inMemoryCacheLib, NoRetryError } = require('@izara_project/izara-core-library-core');
23
+ const { inMemoryCacheLib, NoRetryError, consts } = require('@izara_project/izara-core-library-core');
24
24
  const Logger = require('@izara_project/izara-core-library-logger');
25
25
  const uploadUseCase = require('./libs/UploadUseCase')
26
26
 
@@ -89,7 +89,7 @@ async function generateValidatorSchemaTreePerFieldName(_izContext, fieldName, fi
89
89
  };
90
90
 
91
91
 
92
- if (fieldNameSetting.fromServiceNameTag && fieldNameSetting.fromObjectType) {
92
+ if (fieldNameSetting.fromObjType) {
93
93
 
94
94
  Object.assign(
95
95
  validatorTree[fieldName],
@@ -102,10 +102,7 @@ async function generateValidatorSchemaTreePerFieldName(_izContext, fieldName, fi
102
102
 
103
103
  let childObjectSchema = await getObjSchemaS3WithHierarchy(
104
104
  _izContext,
105
- {
106
- objectType: fieldNameSetting.fromObjectType,
107
- serviceTag: fieldNameSetting.fromServiceNameTag
108
- }
105
+ fieldNameSetting.fromObjType
109
106
  );
110
107
 
111
108
  if (!childObjectSchema) {
@@ -466,7 +463,7 @@ async function generateValidatorSchemaForCreate(_izContext, objType, settings =
466
463
  // ------- create return validatorSchema -------
467
464
  let validatorSchemaForCreate = {
468
465
  type: "object",
469
- required: ["fieldNames", "objectType"],
466
+ required: ["fieldNames"],
470
467
  properties: {
471
468
  fieldNames: {
472
469
  additionalProperties: false,
@@ -476,10 +473,6 @@ async function generateValidatorSchemaForCreate(_izContext, objType, settings =
476
473
  ...allValidatorSchemaFieldNames
477
474
  }
478
475
  },
479
- objectType: {
480
- type: "string",
481
- pattern: "^[a-zA-Z0-9_-]+$"
482
- },
483
476
  additionalParams: {
484
477
  type: "object"
485
478
  }
@@ -525,15 +518,28 @@ async function generateValidatorSchemaForUpdate(_izContext, objType, settings =
525
518
  let canUpdateProperties = {};
526
519
  let usedFieldNames = identifiersFieldNames;
527
520
  let versionedDataFieldNames = [];
521
+
528
522
  // collect canUpdate fieldName (all fieldName have CanUpdate setting = true)
529
523
  for (let [fieldName, fieldNameSetting] of Object.entries(objectSchemas.fieldNames)) {
530
- if (fieldNameSetting.canUpdate === true || fieldNameSetting.canUpdate === undefined) {
531
- canUpdateFieldNames.push(fieldName);
532
- canUpdateProperties[fieldName] = {
533
- type: fieldNameSetting.type,
524
+ if (settings.handler === "ApiGateway") {
525
+ if (fieldNameSetting.userCanUpdate === true) {
526
+ canUpdateFieldNames.push(fieldName);
527
+ canUpdateProperties[fieldName] = {
528
+ type: fieldNameSetting.type
529
+ }
530
+ if (fieldNameSetting.hasOwnProperty("versionedDataLabel")) {
531
+ versionedDataFieldNames.push(fieldName)
532
+ }
534
533
  }
535
- if (fieldNameSetting.hasOwnProperty("versionedDataLabel")) {
536
- versionedDataFieldNames.push(fieldName)
534
+ } else {
535
+ if (fieldNameSetting.canUpdate === true || fieldNameSetting.canUpdate === undefined) {
536
+ canUpdateFieldNames.push(fieldName);
537
+ canUpdateProperties[fieldName] = {
538
+ type: fieldNameSetting.type,
539
+ }
540
+ if (fieldNameSetting.hasOwnProperty("versionedDataLabel")) {
541
+ versionedDataFieldNames.push(fieldName)
542
+ }
537
543
  }
538
544
  }
539
545
  }
@@ -560,13 +566,13 @@ async function generateValidatorSchemaForUpdate(_izContext, objType, settings =
560
566
  let defaultFieldNames = usedFieldNames.filter(fieldName => !identifiersFieldNames.includes(fieldName));
561
567
 
562
568
  _izContext.logger.debug('identifiersFieldNames : ', identifiersFieldNames);
563
- _izContext.logger.debug('usedFieldNames : ', usedFieldNames);
569
+ _izContext.logger.debug('usedFieldNames : ', usedFieldNames); // all fieldName
564
570
  _izContext.logger.debug("defaultFieldNames :", defaultFieldNames);
565
571
  _izContext.logger.debug("versionedDataFieldNames :", versionedDataFieldNames);
566
572
 
567
573
  let initialValidatorSchemaForUpdate = {
568
574
  type: "object",
569
- required: ["objInstanceFull", "objectType"],
575
+ required: ["objInstanceFull"],
570
576
  properties: {
571
577
  objectType: {
572
578
  type: "string",
@@ -578,21 +584,25 @@ async function generateValidatorSchemaForUpdate(_izContext, objType, settings =
578
584
  properties: {
579
585
  identifiers: {
580
586
  type: "object",
581
- ... await filteredFieldNamesOfValidatorSchema(_izContext, objType, identifiersFieldNames, identifiersFieldNames, settings.bucketName)
587
+ ...await filteredFieldNamesOfValidatorSchema(_izContext, objType, identifiersFieldNames, identifiersFieldNames)
582
588
  },
583
589
  fields: {
584
590
  type: "object",
585
591
  additionalProperties: false,
586
- required: [],
587
- properties: {}
592
+ // required: [],
593
+ // properties: {},
594
+ ...await filteredFieldNamesOfValidatorSchema(_izContext, objType, [], defaultFieldNames)
595
+
588
596
  },
589
597
  }
590
598
  },
591
599
  versionedDataIds: {
592
600
  type: "object",
593
601
  additionalProperties: false,
594
- required: [], // no need to required versionedDataLabel
595
- properties: {},
602
+ // required: [], // no need to required versionedDataLabel
603
+ // properties: {},
604
+ ...await filteredFieldNamesOfValidatorSchema(_izContext, objType, [], versionedDataFieldNames)
605
+
596
606
  },
597
607
  additionalParams: {
598
608
  type: "object"
@@ -619,21 +629,8 @@ async function generateValidatorSchemaForUpdate(_izContext, objType, settings =
619
629
  }
620
630
  }
621
631
 
622
-
623
- console.debug("initialValidatorSchemaForUpdate:::3::", initialValidatorSchemaForUpdate);
624
- Object.assign(
625
- initialValidatorSchemaForUpdate.properties.objInstanceFull.properties.fields,
626
- await filteredFieldNamesOfValidatorSchema(
627
- _izContext,
628
- objType,
629
- [],
630
- defaultFieldNames,
631
- settings.bucketName
632
- )
633
- );
634
-
635
632
  console.debug("versionedDataReturnInFieldsObjInstanceFull::::", versionedDataReturnInFieldsObjInstanceFull);
636
- console.debug("initialValidatorSchemaForUpdate:::4::", initialValidatorSchemaForUpdate);
633
+ console.debug("initialValidatorSchemaForUpdate:::::", initialValidatorSchemaForUpdate);
637
634
  Object.assign(
638
635
  initialValidatorSchemaForUpdate.properties.objInstanceFull.properties.fields.properties,
639
636
  {
@@ -649,6 +646,7 @@ async function generateValidatorSchemaForUpdate(_izContext, objType, settings =
649
646
 
650
647
 
651
648
 
649
+
652
650
  /**
653
651
  * generate validatorSchema by fieldNames that part of objectSchema.identifiers
654
652
  *
@@ -674,12 +672,8 @@ async function generateValidatorSchemaForIdentifier(_izContext, objType, setting
674
672
 
675
673
  return {
676
674
  type: "object",
677
- required: ["identifiers", "objectType"],
675
+ required: ["identifiers"],
678
676
  properties: {
679
- objectType: {
680
- type: "string",
681
- pattern: "^[a-zA-Z0-9_-]+$"
682
- },
683
677
  identifiers: {
684
678
  type: "object",
685
679
  required: Object.keys(generatedIdentifiersValidatorSchema),
@@ -700,6 +694,7 @@ async function generateValidatorSchemaForIdentifier(_izContext, objType, setting
700
694
  * @param {object} objType
701
695
  * @param {string[]} requiredFieldNames
702
696
  * @param {string[]} usedFieldNames
697
+ * @param {boolean} required = false
703
698
  * @returns
704
699
  */
705
700
  async function filteredFieldNamesOfValidatorSchema(_izContext, objType, requiredFieldNames, usedFieldNames) {
@@ -714,7 +709,7 @@ async function filteredFieldNamesOfValidatorSchema(_izContext, objType, required
714
709
  usedFieldNames
715
710
  });
716
711
 
717
- let allValidatorSchema = await generateValidatorSchemaForExplodedDataWithCache(_izContext, objType, process.env.iz_serviceSchemaBucketName);
712
+ let allValidatorSchema = await generateValidatorSchemaForExplodedDataWithCache(_izContext, objType);
718
713
  _izContext.logger.debug("filteredFieldNamesOfValidatorSchema allValidatorSchema : ", allValidatorSchema)
719
714
 
720
715
  allValidatorSchema.required = requiredFieldNames;
@@ -724,6 +719,8 @@ async function filteredFieldNamesOfValidatorSchema(_izContext, objType, required
724
719
  properties: {}
725
720
  }
726
721
 
722
+
723
+
727
724
  // filtered allValidatorSchema depend on usedFieldNames
728
725
  for (let validatorFieldName in allValidatorSchema.properties) {
729
726
  if (usedFieldNames.includes(validatorFieldName)) {
@@ -850,18 +847,19 @@ const generateValidatorFieldNameWithCache = inMemoryCacheLib(
850
847
  */
851
848
  async function generateValidatorFieldName(_izContext, fieldName, fieldData) {
852
849
 
853
- if (fieldData.hasOwnProperty("fromObjectType") || fieldData.hasOwnProperty("fromServiceNameTag")) {
850
+ if (fieldData.hasOwnProperty("fromObjType")) {
854
851
  // validate reference
855
- if (!fieldData.hasOwnProperty("fromObjectType") || !fieldData.hasOwnProperty("fromServiceNameTag")) {
852
+ if (!fieldData.hasOwnProperty("fromObjType")) {
856
853
  throw new Error(`Invalid reference fieldName:${fieldName}`);
857
854
  }
858
855
 
859
856
  let objectSchemaChild = await getObjSchemaS3WithHierarchy(
860
857
  _izContext,
861
- {
862
- serviceTag: fieldData.fromServiceNameTag,
863
- objectType: fieldData.fromObjectType
864
- }
858
+ // {
859
+ // serviceTag: fieldData.fromServiceNameTag,
860
+ // objectType: fieldData.fromObjectType
861
+ // }
862
+ fieldData.fromObjType
865
863
  );
866
864
 
867
865
  let usedIdentifier = null
@@ -882,12 +880,8 @@ async function generateValidatorFieldName(_izContext, fieldName, fieldData) {
882
880
 
883
881
  for (let compositeKey of identifierCompositeKeys) {
884
882
 
885
- if (objectSchemaChild.fieldNames[compositeKey].hasOwnProperty("fromObjectType")
886
- || objectSchemaChild.fieldNames[compositeKey].hasOwnProperty("fromServiceNameTag")
887
- ) {
888
-
889
- if (!objectSchemaChild.fieldNames[compositeKey].hasOwnProperty("fromObjectType")
890
- || !objectSchemaChild.fieldNames[compositeKey].hasOwnProperty("fromServiceNameTag")
883
+ if (objectSchemaChild.fieldNames[compositeKey].hasOwnProperty("fromObjType")) {
884
+ if (!objectSchemaChild.fieldNames[compositeKey].hasOwnProperty("fromObjType")
891
885
  ) {
892
886
  throw new Error(`Invalid reference fieldName:${compositeKey}`);
893
887
  }
@@ -49,14 +49,15 @@ async function generateDeliminatorTreePerFieldName(_izContext, fieldName, fieldN
49
49
 
50
50
  // ------- create tree first -------
51
51
 
52
- if (fieldNameSetting.fromServiceNameTag && fieldNameSetting.fromObjectType) {
52
+ if (fieldNameSetting.fromObjType) {
53
53
 
54
54
  let childObjectSchema = await getObjSchemaS3WithHierarchy(
55
55
  _izContext,
56
- {
57
- objectType: fieldNameSetting.fromObjectType,
58
- serviceTag: fieldNameSetting.fromServiceNameTag
59
- },
56
+ // {
57
+ // objectType: fieldNameSetting.fromObjectType,
58
+ // serviceTag: fieldNameSetting.fromServiceNameTag
59
+ // },
60
+ fieldNameSetting.fromObjType,
60
61
  process.env.iz_serviceSchemaBucketName
61
62
  );
62
63
 
@@ -89,10 +90,11 @@ async function generateDeliminatorTreePerFieldName(_izContext, fieldName, fieldN
89
90
  _izContext,
90
91
  eachKey, // fieldName
91
92
  childObjectSchema.fieldNames[eachKey], // fieldName setting
92
- {
93
- objectType: fieldNameSetting.fromObjectType,
94
- serviceTag: fieldNameSetting.fromServiceNameTag
95
- },
93
+ // {
94
+ // objectType: fieldNameSetting.fromObjectType,
95
+ // serviceTag: fieldNameSetting.fromServiceNameTag
96
+ // },
97
+ fieldNameSetting.fromObjType,
96
98
  iter
97
99
  );
98
100
  _izContext.logger.debug("childDeliminator: ", childDeliminator)
@@ -199,9 +201,9 @@ async function generateDeliminatorTreeIdentifier(_izContext, objectSchema) {
199
201
 
200
202
  // collect deliminatorTree of composite key
201
203
  await Promise.all(identifier.fieldNames.map(async (compositeKey) => {
202
- let compositeKeyDeliminatortree = await generateDeliminatorTreePerFieldName(_izContext, compositeKey, objectSchema.fieldNames[compositeKey]);
203
- _izContext.logger.debug("compositeKeyDeliminatortree each fieldname: ", compositeKeyDeliminatortree);
204
- Object.assign(compositeKeysDeliminatorTree, compositeKeyDeliminatortree);
204
+ let compositeKeyDeliminatorTree = await generateDeliminatorTreePerFieldName(_izContext, compositeKey, objectSchema.fieldNames[compositeKey]);
205
+ _izContext.logger.debug("compositeKeyDeliminatorTree each fieldname: ", compositeKeyDeliminatorTree);
206
+ Object.assign(compositeKeysDeliminatorTree, compositeKeyDeliminatorTree);
205
207
  }));
206
208
 
207
209
  // calculate deliminatorTree of identifier