@izara_project/izara-market-library-service-schemas 1.0.9 → 1.0.11

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.
Files changed (64) hide show
  1. package/package.json +1 -1
  2. package/src/GenerateCodeLibs/src/Consts.js +12 -12
  3. package/src/GenerateCodeLibs/src/GenerateCodeLibs.js +63 -17
  4. package/src/TemplateManager/src/FindData/mainFunction/template.ejs +0 -7
  5. package/src/TemplateManager/src/OutPerActionComplete/OutCreateComplete/functionYaml/data.js +4 -3
  6. package/src/TemplateManager/src/OutPerActionComplete/OutCreateComplete/functionYaml/template.ejs +1 -1
  7. package/src/TemplateManager/src/OutPerActionComplete/OutCreateComplete/handler/data.js +0 -2
  8. package/src/TemplateManager/src/OutPerActionComplete/OutCreateComplete/mainFunction/template.ejs +17 -14
  9. package/src/TemplateManager/src/OutPerActionComplete/OutDeleteComplete/functionYaml/data.js +4 -3
  10. package/src/TemplateManager/src/OutPerActionComplete/OutDeleteComplete/functionYaml/template.ejs +1 -1
  11. package/src/TemplateManager/src/OutPerActionComplete/OutDeleteComplete/handler/data.js +0 -2
  12. package/src/TemplateManager/src/OutPerActionComplete/OutDeleteComplete/mainFunction/template.ejs +5 -2
  13. package/src/TemplateManager/src/OutPerActionComplete/OutUpdateComplete/functionYaml/data.js +4 -2
  14. package/src/TemplateManager/src/OutPerActionComplete/OutUpdateComplete/functionYaml/template.ejs +1 -1
  15. package/src/TemplateManager/src/OutPerActionComplete/OutUpdateComplete/handler/data.js +0 -2
  16. package/src/TemplateManager/src/OutPerActionComplete/OutUpdateComplete/mainFunction/template.ejs +5 -1
  17. package/src/TemplateManager/src/PerActionEndpoint/FunctionYaml/HdrApi/data.js +1 -1
  18. package/src/TemplateManager/src/PerActionEndpoint/FunctionYaml/HdrDsq/data.js +1 -1
  19. package/src/TemplateManager/src/PerActionEndpoint/FunctionYaml/HdrInv/data.js +1 -1
  20. package/src/TemplateManager/src/PerActionEndpoint/FunctionYaml/HdrSqs/data.js +3 -3
  21. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/template.ejs +1 -1
  22. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/template.ejs +6 -2
  23. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/template.ejs +1 -1
  24. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/template.ejs +2 -2
  25. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Create/template.ejs +52 -11
  26. package/src/TemplateManager/src/ProcessLogical/ProcessLogicalYaml/data.js +2 -2
  27. package/src/TemplateManager/src/ProcessLogicalPagination/FunctionYaml/HdrDsq/data.js +2 -2
  28. package/src/TemplateManager/src/ProcessLogicalPagination/FunctionYaml/HdrSqs/data.js +2 -2
  29. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/functionYaml/HdrApi/data.js +2 -2
  30. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/functionYaml/HdrDsq/data.js +2 -2
  31. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/functionYaml/HdrInv/data.js +2 -2
  32. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/functionYaml/HdrSqs/data.js +2 -3
  33. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/mainFunction/data.js +2 -0
  34. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/mainFunction/template.ejs +63 -23
  35. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/perAction/HdrApi/template.ejs +45 -28
  36. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/perAction/HdrDsq/template.ejs +42 -21
  37. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/perAction/HdrInv/template.ejs +41 -22
  38. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationship/perAction/HdrSqs/template.ejs +42 -21
  39. package/src/TemplateManager/src/RelationshipPerAction/CreateRelationship/createRelationshipComplete/functionYaml/data.js +2 -2
  40. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationship/functionYaml/HdrApi/data.js +2 -2
  41. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationship/functionYaml/HdrDsq/data.js +2 -2
  42. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationship/functionYaml/HdrInv/data.js +2 -2
  43. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationship/functionYaml/HdrSqs/data.js +2 -2
  44. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationship/mainFunction/data.js +2 -0
  45. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationship/mainFunction/template.ejs +1 -1
  46. package/src/TemplateManager/src/RelationshipPerAction/DeleteRelationship/DeleteRelationshipComplete/functionYaml/data.js +2 -2
  47. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRalationshipComplete/functionYaml/data.js +2 -2
  48. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrApi/data.js +2 -2
  49. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrDsq/data.js +2 -2
  50. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrInv/data.js +2 -2
  51. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrSqs/data.js +2 -2
  52. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/mainFunction/data.js +1 -1
  53. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/mainFunction/template.ejs +1 -1
  54. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/perAction/HdrDsq/template.ejs +1 -1
  55. package/src/TemplateManager/src/RelationshipPerAction/UpdateRelationshipSchema/updateRelationship/perAction/HdrSqs/template.ejs +1 -1
  56. package/src/TemplateManager/src/ResourceYaml/sns-out/defaultSnsOutForFindDataAndProcessLogical.js +2 -2
  57. package/src/TemplateManager/src/TranslateIdReq/ProcessingTranslateIds/functionYaml/data.js +2 -2
  58. package/src/TemplateManager/src/TranslateIdReq/ProcessingTranslateIds/mainFunction/template.ejs +2 -36
  59. package/src/TemplateManager/src/TranslateIdReq/TranslateIds/functionYaml/HdrDsq/data.js +2 -2
  60. package/src/TemplateManager/src/TranslateIdReq/TranslateIds/functionYaml/HdrSqs/data.js +2 -2
  61. package/src/TemplateManager/src/TranslateIdReq/TranslateIds/mainFunction/template.ejs +7 -17
  62. package/src/TemplateManager/src/externalService/LambdaRole/data.js +7 -6
  63. package/src/TemplateManager/src/libs/Consts.js +21 -1
  64. package/src/TemplateManager/src/CreateRelationship/createRelationship/functionYaml/HdrApi/data.js +0 -119
@@ -58,6 +58,7 @@ const PREFIX = {
58
58
  const { TOPIC_NAME_GENERATE_CODE, TOPIC_NAME_GRAPH_HANDLER, GRAPH_HANDLER_SERVICE_NAME } = require('@izara_project/izara-market-library-service-schemas/src/GenerateCodeLibs/src/Consts')
59
59
  const { createDataDetailsLib } = require('@izara_project/izara-market-library-service-schemas/src/GenerateCodeLibs/src/GenerateCodeLibs')
60
60
  const { createLinkTypeId } = require('@izara_project/izara-core-library-service-schemas/src/Utils');
61
+ const { findLinksByObjTypes } = require("@izara_project/izara-core-library-service-schemas/src/libs/RelSchemaLib")
61
62
 
62
63
  /**
63
64
  - all storageType( DB and Graph) use objInstance({identifiers,fields})
@@ -104,6 +105,7 @@ module.exports.<%- functionName %>Main = async (
104
105
  const SERVICE_TAG = process.env.iz_serviceTag;
105
106
  //(<beforeQuery>)
106
107
  //(</beforeQuery>)
108
+
107
109
  const MAIN_OBJTYPE = {
108
110
  objectType: OBJECT_TYPE,
109
111
  serviceTag: SERVICE_TAG
@@ -124,11 +126,14 @@ module.exports.<%- functionName %>Main = async (
124
126
  let createDataDetails = await createDataDetailsLib(_izContext, objectSchemas);
125
127
  _izContext.logger.debug("createDataDetails is =", createDataDetails);
126
128
 
129
+ let checkCorrectLinks = [];
130
+
127
131
  //validate linkType
128
132
  if ((requestParams.hasOwnProperty("relationships")) && (requestParams.relationships.length > 0)) {
129
133
 
130
134
  for (let relationshipProperties of requestParams.relationships) {
131
- _izContext.logger.debug("relType", relationshipProperties.relType)
135
+ _izContext.logger.debug("relationshipProperties", relationshipProperties);
136
+ _izContext.logger.debug("relType", relationshipProperties.relType);
132
137
  let getObjectRelationship = await getObjectSchema.getRelationshipSchemaWithCache(
133
138
  _izContext,
134
139
  relationshipProperties.relType
@@ -142,6 +147,40 @@ module.exports.<%- functionName %>Main = async (
142
147
  }
143
148
  }
144
149
  }
150
+ const links = await findLinksByObjTypes(_izContext, [MAIN_OBJTYPE, relationshipProperties.targetObjType], getObjectRelationship.links);
151
+ _izContext.logger.debug("links", links)
152
+
153
+ if (!links.length) {
154
+ errorsFound.push(`not found link between ${JSON.stringify({ mainObjType: MAIN_OBJTYPE })} and ${JSON.stringify({ toObjType: relationshipProperties.targetObjType })} `)
155
+ }
156
+
157
+ for (let link of links) {
158
+ const { serviceTag: fromServiceTag, objectType: fromObjectType } = MAIN_OBJTYPE;
159
+ const { serviceTag: toServiceTag, objectType: toObjectType } = relationshipProperties.targetObjType
160
+
161
+ const { serviceTag: firstServiceTag, objectType: firstObjectType } = link.from.objType;
162
+ const { serviceTag: secondServiceTag, objectType: secondObjectType } = link.to.objType
163
+
164
+ const matchesFromTo =
165
+ fromServiceTag === firstServiceTag && fromObjectType === firstObjectType
166
+ && toServiceTag === secondServiceTag && toObjectType === secondObjectType;
167
+
168
+ const matchesToFrom =
169
+ fromServiceTag === secondServiceTag && fromObjectType === secondObjectType
170
+ && toServiceTag === firstServiceTag && toObjectType === firstObjectType
171
+
172
+ if ((relationshipProperties.relationshipDirection === "from" && matchesFromTo) ||
173
+ (relationshipProperties.relationshipDirection === "to" && matchesToFrom)) {
174
+ checkCorrectLinks.push(true)
175
+ } else {
176
+ checkCorrectLinks.push(false)
177
+ }
178
+ }
179
+ }
180
+ }
181
+ for (const [index, checkCorrectLink] of checkCorrectLinks.entries()) {
182
+ if (checkCorrectLink === false) {
183
+ errorsFound.push(`relationship direction ${JSON.stringify(requestParams.relationships[index])} is invalid`)
145
184
  }
146
185
  }
147
186
 
@@ -151,6 +190,7 @@ module.exports.<%- functionName %>Main = async (
151
190
  let objectRelationshipSchema = await getObjectSchema.getRequiredOnCreateLinksWithCache(_izContext, MAIN_OBJTYPE);
152
191
  _izContext.logger.debug("objectRelationshipSchema", objectRelationshipSchema);
153
192
 
193
+ // validate requiredOnCreateLinks
154
194
  let filteredRequiredOnCreatedLinks = [];
155
195
 
156
196
  await Promise.all(
@@ -181,10 +221,10 @@ module.exports.<%- functionName %>Main = async (
181
221
  for (const requireLink of filteredRequiredOnCreatedLinks) {
182
222
  const requiredOnCreateLinkTypeId = createLinkTypeId(
183
223
  _izContext,
184
- [
185
- MAIN_OBJTYPE, requireLink.other.objType
186
- ],
187
- requireLink.relType
224
+ MAIN_OBJTYPE,
225
+ requireLink.other.objType,
226
+ requireLink.relType,
227
+ requireLink.base.direction
188
228
  );
189
229
 
190
230
  Object.assign(requiredOnCreateLinks, {
@@ -195,10 +235,10 @@ module.exports.<%- functionName %>Main = async (
195
235
  for (const createRelationship of requestParams.relationships) {
196
236
  const onCreateLinkTypeId = createLinkTypeId(
197
237
  _izContext,
198
- [
199
- MAIN_OBJTYPE, createRelationship.targetObjType
200
- ],
201
- createRelationship.relType
238
+ MAIN_OBJTYPE,
239
+ createRelationship.targetObjType,
240
+ createRelationship.relType,
241
+ createRelationship.relationshipDirection
202
242
  );
203
243
 
204
244
  if (!requiredOnCreateLinks.hasOwnProperty(onCreateLinkTypeId)) {
@@ -226,6 +266,7 @@ module.exports.<%- functionName %>Main = async (
226
266
  }
227
267
  _izContext.logger.debug("createLinkTypeIds", createLinkTypeIds);
228
268
  _izContext.logger.debug("requiredOnCreateLinks", requiredOnCreateLinks);
269
+ // end validate
229
270
 
230
271
  let objInstanceFull = {
231
272
  identifiers: {},
@@ -393,7 +434,7 @@ module.exports.<%- functionName %>Main = async (
393
434
  _izContext.logger.debug("::::::Graphanler::::::", { storageTag, objInstanceFull });
394
435
 
395
436
  // allStorageTagComplete = false;
396
- allAwaitingStepsId.push(asyncFlowSharedLib.createAwaitingStepId(
437
+ allAwaitingStepsId.push(await asyncFlowSharedLib.createAwaitingStepId(
397
438
  (hash({
398
439
  objType: MAIN_OBJTYPE,
399
440
  graphServerTag: storageTag,
@@ -522,7 +563,7 @@ module.exports.<%- functionName %>Main = async (
522
563
  return {
523
564
  objType: MAIN_OBJTYPE,
524
565
  fieldNames: requestParams.fieldNames,
525
- relationship: requestParams.relationships,
566
+ relationships: requestParams.relationships,
526
567
  status: "complete",
527
568
  }
528
569
  }
@@ -26,7 +26,7 @@ const serviceConfig = serviceSchemas.serviceConfig;
26
26
 
27
27
  const { HANDLER, STORAGE_TYPES, ACTIONS } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
28
28
  const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../MainLibs/src/Utils")
29
- const { createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, LAMBDA_RESOURCE, FUNCTION_NAME, DYNAMO_RESOURCE, SNS_RESOURCE, defaultIamRolePerAction, shortNameHandler } = require("../../libs/Consts");
29
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, LAMBDA_RESOURCE, FUNCTION_NAME, DYNAMO_RESOURCE, SNS_RESOURCE, defaultIamRolePerAction, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../libs/Consts");
30
30
 
31
31
  /**
32
32
  * receive objectSchema
@@ -130,7 +130,7 @@ async function data(_izContext, objectSchemas, srcPath) {
130
130
  resourceLocation: SOURCE_PATH.resourceLocationProcessLogical,
131
131
  handlerType: HANDLER.hdrSqs,
132
132
  additionalResourcePermission,
133
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(HANDLER.hdrSqs))
133
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.processLogical) + upperCase(shortNameHandler(HANDLER.hdrSqs))
134
134
  },
135
135
  setting: {
136
136
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -22,7 +22,7 @@ const path = require('path');
22
22
  const templatePath = path.join(__dirname, "./template.ejs")
23
23
 
24
24
  const { HANDLER, STORAGE_TYPES, ACTIONS } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
25
- const { createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, defaultIamRolePerAction, shortNameHandler } = require("../../../libs/Consts");
25
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, defaultIamRolePerAction, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../../libs/Consts");
26
26
  const { firstLetterUpperCase: upperCase } = require('../../../../../MainLibs/src/Utils');
27
27
 
28
28
  /**
@@ -123,7 +123,7 @@ async function data(_izContext, objectSchemas, srcPath) {
123
123
  resourceLocation: SOURCE_PATH.resourceLocationProcessLogical,
124
124
  handlerType: HANDLER.hdrDsq,
125
125
  additionalResourcePermission,
126
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(HANDLER.hdrDsq))
126
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.paginateProcessLogical) + upperCase(shortNameHandler(HANDLER.hdrDsq))
127
127
  },
128
128
  setting: {
129
129
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -22,7 +22,7 @@ const path = require('path');
22
22
  const templatePath = path.join(__dirname, "./template.ejs")
23
23
 
24
24
  const { HANDLER, STORAGE_TYPES, ACTIONS } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
25
- const { createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, DYNAMO_RESOURCE, defaultIamRolePerAction, SNS_RESOURCE, shortNameHandler } = require("../../../libs/Consts");
25
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, DYNAMO_RESOURCE, defaultIamRolePerAction, SNS_RESOURCE, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../../libs/Consts");
26
26
  const { firstLetterUpperCase: upperCase } = require('../../../../../MainLibs/src/Utils');
27
27
 
28
28
  /**
@@ -125,7 +125,7 @@ async function data(_izContext, objectSchemas, srcPath) {
125
125
  resourceLocation: SOURCE_PATH.resourceLocationProcessLogical,
126
126
  handlerType: HANDLER.hdrSqs,
127
127
  additionalResourcePermission,
128
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(HANDLER.hdrSqs))
128
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.paginateProcessLogical) + upperCase(shortNameHandler(HANDLER.hdrSqs))
129
129
  },
130
130
  setting: {
131
131
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -22,7 +22,7 @@ const fs = require('fs');
22
22
  const { ACTIONS, HANDLER, STORAGE_TYPES } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
23
23
 
24
24
  const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../../../../MainLibs/src/Utils")
25
- const { createIamRole, resourceNames, RESOURCE_CLASSES, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler } = require("../../../../../libs/Consts");
25
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../../../../libs/Consts");
26
26
 
27
27
  const templatePath = path.join(__dirname, "./template.ejs")
28
28
 
@@ -70,7 +70,7 @@ function createParamForCreateSource(srcPath) {
70
70
  handlerType,
71
71
  additionalResourcePermission,
72
72
  resourceLocation: SOURCE_PATH.resourceLocationRelationshipPerAction,
73
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(handlerType))
73
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.createRel) + upperCase(shortNameHandler(handlerType))
74
74
  },
75
75
  setting: {
76
76
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -22,7 +22,7 @@ const fs = require('fs');
22
22
  const { ACTIONS, HANDLER, STORAGE_TYPES } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
23
23
 
24
24
  const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../../../../MainLibs/src/Utils")
25
- const { createIamRole, resourceNames, RESOURCE_CLASSES, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler } = require("../../../../../libs/Consts");
25
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../../../../libs/Consts");
26
26
 
27
27
  const templatePath = path.join(__dirname, './template.ejs')
28
28
 
@@ -83,7 +83,7 @@ function createParamForCreateSource(srcPath) {
83
83
  handlerType,
84
84
  additionalResourcePermission,
85
85
  resourceLocation: SOURCE_PATH.resourceLocationRelationshipPerAction,
86
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(handlerType))
86
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.createRel) + upperCase(shortNameHandler(handlerType))
87
87
  },
88
88
  setting: {
89
89
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -22,7 +22,7 @@ const fs = require('fs');
22
22
  const { ACTIONS, HANDLER, STORAGE_TYPES } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
23
23
 
24
24
  const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../../../../MainLibs/src/Utils")
25
- const { createIamRole, resourceNames, RESOURCE_CLASSES, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler } = require("../../../../../libs/Consts");
25
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../../../../libs/Consts");
26
26
 
27
27
  const templatePath = path.join(__dirname, './template.ejs')
28
28
 
@@ -68,7 +68,7 @@ function createParamForCreateSource(srcPath) {
68
68
  handlerType,
69
69
  additionalResourcePermission,
70
70
  resourceLocation: SOURCE_PATH.resourceLocationRelationshipPerAction,
71
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(handlerType))
71
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.createRel) + upperCase(shortNameHandler(handlerType))
72
72
  },
73
73
  setting: {
74
74
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -22,7 +22,7 @@ const fs = require('fs');
22
22
  const { ACTIONS, HANDLER, STORAGE_TYPES } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
23
23
 
24
24
  const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../../../../MainLibs/src/Utils")
25
- const { createIamRole, resourceNames, RESOURCE_CLASSES, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler } = require("../../../../../libs/Consts");
25
+ const { createIamRole, resourceNames, RESOURCE_CLASSES, SQS_RESOURCE, SOURCE_PATH, SAVE_FILE_NAME, FUNCTION_NAME, SNS_RESOURCE, defaultIamRolePerAction, awaitingMultipleStepsRole, shortNameHandler, SHORT_FUNCTION_NAME } = require("../../../../../libs/Consts");
26
26
 
27
27
  const templatePath = path.join(__dirname, './template.ejs')
28
28
 
@@ -82,7 +82,7 @@ function createParamForCreateSource(srcPath) {
82
82
  handlerType,
83
83
  additionalResourcePermission,
84
84
  resourceLocation: SOURCE_PATH.resourceLocationRelationshipPerAction,
85
- functionNameConfig: upperCase(functionName) + upperCase(shortNameHandler(handlerType))
85
+ functionNameConfig: upperCase(SHORT_FUNCTION_NAME.createRel) + upperCase(shortNameHandler(handlerType))
86
86
  },
87
87
  setting: {
88
88
  savePath: path.join(srcPath, SOURCE_PATH.appYaml),
@@ -90,7 +90,6 @@ function createParamForCreateSource(srcPath) {
90
90
  fileExtension: '.yml',
91
91
  isAppend: true
92
92
  }
93
-
94
93
  }
95
94
  }
96
95
 
@@ -41,9 +41,11 @@ function data(_izContext, srcPath) {
41
41
 
42
42
 
43
43
  function createParamForCreateSource(srcPath) {
44
+ let functionName = FUNCTION_NAME.createRel
44
45
  return {
45
46
  templatePath: templatePath,
46
47
  templateData: {
48
+ functionName
47
49
  },
48
50
  setting: {
49
51
  savePath: path.join(srcPath, SOURCE_PATH.relationshipPerAction),
@@ -29,6 +29,7 @@ const asyncFlowSharedLib = require('@izara_project/izara-shared/src/AsyncFlowSha
29
29
 
30
30
  // const NoRetryError = require('@izara_project/izara-core-library-core/src/NoRetryError');
31
31
 
32
+ const { findLinksByObjTypes } = require("@izara_project/izara-core-library-service-schemas/src/libs/RelSchemaLib");
32
33
 
33
34
 
34
35
 
@@ -63,7 +64,7 @@ const {
63
64
  *
64
65
  * @returns {object} description of return value
65
66
  */
66
- module.exports.createRelationship = async (
67
+ module.exports.<%- functionName %> = async (
67
68
  _izContext,
68
69
  requestParams,
69
70
  callingFlowConfig = {},
@@ -79,8 +80,10 @@ module.exports.createRelationship = async (
79
80
 
80
81
 
81
82
  const {
82
- objects,
83
+ firstObject,
84
+ secondObject,
83
85
  relType,
86
+ relationshipDirection,
84
87
  relationshipProperties
85
88
  //(<requestparamCreateRel>)
86
89
  //(</requestparamCreateRel>)
@@ -117,8 +120,8 @@ module.exports.createRelationship = async (
117
120
  }
118
121
  }
119
122
 
120
- await validateIdentifiersExists(_izContext, objects[0].objType, objects[0].identifiers);
121
- await validateIdentifiersExists(_izContext, objects[1].objType, objects[1].identifiers);
123
+ await validateIdentifiersExists(_izContext, firstObject.objType, firstObject.identifiers);
124
+ await validateIdentifiersExists(_izContext, secondObject.objType, secondObject.identifiers);
122
125
  // finished validate object and identifiers
123
126
 
124
127
  //(<afterValidateCreateRel>)
@@ -130,6 +133,37 @@ module.exports.createRelationship = async (
130
133
  const relationshipSchema = await getRelationshipSchemaWithCache(_izContext, relType);
131
134
  _izContext.logger.debug("relationshipSchema: ", relationshipSchema);
132
135
 
136
+ const links = await findLinksByObjTypes(_izContext, [firstObject.objType, secondObject.objType], relationshipSchema.links)
137
+ _izContext.logger.debug("links", links)
138
+ if (!links.length) {
139
+ errorsFound.push(`not found link between ${JSON.stringify({ firstObject: firstObject.objType })} ${JSON.stringify({ secondObject: secondObject.objType })}`)
140
+ };
141
+
142
+ let checkCorrectLink = false;
143
+ for (let link of links) {
144
+ const { serviceTag: fromServiceTag, objectType: fromObjectType } = link.from.objType;
145
+ const { serviceTag: toServiceTag, objectType: toObjType } = link.to.objType;
146
+
147
+ const { serviceTag: firstServiceTag, objectType: firstObjectType } = firstObject.objType
148
+ const { serviceTag: secondServiceTag, objectType: secondObjectType } = secondObject.objType
149
+
150
+ const matchFromTo = fromServiceTag === firstServiceTag && fromObjectType === firstObjectType &&
151
+ toServiceTag === secondServiceTag && toObjType === secondObjectType;
152
+
153
+ const matchToFrom = fromServiceTag === secondServiceTag && fromObjectType === secondObjectType &&
154
+ toServiceTag === firstServiceTag && toObjType === firstObjectType;
155
+
156
+ if ((relationshipDirection === "from" && matchFromTo)
157
+ || (relationshipDirection === "to" && matchToFrom)) {
158
+ checkCorrectLink = true
159
+ break;
160
+ }
161
+ };
162
+
163
+ if (checkCorrectLink == false) {
164
+ errorsFound.push(`Wrong Relationship Direction`)
165
+ };
166
+
133
167
  let targetStorageResources = [];
134
168
 
135
169
  if (relationshipSchema) {
@@ -139,8 +173,8 @@ module.exports.createRelationship = async (
139
173
  const { serviceTag: fromServiceTag, objectType: fromObjectType } = from.objType
140
174
  const { serviceTag: toServiceTag, objectType: toObjectType } = to.objType
141
175
 
142
- const { serviceTag: firstServiceTag, objectType: firstObjectType } = objects[0].objType;
143
- const { serviceTag: secondServiceTag, objectType: secondObjectType } = objects[1].objType;
176
+ const { serviceTag: firstServiceTag, objectType: firstObjectType } = firstObject.objType;
177
+ const { serviceTag: secondServiceTag, objectType: secondObjectType } = secondObject.objType;
144
178
 
145
179
  // find exists link
146
180
  if (
@@ -161,7 +195,7 @@ module.exports.createRelationship = async (
161
195
  if (usedStorageResource.storageType === consts.STORAGE_TYPES.graph) {
162
196
  const graphServiceTag = await getGraphServiceTagWithCache(_izContext, usedStorageResource.graphServerTag);
163
197
  if (!graphServiceTag) {
164
- errorsFound.push(`storageResourceTag:${storageResourceTag} invalid, not found graph serviceTag from graphServerTag:${usedStorageResource.graphServerTag}`)
198
+ errorsFound.push(`storageResourceTag: ${storageResourceTag} invalid, not found graph serviceTag from graphServerTag: ${usedStorageResource.graphServerTag}`)
165
199
  }
166
200
 
167
201
  targetStorageResources.push({
@@ -187,7 +221,7 @@ module.exports.createRelationship = async (
187
221
  // validate properties exists with schema
188
222
  for (const propKey in relationshipProperties) {
189
223
  if (!relationshipSchema.fieldNames.hasOwnProperty(propKey)) {
190
- errorsFound.push(`property:${propKey} not exists in relationshipSchema`);
224
+ errorsFound.push(`property: ${propKey} not exists in relationshipSchema`);
191
225
  }
192
226
  }
193
227
 
@@ -195,12 +229,12 @@ module.exports.createRelationship = async (
195
229
  for (const [propName, propSetting] of Object.entries(relationshipSchema.fieldNames)) {
196
230
  if (propSetting.requiredOnCreate === true) {
197
231
  if (!relationshipProperties.hasOwnProperty(propName)) {
198
- errorsFound.push(`Missing requiredOnCreate property:${propKey}`);
232
+ errorsFound.push(`Missing requiredOnCreate property: ${propKey}`);
199
233
  }
200
234
  }
201
235
 
202
236
  if (!propSetting.optionalOnCreate && !propSetting.requiredOnCreate && relationshipProperties.hasOwnProperty(propName)) {
203
- errorsFound.push(`property:${propName} cannot create`);
237
+ errorsFound.push(`property: ${propName} cannot create`);
204
238
  }
205
239
  }
206
240
 
@@ -213,9 +247,11 @@ module.exports.createRelationship = async (
213
247
  if (errorsFound.length) {
214
248
 
215
249
  let createRelCompleteMsg = {
216
- objects: objects,
250
+ firstObject: firstObject,
251
+ secondObject: secondObject,
217
252
  relType: relType,
218
- relationshipProperties: relationshipProperties,
253
+ relationshipDirection,
254
+ relationshipProperties,
219
255
  //(<inCreateRelCompleteMsgCrateRel>)
220
256
  //(</inCreateRelCompleteMsgCrateRel>)
221
257
  status: 'error',
@@ -244,7 +280,7 @@ module.exports.createRelationship = async (
244
280
 
245
281
 
246
282
  // before create awaitingStepId per graph storageResource
247
- const linkTypeId = createLinkTypeId(_izContext, [objects[0].objType, objects[1].objType], relType);
283
+ const linkTypeId = createLinkTypeId(_izContext, firstObject.objType, secondObject.objType, relType, relationshipDirection);
248
284
 
249
285
  let usedGraphServiceTag = []; // collect used graph serviceTag, use to check duplicate graph serviceTag across graph serverTag
250
286
  let targetGraphStorageResources = []; // collect used graph storageResources, filtered duplicate graphServiceTag from graphServerTag out
@@ -284,21 +320,23 @@ module.exports.createRelationship = async (
284
320
  );
285
321
 
286
322
  // prepare message body
287
- let updateRelMessageBody = {
288
- objects: objects,
323
+ let createRelMessageBody = {
324
+ firstObject: firstObject,
325
+ secondObject: secondObject,
289
326
  relType: relType,
327
+ relationshipDirection,
290
328
  relationshipProperties
291
329
  //(<inUpdateRelMessageBodyCreateRel>)
292
330
  //(</inUpdateRelMessageBodyCreateRel>)
293
331
  }
294
- _izContext.logger.debug('createRelMessageBody: ', updateRelMessageBody);
332
+ _izContext.logger.debug('createRelMessageBody: ', createRelMessageBody);
295
333
 
296
334
  await Promise.all(
297
335
  targetGraphStorageResources.map(async (storageResource) => {
298
336
  if (storageResource.storageType === consts.STORAGE_TYPES.graph) {
299
337
 
300
- updateRelMessageBody = callingFlowSharedLib.addCallingFlowToSnsRequestMessageObject(
301
- updateRelMessageBody,
338
+ createRelMessageBody = callingFlowSharedLib.addCallingFlowToSnsRequestMessageObject(
339
+ createRelMessageBody,
302
340
  callingFlowSharedLib.addParentCallingFlowConfig(
303
341
  callingFlowConfig, // receive parent callingFlowConfig.
304
342
  callingFlowSharedLib.createCallingFlowConfig( // callinfflow own service
@@ -309,10 +347,10 @@ module.exports.createRelationship = async (
309
347
  )
310
348
  )
311
349
  );
312
- _izContext.logger.debug("messageObject before send message:", updateRelMessageBody)
350
+ _izContext.logger.debug("messageObject before send message:", createRelMessageBody)
313
351
 
314
352
  let messageToInUpdateRelationship = {
315
- Message: JSON.stringify(updateRelMessageBody),
353
+ Message: JSON.stringify(createRelMessageBody),
316
354
  TopicArn: await snsSharedLib.snsTopicArn(_izContext, TOPIC_NAME_GRAPH_HANDLER.inCreateRel, storageResource.graphServiceTag),
317
355
  };
318
356
  _izContext.logger.debug("RequestParams before send to sqs messageToInUpdateRelationship ::::::: ", messageToInUpdateRelationship);
@@ -326,10 +364,12 @@ module.exports.createRelationship = async (
326
364
  }
327
365
 
328
366
  return {
329
- objects,
330
- relType,
367
+ firstObject: firstObject,
368
+ secondObject: secondObject,
369
+ relType: relType,
370
+ relationshipDirection,
331
371
  relationshipProperties,
332
- errorFounds: errorsFound
372
+ status: "complete"
333
373
  };
334
374
 
335
375
 
@@ -27,28 +27,41 @@ const <%- functionName %> = require('./<%- firstLetterUpperCase(functionName) %>
27
27
  // validate event params in middleware before into function
28
28
  let validatorSchema = {
29
29
  type: "object",
30
- required: ["objects", "relId", "relType", "relationshipProperties"],
30
+ required: ["firstObject", "secondObject", "relType", "relationshipDirection"],
31
31
  properties: {
32
- objects: {
33
- type: "array",
34
- minItems: 2,
35
- maxItems: 2,
36
- Items: {
37
- type: "object",
38
- required: ["objType", "identifiers"],
39
- properties: {
40
- objType: {
41
- type: "object",
42
- required: ["serviceTag", "objectType"],
43
- properties: {
44
- serviceTag: izara.validatorSchema.stringNotEmpty(),
45
- objectType: izara.validatorSchema.stringNotEmpty()
46
- }
47
- },
48
- identifiers: {
49
- type: "object",
50
- minproperties: 1
32
+ firstObject: {
33
+ type: "object",
34
+ required: ["objType", "identifiers"],
35
+ properties: {
36
+ objType: {
37
+ type: "object",
38
+ required: ["serviceTag", "objectType"],
39
+ properties: {
40
+ serviceTag: izara.validatorSchema.stringNotEmpty(),
41
+ objectType: izara.validatorSchema.stringNotEmpty()
51
42
  }
43
+ },
44
+ identifiers: {
45
+ type: "object",
46
+ minProperties: 1
47
+ }
48
+ }
49
+ },
50
+ secondObject: {
51
+ type: "object",
52
+ required: ["objType", "identifiers"],
53
+ properties: {
54
+ objType: {
55
+ type: "object",
56
+ required: ["serviceTag", "objectType"],
57
+ properties: {
58
+ serviceTag: izara.validatorSchema.stringNotEmpty(),
59
+ objectType: izara.validatorSchema.stringNotEmpty()
60
+ }
61
+ },
62
+ identifiers: {
63
+ type: "object",
64
+ minProperties: 1
52
65
  }
53
66
  }
54
67
  },
@@ -61,14 +74,17 @@ let validatorSchema = {
61
74
  type: 'string',
62
75
  pattern: "^[a-zA-Z0-9_-]+$",
63
76
  enum: [process.env.iz_serviceTag]
64
- }
77
+ },
65
78
  }
66
79
  },
67
- relId: izara.validatorSchema.stringNotEmpty(),
80
+ relationshipDirection: {
81
+ type: "string",
82
+ enum: ['from', "to"]
83
+ },
68
84
  relationshipProperties: {
69
- type: "object",
70
- minProperties: 1
71
- }
85
+ type: 'object',
86
+ default: {}
87
+ },
72
88
  }
73
89
  };
74
90
 
@@ -92,10 +108,11 @@ module.exports.main = middleware.wrap(async (event, context, callback) => {
92
108
  let lambdaFunctionResponse = await <%- functionName %>.<%- functionName %>(
93
109
  event._izContext, // correlationId/logger/integrationTestDetail/uniqueRequestId/userId
94
110
  {
95
- objects: event.objects,
111
+ firstObject: event.firstObject,
112
+ secondObject: event.secondObject,
96
113
  relType: event.relType,
97
- relId: event.relId,
98
- relationshipProperties: event.relationshipProperties
114
+ relationshipDirection: event.relationshipDirection,
115
+ relationshipProperties: event.relationshipProperties,
99
116
  }
100
117
  );
101
118