@izara_project/izara-shared-service-schemas 1.0.21 → 1.0.23
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 +1 -1
- package/src/Consts.js +4 -1
- package/src/GetObjectSchema.js +116 -72
- package/src/libs/BasicValidatorSchema.js +104 -7
- package/src/libs/ReformatObjectSchema.js +1 -0
- package/src/libs/RelSchemaLib.js +7 -6
package/package.json
CHANGED
package/src/Consts.js
CHANGED
package/src/GetObjectSchema.js
CHANGED
|
@@ -25,30 +25,32 @@ const NoRetryError = izaraCore.NoRetryError;
|
|
|
25
25
|
const { validateObject } = izaraCore.validator;
|
|
26
26
|
|
|
27
27
|
const { basicFieldNameSchema } = require("./libs/BasicValidatorSchema");
|
|
28
|
-
const { validateRelType, validateObjType } = require('./libs/ValidateObjType');
|
|
28
|
+
const { validateRelType, validateObjType, validateFlowType } = require('./libs/ValidateObjType');
|
|
29
29
|
|
|
30
30
|
const { findLinksByObjType, createLinkTypeId } = require("./Utils");
|
|
31
|
-
const { SCHEMA_NAME, STORAGE_TYPES } = require('./Consts');
|
|
31
|
+
const { SCHEMA_NAME, STORAGE_TYPES, OBJECT_SCHEMA_BUCKET_NAME } = require('./Consts');
|
|
32
32
|
const {
|
|
33
33
|
generateObjectSchemaForCreate,
|
|
34
34
|
generateObjectSchemaForUpdate,
|
|
35
35
|
generateObjectSchemaForCombineFieldNames
|
|
36
36
|
} = require('./libs/ReformatObjectSchema');
|
|
37
|
+
|
|
37
38
|
/**
|
|
38
39
|
* Retrieves a specific object schema from S3.
|
|
39
40
|
*
|
|
40
41
|
* @param {Function} getSchemaFn - Function to fetch the schema from S3.
|
|
41
42
|
* @param {object} objType - The object type information.
|
|
42
43
|
* @param {string} objType.objectType - The type of the object.
|
|
44
|
+
* @param {string} bucketName - bucketName to getSchema
|
|
43
45
|
* @param {boolean} [getExtendObType=false] - Whether to include extended object type data.
|
|
44
46
|
* @returns {Promise<object>} - The object schema, optionally merged with extended object type data.
|
|
45
47
|
*/
|
|
46
48
|
async function getObjSchemaS3(
|
|
47
49
|
getSchemaFn,
|
|
48
50
|
objType,
|
|
51
|
+
bucketName = OBJECT_SCHEMA_BUCKET_NAME,
|
|
49
52
|
getExtendObType = false,
|
|
50
53
|
) {
|
|
51
|
-
|
|
52
54
|
try {
|
|
53
55
|
validateObjType(objType);
|
|
54
56
|
} catch (error) {
|
|
@@ -63,7 +65,7 @@ async function getObjSchemaS3(
|
|
|
63
65
|
getParams: objType
|
|
64
66
|
}
|
|
65
67
|
|
|
66
|
-
let objSchema = await getSchemaFn(getDataParams);
|
|
68
|
+
let objSchema = await getSchemaFn(getDataParams, bucketName);
|
|
67
69
|
if (!objSchema) {
|
|
68
70
|
// return objSchema;
|
|
69
71
|
return {
|
|
@@ -105,8 +107,8 @@ async function getObjSchemaS3(
|
|
|
105
107
|
* @returns {Promise<object>} - The object schema, optionally merged with extended object type data.
|
|
106
108
|
* @see {@link getObjSchemaS3}
|
|
107
109
|
*/
|
|
108
|
-
async function getObjSchemaWithHierarchy(getSchemaFn, objType) {
|
|
109
|
-
return await getObjSchemaS3(getSchemaFn, objType, true);
|
|
110
|
+
async function getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
111
|
+
return await getObjSchemaS3(getSchemaFn, objType, bucketName, true);
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
/**
|
|
@@ -117,8 +119,8 @@ async function getObjSchemaWithHierarchy(getSchemaFn, objType) {
|
|
|
117
119
|
* @returns {Promise<object>} - The object schema without extended hierarchical data.
|
|
118
120
|
* @see {@link getObjSchemaS3}
|
|
119
121
|
*/
|
|
120
|
-
async function getObjSchemaWithoutHierarchy(getSchemaFn, objType) {
|
|
121
|
-
return await getObjSchemaS3(getSchemaFn, objType, false);
|
|
122
|
+
async function getObjSchemaWithoutHierarchy(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
123
|
+
return await getObjSchemaS3(getSchemaFn, objType, bucketName, false);
|
|
122
124
|
}
|
|
123
125
|
|
|
124
126
|
/**
|
|
@@ -131,8 +133,8 @@ async function getObjSchemaWithoutHierarchy(getSchemaFn, objType) {
|
|
|
131
133
|
* @returns {Promise<Object>} The merged and validated object schema.
|
|
132
134
|
* @throws {NoRetryError} If there are validation errors in the merged schema, such as duplicate storage resources or invalid field names.
|
|
133
135
|
*/
|
|
134
|
-
async function mergeExtendObjSchema(getSchemaFn, objectSchema) {
|
|
135
|
-
let mergedObjectSchemaResult = await recursiveMergeExtendObjSchema(getSchemaFn, objectSchema);
|
|
136
|
+
async function mergeExtendObjSchema(getSchemaFn, objectSchema, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
137
|
+
let mergedObjectSchemaResult = await recursiveMergeExtendObjSchema(getSchemaFn, objectSchema, bucketName);
|
|
136
138
|
|
|
137
139
|
if (mergedObjectSchemaResult.errorsFound.length > 0) {
|
|
138
140
|
return mergedObjectSchemaResult;
|
|
@@ -201,7 +203,7 @@ async function mergeExtendObjSchema(getSchemaFn, objectSchema) {
|
|
|
201
203
|
* @returns {Promise<object>} - The merged object schema.
|
|
202
204
|
* @throws {NoRetryError} If the recursion depth exceeds 20 or if validation fails.
|
|
203
205
|
*/
|
|
204
|
-
async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
|
|
206
|
+
async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, bucketName = OBJECT_SCHEMA_BUCKET_NAME, iter = 1) {
|
|
205
207
|
if (iter > 20) {
|
|
206
208
|
// throw new NoRetryError(`mergeExtendObjSchema Error objectTYpe: ${objSchema.objectType} Have more than 20 hierarchy.`)
|
|
207
209
|
return {
|
|
@@ -212,8 +214,6 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
|
|
|
212
214
|
|
|
213
215
|
objSchema = lodash.cloneDeep(objSchema);
|
|
214
216
|
|
|
215
|
-
console.log("iter in merge : ", iter);
|
|
216
|
-
|
|
217
217
|
if (objSchema.hasOwnProperty("extendObjType")) {
|
|
218
218
|
const extendedObjTypeValidation = validateObjType(objSchema.extendObjType);
|
|
219
219
|
if (extendedObjTypeValidation.errorsFound.length > 0) {
|
|
@@ -222,7 +222,8 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
|
|
|
222
222
|
result: null
|
|
223
223
|
}
|
|
224
224
|
}
|
|
225
|
-
|
|
225
|
+
|
|
226
|
+
let parentObjSchema = await getObjSchemaS3(getSchemaFn, objSchema.extendObjType, bucketName, false).then(res => {
|
|
226
227
|
if (res.errorsFound.length && res.errorsFound.length > 0) {
|
|
227
228
|
return {
|
|
228
229
|
errorsFound: res.errorsFound,
|
|
@@ -457,7 +458,7 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
|
|
|
457
458
|
},
|
|
458
459
|
};
|
|
459
460
|
|
|
460
|
-
let recursiveResult = await recursiveMergeExtendObjSchema(getSchemaFn, newObjSchema, iter);
|
|
461
|
+
let recursiveResult = await recursiveMergeExtendObjSchema(getSchemaFn, newObjSchema, bucketName, iter);
|
|
461
462
|
return recursiveResult;
|
|
462
463
|
}
|
|
463
464
|
}
|
|
@@ -478,7 +479,7 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
|
|
|
478
479
|
* @param {String} objType.serviceTag - The service tag associated with the object type.
|
|
479
480
|
* @returns {Promise<Object>} - The reference relationship data of the specified object type, or an empty object if not found.
|
|
480
481
|
*/
|
|
481
|
-
async function getRefObjectRelationship(getSchemaFn, objType) {
|
|
482
|
+
async function getRefObjectRelationship(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
482
483
|
const objTypeValidation = validateObjType(objType);
|
|
483
484
|
if (objTypeValidation.errorsFound.length > 0) {
|
|
484
485
|
return {
|
|
@@ -492,7 +493,7 @@ async function getRefObjectRelationship(getSchemaFn, objType) {
|
|
|
492
493
|
getParams: objType
|
|
493
494
|
}
|
|
494
495
|
|
|
495
|
-
let refRelationshipData = await getSchemaFn(getDataParams);
|
|
496
|
+
let refRelationshipData = await getSchemaFn(getDataParams, bucketName);
|
|
496
497
|
|
|
497
498
|
// return refRelationshipData || {};
|
|
498
499
|
return {
|
|
@@ -511,7 +512,7 @@ async function getRefObjectRelationship(getSchemaFn, objType) {
|
|
|
511
512
|
* @param {String} relType.relationshipTag - The specific relationship tag to retrieve.
|
|
512
513
|
* @returns {Promise<object>} - The relationship schema data.
|
|
513
514
|
*/
|
|
514
|
-
async function getRelationshipSchema(getSchemaFn, relType) {
|
|
515
|
+
async function getRelationshipSchema(getSchemaFn, relType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
515
516
|
const relTypeValidation = validateRelType(relType);
|
|
516
517
|
if (relTypeValidation.errorsFound.length > 0) {
|
|
517
518
|
return {
|
|
@@ -525,7 +526,7 @@ async function getRelationshipSchema(getSchemaFn, relType) {
|
|
|
525
526
|
getParams: relType
|
|
526
527
|
}
|
|
527
528
|
|
|
528
|
-
let relationshipSchema = await getSchemaFn(getDataParams);
|
|
529
|
+
let relationshipSchema = await getSchemaFn(getDataParams, bucketName);
|
|
529
530
|
|
|
530
531
|
// return relationshipSchema;
|
|
531
532
|
return {
|
|
@@ -555,7 +556,8 @@ async function getObjectRelationship(
|
|
|
555
556
|
objType,
|
|
556
557
|
specificRelTags,
|
|
557
558
|
overWriteBaseObjType,
|
|
558
|
-
|
|
559
|
+
bucketName = OBJECT_SCHEMA_BUCKET_NAME,
|
|
560
|
+
iter = 1,
|
|
559
561
|
) {
|
|
560
562
|
if (iter >= 20) {
|
|
561
563
|
// throw new NoRetryError(`Error:Iteration > 20 while getObjectRelationship of objType ${JSON.stringify(objType)}`);
|
|
@@ -594,7 +596,7 @@ async function getObjectRelationship(
|
|
|
594
596
|
getParams: objType
|
|
595
597
|
}
|
|
596
598
|
|
|
597
|
-
let objectRelationshipsData = await getSchemaFn(getDataParams);
|
|
599
|
+
let objectRelationshipsData = await getSchemaFn(getDataParams, bucketName);
|
|
598
600
|
|
|
599
601
|
if (objectRelationshipsData && Array.isArray(objectRelationshipsData) && objectRelationshipsData.length) {
|
|
600
602
|
for (const objectRel of objectRelationshipsData) {
|
|
@@ -617,7 +619,7 @@ async function getObjectRelationship(
|
|
|
617
619
|
}
|
|
618
620
|
|
|
619
621
|
// get reference relationships of objType
|
|
620
|
-
let refRelationshipsResult = await getRefObjectRelationship(getSchemaFn, objType);
|
|
622
|
+
let refRelationshipsResult = await getRefObjectRelationship(getSchemaFn, objType, bucketName);
|
|
621
623
|
|
|
622
624
|
// if (refRelationshipsResult.errorsFound.length > 0) {
|
|
623
625
|
// errorsFound.push(...refRelationshipsResult.errorsFound);
|
|
@@ -644,7 +646,8 @@ async function getObjectRelationship(
|
|
|
644
646
|
{
|
|
645
647
|
serviceTag: refData.relationshipServiceTag,
|
|
646
648
|
relationshipTag: relTag
|
|
647
|
-
}
|
|
649
|
+
},
|
|
650
|
+
bucketName
|
|
648
651
|
);
|
|
649
652
|
|
|
650
653
|
if (refRelSchemaResult.errorsFound.length > 0) {
|
|
@@ -716,7 +719,7 @@ async function getObjectRelationship(
|
|
|
716
719
|
|
|
717
720
|
overWriteBaseObjType = overWriteBaseObjType ? overWriteBaseObjType : objType;
|
|
718
721
|
|
|
719
|
-
let extendObjectRelationshipResult = await getObjectRelationship(getSchemaFn, objSchema.extendObjType, [...specificRelTagsSet], overWriteBaseObjType, iter);
|
|
722
|
+
let extendObjectRelationshipResult = await getObjectRelationship(getSchemaFn, objSchema.extendObjType, [...specificRelTagsSet], overWriteBaseObjType, bucketName, iter);
|
|
720
723
|
|
|
721
724
|
if (extendObjectRelationshipResult.errorsFound.length > 0) {
|
|
722
725
|
errorsFound.push(...extendObjectRelationshipResult.errorsFound);
|
|
@@ -735,7 +738,7 @@ async function getObjectRelationship(
|
|
|
735
738
|
// }
|
|
736
739
|
|
|
737
740
|
// let linkTypeIdExtend = linkTypeIdExtendResult.result;
|
|
738
|
-
if (!linkTypeIds.has(linkTypeIdExtendResult)) { // check duplicate link
|
|
741
|
+
if (!linkTypeIds.has(linkTypeIdExtendResult)) { // check duplicate link across child and parent
|
|
739
742
|
linkTypeIds.add(linkTypeIdExtendResult)
|
|
740
743
|
returnRelationships.push(newExtendObject);
|
|
741
744
|
}
|
|
@@ -779,6 +782,7 @@ async function getRequiredOnCreateLinks(
|
|
|
779
782
|
getSchemaFn,
|
|
780
783
|
objType,
|
|
781
784
|
specificRelTags,
|
|
785
|
+
bucketName = OBJECT_SCHEMA_BUCKET_NAME
|
|
782
786
|
) {
|
|
783
787
|
try {
|
|
784
788
|
validateObjType(objType)
|
|
@@ -789,7 +793,7 @@ async function getRequiredOnCreateLinks(
|
|
|
789
793
|
}
|
|
790
794
|
}
|
|
791
795
|
|
|
792
|
-
let objectRelationships = await getObjectRelationship(getSchemaFn, objType, specificRelTags);
|
|
796
|
+
let objectRelationships = await getObjectRelationship(getSchemaFn, objType, specificRelTags, objType, bucketName);
|
|
793
797
|
|
|
794
798
|
if (objectRelationships.errorsFound.length > 0) {
|
|
795
799
|
return {
|
|
@@ -802,21 +806,16 @@ async function getRequiredOnCreateLinks(
|
|
|
802
806
|
|
|
803
807
|
if (objectRelationships.result?.length) {
|
|
804
808
|
for (const link of objectRelationships.result) {
|
|
805
|
-
if (
|
|
806
|
-
|
|
807
|
-
if (link.base?.requiredOnCreate) {
|
|
808
|
-
returnRequiredOnCreateLinks.push(link);
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
// return returnRequiredOnCreateLinks;
|
|
814
|
-
return {
|
|
815
|
-
errorsFound: [],
|
|
816
|
-
result: returnRequiredOnCreateLinks
|
|
809
|
+
if (link.base?.requiredOnCreate) {
|
|
810
|
+
returnRequiredOnCreateLinks.push(link);
|
|
817
811
|
}
|
|
818
812
|
}
|
|
819
813
|
}
|
|
814
|
+
|
|
815
|
+
return {
|
|
816
|
+
errorsFound: [],
|
|
817
|
+
result: returnRequiredOnCreateLinks
|
|
818
|
+
}
|
|
820
819
|
}
|
|
821
820
|
|
|
822
821
|
|
|
@@ -840,11 +839,7 @@ async function getRequiredOnCreateLinks(
|
|
|
840
839
|
* @returns {Promise<Object>} - A promise that resolves to the link configuration for the specified link type ID.
|
|
841
840
|
* @throws {NoRetryError} - Throws an error if the direction is invalid or if the required schema data is missing.
|
|
842
841
|
*/
|
|
843
|
-
async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, settings = {
|
|
844
|
-
getAllLinks: false,
|
|
845
|
-
getRawLink: false,
|
|
846
|
-
getOriginalLink: false
|
|
847
|
-
}) {
|
|
842
|
+
async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, settings = { getAllLinks: false, getRawLink: false, getOriginalLink: false }, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
848
843
|
let errorsFound = [];
|
|
849
844
|
|
|
850
845
|
if (!direction || typeof direction !== "string" || (direction !== "from" && direction !== "to")) {
|
|
@@ -880,7 +875,7 @@ async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjTyp
|
|
|
880
875
|
}
|
|
881
876
|
}
|
|
882
877
|
|
|
883
|
-
async function getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction) {
|
|
878
|
+
async function getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, bucketName) {
|
|
884
879
|
const linkTypeIdResult = createLinkTypeId(firstObjType, secondObjType, relType, direction);
|
|
885
880
|
|
|
886
881
|
if (linkTypeIdResult.errorsFound.length > 0) {
|
|
@@ -896,33 +891,37 @@ async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjTyp
|
|
|
896
891
|
}
|
|
897
892
|
}
|
|
898
893
|
|
|
899
|
-
const linkConfig = await getSchemaFn(getDataParams);
|
|
894
|
+
const linkConfig = await getSchemaFn(getDataParams, bucketName);
|
|
900
895
|
return linkConfig
|
|
901
896
|
}
|
|
902
897
|
|
|
903
898
|
let linkConfigs = [];
|
|
904
899
|
if (settings.getOriginalLink) {
|
|
905
|
-
let linkConfig = await getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction)
|
|
900
|
+
let linkConfig = await getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, bucketName)
|
|
906
901
|
linkConfig && linkConfigs.push(linkConfig)
|
|
907
902
|
} else {
|
|
908
|
-
let firstObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, firstObjType)
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
903
|
+
let firstObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, firstObjType, [firstObjType], bucketName).then(res => {
|
|
904
|
+
if (res.errorsFound.length && res.errorsFound.length > 0) {
|
|
905
|
+
errorsFound.push(...res.errorsFound)
|
|
906
|
+
return {
|
|
907
|
+
errorsFound: res.errorsFound,
|
|
908
|
+
result: null
|
|
909
|
+
}
|
|
910
|
+
} else {
|
|
911
|
+
return res.result
|
|
916
912
|
}
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
913
|
+
});
|
|
914
|
+
let secondObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, secondObjType, [secondObjType], bucketName).then(res => {
|
|
915
|
+
if (res.errorsFound.length && res.errorsFound.length > 0) {
|
|
916
|
+
errorsFound.push(...res.errorsFound)
|
|
917
|
+
return {
|
|
918
|
+
errorsFound: res.errorsFound,
|
|
919
|
+
result: null
|
|
920
|
+
}
|
|
921
|
+
} else {
|
|
922
|
+
return res.result
|
|
924
923
|
}
|
|
925
|
-
}
|
|
924
|
+
});
|
|
926
925
|
|
|
927
926
|
for (const firstObject of firstObjectTypeHie) {
|
|
928
927
|
for (const secondObject of secondObjectTypeHie) {
|
|
@@ -982,7 +981,7 @@ async function getLinkConfig(getSchemaFn, firstObjType, secondObjType, relType,
|
|
|
982
981
|
* @param {object} objType
|
|
983
982
|
* @return {object} objectSchema
|
|
984
983
|
*/
|
|
985
|
-
async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, iter = 1) {
|
|
984
|
+
async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, bucketName = OBJECT_SCHEMA_BUCKET_NAME, iter = 1) {
|
|
986
985
|
if (iter >= 20) {
|
|
987
986
|
// throw NoRetryError("getObjTypeHierarchy reach limit iteration");
|
|
988
987
|
return {
|
|
@@ -1008,13 +1007,23 @@ async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, i
|
|
|
1008
1007
|
objTypeHierarchy = passObjTypeHierarchy;
|
|
1009
1008
|
}
|
|
1010
1009
|
|
|
1011
|
-
const objectSchema = await getObjSchemaWithoutHierarchy(getSchemaFn, objType)
|
|
1010
|
+
const objectSchema = await getObjSchemaWithoutHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
|
|
1011
|
+
if (objSchema.errorsFound.length) {
|
|
1012
|
+
return {
|
|
1013
|
+
errorsFound: objSchema.errorsFound,
|
|
1014
|
+
result: null
|
|
1015
|
+
}
|
|
1016
|
+
} else {
|
|
1017
|
+
return objSchema.result
|
|
1018
|
+
}
|
|
1019
|
+
});
|
|
1020
|
+
|
|
1012
1021
|
|
|
1013
1022
|
if (objectSchema.extendObjType) {
|
|
1014
1023
|
iter++;
|
|
1015
1024
|
objTypeHierarchy.push(objectSchema.extendObjType);
|
|
1016
1025
|
|
|
1017
|
-
let extendResult = await getObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, objTypeHierarchy, iter);
|
|
1026
|
+
let extendResult = await getObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, objTypeHierarchy, bucketName, iter);
|
|
1018
1027
|
|
|
1019
1028
|
if (extendResult.errorsFound.length) {
|
|
1020
1029
|
return {
|
|
@@ -1030,8 +1039,8 @@ async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, i
|
|
|
1030
1039
|
}
|
|
1031
1040
|
}
|
|
1032
1041
|
|
|
1033
|
-
async function getObjectSchemaForCreate(getSchemaFn, objType) {
|
|
1034
|
-
let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType).then(objSchema => {
|
|
1042
|
+
async function getObjectSchemaForCreate(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
1043
|
+
let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
|
|
1035
1044
|
if (objSchema.errorsFound.length) {
|
|
1036
1045
|
return {
|
|
1037
1046
|
errorsFound: objSchema.errorsFound,
|
|
@@ -1044,8 +1053,8 @@ async function getObjectSchemaForCreate(getSchemaFn, objType) {
|
|
|
1044
1053
|
return generateObjectSchemaForCreate(objectSchema)
|
|
1045
1054
|
}
|
|
1046
1055
|
|
|
1047
|
-
async function getObjectSchemaForUpdate(getSchemaFn, objType) {
|
|
1048
|
-
let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType).then(objSchema => {
|
|
1056
|
+
async function getObjectSchemaForUpdate(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
1057
|
+
let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
|
|
1049
1058
|
if (objSchema.errorsFound.length) {
|
|
1050
1059
|
return {
|
|
1051
1060
|
errorsFound: objSchema.errorsFound,
|
|
@@ -1058,8 +1067,8 @@ async function getObjectSchemaForUpdate(getSchemaFn, objType) {
|
|
|
1058
1067
|
return generateObjectSchemaForUpdate(objectSchema)
|
|
1059
1068
|
}
|
|
1060
1069
|
|
|
1061
|
-
async function getObjectSchemaCombineFieldNames(objType) {
|
|
1062
|
-
let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType).then(objSchema => {
|
|
1070
|
+
async function getObjectSchemaCombineFieldNames(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
1071
|
+
let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
|
|
1063
1072
|
if (objSchema.errorsFound.length) {
|
|
1064
1073
|
return {
|
|
1065
1074
|
errorsFound: objSchema.errorsFound,
|
|
@@ -1071,6 +1080,39 @@ async function getObjectSchemaCombineFieldNames(objType) {
|
|
|
1071
1080
|
})
|
|
1072
1081
|
return generateObjectSchemaForCombineFieldNames(objectSchema)
|
|
1073
1082
|
}
|
|
1083
|
+
|
|
1084
|
+
async function getFlowSchemaS3(getSchemaFn, flowType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
1085
|
+
let errorsFound = [];
|
|
1086
|
+
try {
|
|
1087
|
+
validateFlowType(flowType);
|
|
1088
|
+
} catch (error) {
|
|
1089
|
+
errorsFound.push(error.message)
|
|
1090
|
+
return {
|
|
1091
|
+
errorsFound: [error.message],
|
|
1092
|
+
result: null
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
const getDataParams = {
|
|
1097
|
+
schemaName: SCHEMA_NAME.flowSchema,
|
|
1098
|
+
getParams: flowType
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
let flowSchema = await getSchemaFn(getDataParams, bucketName);
|
|
1102
|
+
if (!flowSchema) {
|
|
1103
|
+
// return objSchema;
|
|
1104
|
+
return {
|
|
1105
|
+
errorsFound: errorsFound,
|
|
1106
|
+
result: null
|
|
1107
|
+
}
|
|
1108
|
+
} else {
|
|
1109
|
+
return {
|
|
1110
|
+
errorsFound: errorsFound,
|
|
1111
|
+
result: flowSchema
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1074
1116
|
module.exports = {
|
|
1075
1117
|
// objectSchema
|
|
1076
1118
|
getObjSchemaS3,
|
|
@@ -1093,5 +1135,7 @@ module.exports = {
|
|
|
1093
1135
|
|
|
1094
1136
|
getObjectSchemaForCreate,
|
|
1095
1137
|
getObjectSchemaForUpdate,
|
|
1096
|
-
getObjectSchemaCombineFieldNames
|
|
1138
|
+
getObjectSchemaCombineFieldNames,
|
|
1139
|
+
|
|
1140
|
+
getFlowSchemaS3,
|
|
1097
1141
|
}
|
|
@@ -689,7 +689,7 @@ const basicExtendObjectSchema = {
|
|
|
689
689
|
}
|
|
690
690
|
}
|
|
691
691
|
|
|
692
|
-
// validator schema for basic
|
|
692
|
+
// validator schema for basic relationship schema
|
|
693
693
|
const relationshipBasicSchema = {
|
|
694
694
|
type: "object",
|
|
695
695
|
maxProperties: 1,
|
|
@@ -873,7 +873,7 @@ const relationshipBasicSchema = {
|
|
|
873
873
|
}
|
|
874
874
|
|
|
875
875
|
|
|
876
|
-
// validator schema for basic reference
|
|
876
|
+
// validator schema for basic reference relationship schema
|
|
877
877
|
const refRelationshipBasicSchema = {
|
|
878
878
|
type: "object",
|
|
879
879
|
required: ["objectType", "relationshipTag", "relationshipServiceTag"],
|
|
@@ -957,13 +957,101 @@ const basicFlowSchema = {
|
|
|
957
957
|
minItems: 1,
|
|
958
958
|
items: {
|
|
959
959
|
type: "string",
|
|
960
|
-
enum: ["ownTopic", "extTopic", "s3", "eventBridge"],
|
|
960
|
+
enum: ["ownTopic", "extTopic", "s3", "eventBridge", "lambdaSync"],
|
|
961
961
|
}
|
|
962
962
|
},
|
|
963
963
|
triggerType: {
|
|
964
964
|
type: "string",
|
|
965
965
|
enum: ["storedCache", "switch"]
|
|
966
966
|
},
|
|
967
|
+
stepProperties: {
|
|
968
|
+
type: "object",
|
|
969
|
+
minProperties: 1,
|
|
970
|
+
patternProperties: {
|
|
971
|
+
[strNotEmptyRegex]: {
|
|
972
|
+
type: "object",
|
|
973
|
+
required: ["propertyName", "type"],
|
|
974
|
+
properties: {
|
|
975
|
+
propertyName: {
|
|
976
|
+
type: "string"
|
|
977
|
+
},
|
|
978
|
+
type: {
|
|
979
|
+
type: "string"
|
|
980
|
+
},
|
|
981
|
+
objectField: {
|
|
982
|
+
type: "object",
|
|
983
|
+
required: ["objType", "fieldName"],
|
|
984
|
+
properties: {
|
|
985
|
+
objType: {
|
|
986
|
+
type: "object",
|
|
987
|
+
required: ["objectType", "serviceTag"],
|
|
988
|
+
properties: {
|
|
989
|
+
objectType: {
|
|
990
|
+
type: "string",
|
|
991
|
+
pattern: strNotEmptyRegex
|
|
992
|
+
},
|
|
993
|
+
serviceTag: {
|
|
994
|
+
type: "string",
|
|
995
|
+
pattern: strNotEmptyRegex
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
},
|
|
999
|
+
fieldName: {
|
|
1000
|
+
type: "string"
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
},
|
|
1004
|
+
overwritePropertyName: {
|
|
1005
|
+
type: "string"
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
1011
|
+
stepMessageAttributes: {
|
|
1012
|
+
type: "object",
|
|
1013
|
+
minProperties: 1,
|
|
1014
|
+
patternProperties: {
|
|
1015
|
+
[strNotEmptyRegex]: {
|
|
1016
|
+
type: "object",
|
|
1017
|
+
required: ["propertyName", "type"],
|
|
1018
|
+
properties: {
|
|
1019
|
+
propertyName: {
|
|
1020
|
+
type: "string"
|
|
1021
|
+
},
|
|
1022
|
+
type: {
|
|
1023
|
+
type: "string"
|
|
1024
|
+
},
|
|
1025
|
+
objectField: {
|
|
1026
|
+
type: "object",
|
|
1027
|
+
required: ["objType", "fieldName"],
|
|
1028
|
+
properties: {
|
|
1029
|
+
objType: {
|
|
1030
|
+
type: "object",
|
|
1031
|
+
required: ["objectType", "serviceTag"],
|
|
1032
|
+
properties: {
|
|
1033
|
+
objectType: {
|
|
1034
|
+
type: "string",
|
|
1035
|
+
pattern: strNotEmptyRegex
|
|
1036
|
+
},
|
|
1037
|
+
serviceTag: {
|
|
1038
|
+
type: "string",
|
|
1039
|
+
pattern: strNotEmptyRegex
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
},
|
|
1043
|
+
fieldName: {
|
|
1044
|
+
type: "string"
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
},
|
|
1048
|
+
overwritePropertyName: {
|
|
1049
|
+
type: "string"
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
},
|
|
967
1055
|
flowSteps: {
|
|
968
1056
|
type: "object",
|
|
969
1057
|
minProperties: 1, // incase outputTopic === false
|
|
@@ -973,12 +1061,18 @@ const basicFlowSchema = {
|
|
|
973
1061
|
required: ["properties", "messageAttributes"],
|
|
974
1062
|
properties: {
|
|
975
1063
|
properties: {
|
|
976
|
-
|
|
977
|
-
|
|
1064
|
+
type: "array",
|
|
1065
|
+
items: {
|
|
1066
|
+
type: "string"
|
|
1067
|
+
},
|
|
1068
|
+
// minItems: 1
|
|
978
1069
|
},
|
|
979
1070
|
messageAttributes: {
|
|
980
|
-
|
|
981
|
-
|
|
1071
|
+
type: "array",
|
|
1072
|
+
items: {
|
|
1073
|
+
type: "string"
|
|
1074
|
+
},
|
|
1075
|
+
// minItems: 1
|
|
982
1076
|
}
|
|
983
1077
|
}
|
|
984
1078
|
}
|
|
@@ -994,6 +1088,9 @@ const basicFlowSchema = {
|
|
|
994
1088
|
},
|
|
995
1089
|
outputTopic: {
|
|
996
1090
|
type: "boolean"
|
|
1091
|
+
},
|
|
1092
|
+
externalEndpoint: {
|
|
1093
|
+
type: "boolean"
|
|
997
1094
|
}
|
|
998
1095
|
}
|
|
999
1096
|
}
|
|
@@ -178,6 +178,7 @@ function generateObjectSchemaForUpdate(objSchema) {
|
|
|
178
178
|
* @returns {Object} - objectSchema that has property for case update
|
|
179
179
|
*/
|
|
180
180
|
function generateObjectSchemaForCombineFieldNames(objSchema) {
|
|
181
|
+
console.log("generateObjectSchemaForCombineFieldNames", objSchema)
|
|
181
182
|
// generate data for case update
|
|
182
183
|
let initReturnObj = {
|
|
183
184
|
objectType: objSchema.objectType,
|
package/src/libs/RelSchemaLib.js
CHANGED
|
@@ -22,6 +22,7 @@ const lodash = require("lodash");
|
|
|
22
22
|
|
|
23
23
|
const getObjectSchema = require("../GetObjectSchema");
|
|
24
24
|
const { validateObjType } = require("./ValidateObjType");
|
|
25
|
+
const { OBJECT_SCHEMA_BUCKET_NAME } = require("../Consts");
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* Recursively creates an object type hierarchy by traversing through the schema
|
|
@@ -36,7 +37,7 @@ const { validateObjType } = require("./ValidateObjType");
|
|
|
36
37
|
* @returns {Promise<string[]>} A promise that resolves to an array representing the object type hierarchy.
|
|
37
38
|
* @throws {NoRetryError} Throws an error if the maximum iteration limit (20) is reached.
|
|
38
39
|
*/
|
|
39
|
-
async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, iter = 1) {
|
|
40
|
+
async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, bucketName = OBJECT_SCHEMA_BUCKET_NAME, iter = 1) {
|
|
40
41
|
if (iter >= 20) {
|
|
41
42
|
// throw NoRetryError("createObjTypeHierarchy reach limit iteration");
|
|
42
43
|
return {
|
|
@@ -62,7 +63,7 @@ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy
|
|
|
62
63
|
objTypeHierarchy = passObjTypeHierarchy;
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
const objectSchemaResult = await getObjectSchema.getObjSchemaWithoutHierarchy(getSchemaFn, objType);
|
|
66
|
+
const objectSchemaResult = await getObjectSchema.getObjSchemaWithoutHierarchy(getSchemaFn, objType, bucketName);
|
|
66
67
|
|
|
67
68
|
|
|
68
69
|
if (objectSchemaResult.errorFounds.length > 0) {
|
|
@@ -78,7 +79,7 @@ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy
|
|
|
78
79
|
iter++;
|
|
79
80
|
objTypeHierarchy.push(objectSchema.extendObjType);
|
|
80
81
|
|
|
81
|
-
let extendResult = await createObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, objTypeHierarchy, iter);
|
|
82
|
+
let extendResult = await createObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, [objTypeHierarchy], bucketName, iter);
|
|
82
83
|
|
|
83
84
|
if (extendResult.errorFounds.length > 0) {
|
|
84
85
|
return {
|
|
@@ -108,7 +109,7 @@ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy
|
|
|
108
109
|
* @returns {Promise<object[]>} A promise that resolves to an array of refactored links matching the object types.
|
|
109
110
|
* @throws {NoRetryError} Throws an error if the input parameters are invalid.
|
|
110
111
|
*/
|
|
111
|
-
async function findLinksByObjTypes(getSchemaFn, objTypes, relationshipLinks) {
|
|
112
|
+
async function findLinksByObjTypes(getSchemaFn, objTypes, relationshipLinks, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
|
|
112
113
|
|
|
113
114
|
if (!Array.isArray(relationshipLinks)) {
|
|
114
115
|
return {
|
|
@@ -144,8 +145,8 @@ async function findLinksByObjTypes(getSchemaFn, objTypes, relationshipLinks) {
|
|
|
144
145
|
const secondObjType = objTypes[1];
|
|
145
146
|
|
|
146
147
|
// first create hierarchy of each objType
|
|
147
|
-
const firstObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[0]);
|
|
148
|
-
const secondObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[1]);
|
|
148
|
+
const firstObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[0], [objTypes[0]], bucketName);
|
|
149
|
+
const secondObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[1], [objTypes[1]], bucketName);
|
|
149
150
|
|
|
150
151
|
if (firstObjTypeTree.errorFounds.length > 0) {
|
|
151
152
|
return {
|