@izara_project/izara-market-library-service-schemas 1.0.2 → 1.0.4

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 (108) hide show
  1. package/package.json +5 -5
  2. package/src/GenerateCodeLibs/src/Consts.js +40 -0
  3. package/src/SourceManager/src/CreateSource.js +0 -1
  4. package/src/SourceManager/src/Utils.js +15 -1
  5. package/src/TemplateManager/src/FunctionYaml/HdrApi/data.js +170 -0
  6. package/src/TemplateManager/src/FunctionYaml/HdrApi/request.json +14 -0
  7. package/src/TemplateManager/src/FunctionYaml/HdrApi/template.ejs +33 -0
  8. package/src/TemplateManager/src/FunctionYaml/HdrDsq/data.js +180 -0
  9. package/src/TemplateManager/src/FunctionYaml/HdrDsq/request.json +19 -0
  10. package/src/TemplateManager/src/FunctionYaml/HdrDsq/template.ejs +30 -0
  11. package/src/TemplateManager/src/FunctionYaml/HdrInv/data.js +169 -0
  12. package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrInv.exampleData.js → FunctionYaml/HdrInv/example req.js } +3 -3
  13. package/src/TemplateManager/src/FunctionYaml/HdrInv/request.json +14 -0
  14. package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrInv.ejs → FunctionYaml/HdrInv/template.ejs} +5 -5
  15. package/src/TemplateManager/src/FunctionYaml/HdrSqs/data.js +182 -0
  16. package/src/TemplateManager/src/FunctionYaml/HdrSqs/request.json +19 -0
  17. package/src/TemplateManager/src/FunctionYaml/HdrSqs/template.ejs +30 -0
  18. package/src/TemplateManager/src/GenerateCode(Old).js +135 -0
  19. package/src/TemplateManager/src/GenerateCode.js +175 -15
  20. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/data.js +100 -0
  21. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/request.json +7 -0
  22. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/template.ejs +76 -0
  23. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/data.js +109 -0
  24. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/request.json +7 -0
  25. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/template.ejs +105 -0
  26. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/data.js +102 -0
  27. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/request.json +7 -0
  28. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/template.ejs +82 -0
  29. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/data.js +102 -0
  30. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/request.json +7 -0
  31. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/template.ejs +124 -0
  32. package/src/TemplateManager/src/PerActionEndpoint/Handler/testRequest.json +5 -0
  33. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Get/data.js +88 -0
  34. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Get/request.json +5 -0
  35. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Get/template.ejs +219 -0
  36. package/src/TemplateManager/src/ResourceYaml/dynamodb/awaitingMultipleStepData.js +98 -0
  37. package/src/TemplateManager/src/{MainResourcesYaml/TemplateAndData/DynamoDbMain/Data/MainDynamoDbYamlData.js → ResourceYaml/dynamodb/mainResourcePerObjectSchemaData.js} +66 -46
  38. package/src/TemplateManager/src/ResourceYaml/dynamodb/processLogicalAndFindData.js +103 -0
  39. package/src/TemplateManager/src/ResourceYaml/dynamodb/request.json +7 -0
  40. package/src/TemplateManager/src/ResourceYaml/dynamodb/template.ejs +31 -0
  41. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/defaultSnsInSqsForFindDataAndProcessLogical.js +81 -0
  42. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/request.json +4 -0
  43. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/snsAndSqsPerActiondata.js +108 -0
  44. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/snsTemplate.ejs +59 -0
  45. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/sqsTemplate.ejs +43 -0
  46. package/src/TemplateManager/src/ResourceYaml/sns-out/data.js +89 -0
  47. package/src/TemplateManager/src/ResourceYaml/sns-out/request.json +3 -0
  48. package/src/TemplateManager/src/ResourceYaml/sns-out/template.ejs +10 -0
  49. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/functionYaml/data.js +151 -0
  50. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/functionYaml/request.json +3 -0
  51. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/functionYaml/template.ejs +33 -0
  52. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/handler/HdrSqs/data.js +76 -0
  53. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/handler/HdrSqs/template.ejs +127 -0
  54. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/mainFunction/data.js +55 -0
  55. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/mainFunction/request.json +1 -0
  56. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/mainFunction/template.ejs +140 -0
  57. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/sns-in-sqs/data.js +75 -0
  58. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/sns-in-sqs/request.json +3 -0
  59. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/sns-in-sqs/template.ejs +45 -0
  60. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/sns-out/data.js +70 -0
  61. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRalationshipComplete/sns-out/request.json +3 -0
  62. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrApi/data.js +127 -0
  63. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrApi/template.ejs +33 -0
  64. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrDsq/data.js +148 -0
  65. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrInv/data.js +125 -0
  66. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/functionYaml/HdrSqs/data.js +148 -0
  67. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/mainFunction/data.js +80 -0
  68. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/mainFunction/request.json +1 -0
  69. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/mainFunction/template.ejs +324 -0
  70. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrApi/data.js +72 -0
  71. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrApi/request.json +7 -0
  72. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrApi/template.ejs +120 -0
  73. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrDsq/data.js +73 -0
  74. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrDsq/request.json +7 -0
  75. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrDsq/template.ejs +167 -0
  76. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrInv/data.js +73 -0
  77. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrInv/request.json +5 -0
  78. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrInv/template.ejs +126 -0
  79. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrSqs/data.js +73 -0
  80. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrSqs/request.json +7 -0
  81. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/HdrSqs/template.ejs +146 -0
  82. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/perAction/request.json +31 -0
  83. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/sns-in-sqs/data.js +91 -0
  84. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/sns-in-sqs/request.json +3 -0
  85. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/sns-out/data.js +70 -0
  86. package/src/TemplateManager/src/UpdateRelationshipSchema/updateRelationship/sns-out/request.json +3 -0
  87. package/src/TemplateManager/src/externalService/LambdaRole/data.js +193 -0
  88. package/src/TemplateManager/src/externalService/LambdaRole/request.json +18 -0
  89. package/src/TemplateManager/src/externalService/LambdaRole/template.ejs +56 -0
  90. package/src/TemplateManager/src/externalService/SnsTopicSubscriotions/data.js +96 -0
  91. package/src/TemplateManager/src/externalService/SnsTopicSubscriotions/request.json +12 -0
  92. package/src/TemplateManager/src/externalService/SnsTopicSubscriotions/template.ejs +10 -0
  93. package/src/TemplateManager/src/libs/Consts.js +32 -3
  94. package/src/TemplateManager/src/MainResourcesYaml/TemplateAndData/DynamoDbMain/Template/DynamoDb.ejs +0 -31
  95. package/src/TemplateManager/src/MainResourcesYaml/TemplateAndData/DynamoDbMain/Template/DynamoDb.exampleData.js +0 -12
  96. package/src/TemplateManager/src/PerActionEndpoint/CreateSourceData.js +0 -131
  97. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Create.js +0 -18
  98. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Delete.js +0 -18
  99. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Get.js +0 -18
  100. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Update.js +0 -18
  101. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Data/LambdaYamlData.js +0 -166
  102. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrSqs.ejs +0 -0
  103. /package/src/TemplateManager/src/{MainResourcesYaml → ResourceYaml}/CreateSourceData.js +0 -0
  104. /package/src/TemplateManager/src/{PerActionEndpoint/DataPerActionEndpoint.js → UpdateRelationshipSchema/updateRalationshipComplete/handler/HdrSqs/request.json} +0 -0
  105. /package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/Handler/Handler.js → UpdateRelationshipSchema/updateRelationship/functionYaml/HdrApi/request.json} +0 -0
  106. /package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplateData.js → UpdateRelationshipSchema/updateRelationship/functionYaml/HdrDsq/request.json} +0 -0
  107. /package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrApi.ejs → UpdateRelationshipSchema/updateRelationship/functionYaml/HdrInv/request.json} +0 -0
  108. /package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrDsq.ejs → UpdateRelationshipSchema/updateRelationship/functionYaml/HdrSqs/request.json} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@izara_project/izara-market-library-service-schemas",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Schemas for Izara Market project",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -20,10 +20,10 @@
20
20
  "testEnvironment": "node"
21
21
  },
22
22
  "dependencies": {
23
- "@izara_project/izara-core-library-core": "^1.0.8",
24
- "@izara_project/izara-core-library-logger": "^1.0.3",
25
- "@izara_project/izara-core-library-service-schemas": "^1.0.3",
26
- "@izara_project/izara-shared": "^1.0.76",
23
+ "@izara_project/izara-core-library-core": "^1.0.13",
24
+ "@izara_project/izara-core-library-logger": "^1.0.5",
25
+ "@izara_project/izara-core-library-service-schemas": "^1.0.7",
26
+ "@izara_project/izara-shared": "^1.0.96",
27
27
  "ejs": "^3.1.10",
28
28
  "js-beautify": "^1.15.1",
29
29
  "lodash": "^4.17.21",
@@ -0,0 +1,40 @@
1
+ /*
2
+ Copyright(C) 2021 Sven Mason < http://izara.io>
3
+
4
+ This program is free software: you can redistribute it and / or modify
5
+ it under the terms of the GNU Affero General Public License as
6
+ published by the Free Software Foundation, either version 3 of the
7
+ License, or(at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
12
+ GNU Affero General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Affero General Public License
15
+ along with this program.If not, see < http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ 'use strict';
19
+
20
+ // constant for updateRelationship
21
+
22
+ const PREFIX = {
23
+ updateRel: "updateRelationshipEndpoint"
24
+ }
25
+
26
+ const TOPIC_NAME_GRAPH_HANDLER = {
27
+ outUpdateRelationshipComplete: "OutUpdateRelationshipComplete",
28
+ inUpdateRel: "InUpdateRelationship"
29
+ }
30
+
31
+ const TOPIC_NAME_GENERATE_CODE = {
32
+ updateRelComplete: "UpdateRelationshipComplete"
33
+ }
34
+
35
+
36
+ module.exports = {
37
+ TOPIC_NAME_GENERATE_CODE,
38
+ TOPIC_NAME_GRAPH_HANDLER,
39
+ PREFIX
40
+ }
@@ -102,7 +102,6 @@ async function createSource(template, data, { savePath, hookPath, saveFileName,
102
102
  anyDoubleTagClass = TAG_CLASSES.ymlAnyDoubleTag;
103
103
  doubleTagClass = TAG_CLASSES.ymlDoubleTag;
104
104
  }
105
-
106
105
  let hookDataPath = hookPath ? hookPath : join(savePath, '../hook/');
107
106
 
108
107
  if (!fs.existsSync(savePath)) fs.mkdirSync(savePath, { recursive: true });
@@ -33,9 +33,23 @@ async function deleteFileInDir(directory) {
33
33
  }
34
34
  }
35
35
 
36
+ function deleteFile(filePath) {
37
+ if (fs.existsSync(filePath)) {
38
+ try {
39
+ // If the file exists, delete it
40
+ fs.unlinkSync(filePath);
41
+ console.log('File deleted successfully');
42
+ } catch (err) {
43
+ console.error(`Error deleting file: ${err.message}`);
44
+ }
45
+ } else {
46
+ console.log('File does not exist');
47
+ }
48
+ }
36
49
 
37
50
  module.exports = {
38
- deleteFileInDir
51
+ deleteFileInDir,
52
+ deleteFile
39
53
  }
40
54
 
41
55
 
@@ -0,0 +1,170 @@
1
+ /*
2
+ Copyright (C) 2020 Sven Mason <http://izara.io>
3
+
4
+ This program is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU Affero General Public License as
6
+ published by the Free Software Foundation, either version 3 of the
7
+ License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU Affero General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Affero General Public License
15
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ 'use strict';
19
+ const path = require('path');
20
+ const fs = require('fs');
21
+
22
+ const { ACTIONS, HANDLER, STORAGE_TYPES } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
23
+
24
+ const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../MainLibs/src/Utils")
25
+ const { DEFAULT_HANDLER_PER_ACTION, createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SOURCE_PATH } = require("../../libs/Consts");
26
+
27
+ const templatePath = path.join(__dirname, "./template.ejs")
28
+
29
+ function defaultIamRolePerAction() {
30
+
31
+ let defaultIamRole = [];
32
+
33
+
34
+ defaultIamRole.push(
35
+ createIamRole(
36
+ {
37
+ [RESOURCE_CLASSES.s3]: ["GetObject", "GetObjectVersion"],
38
+ },
39
+ [
40
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema/perServiceSchemas/*"),
41
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema/serviceConfig/ServiceNameConfig.json"),
42
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema/serviceConfig/GraphServerTags.json"),
43
+ ]
44
+ )
45
+ );
46
+
47
+ defaultIamRole.push(
48
+ createIamRole(
49
+ { [RESOURCE_CLASSES.s3]: ["ListBucket"] },
50
+ [
51
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema"),
52
+ ]
53
+ )
54
+ );
55
+ // console.log("defaultIamRole Api", defaultIamRole)
56
+ return defaultIamRole
57
+ }
58
+
59
+ /**
60
+ * receive objectSchema
61
+ * create data for hdrInv template
62
+ *
63
+ * @param {Object} objectSchema
64
+ * @return {{ templatePath, templateData, setting } }
65
+ */
66
+ function data(_izContext, objectSchema, srcPath) {
67
+ let createSourceArray = [];
68
+
69
+ for (const action of Object.values(ACTIONS)) {
70
+ if (objectSchema.overWriteHandlers?.[action]) {
71
+ // if have overWriteHander of action check hdrApi inside
72
+ if (objectSchema.overWriteHandlers[action].includes(HANDLER.hdrApi)) {
73
+ // create template data
74
+ const createSourceParam = createParamForCreateSource(objectSchema, action, srcPath)
75
+ createSourceArray.push(createSourceParam)
76
+ }
77
+ } else {
78
+ // if not have overWriteHander of action will use default handler
79
+ const defaultHandler = DEFAULT_HANDLER_PER_ACTION[action]
80
+ if (defaultHandler.includes(HANDLER.hdrApi)) {
81
+ // create template data and object for create source
82
+ const createSourceParam = createParamForCreateSource(objectSchema, action, srcPath)
83
+ createSourceArray.push(createSourceParam)
84
+ }
85
+ }
86
+ }
87
+ return createSourceArray;
88
+ }
89
+
90
+ function createParamForCreateSource(objectSchema, action, srcPath) {
91
+ let objectType = objectSchema.objectType;
92
+ let actionHandler = action;
93
+ let functionName = objectType + upperCase(actionHandler);
94
+ let additionalResourcePermission = defaultIamRolePerAction();
95
+ let tableForGetItem = [];
96
+ let hasGraphStorage = false;
97
+ for (let storageResource of Object.values(objectSchema.storageResources)) {
98
+ if (storageResource.storageType === STORAGE_TYPES.dynamoDB) {
99
+ // add IamRole for dynamodb depend on tableName in storageResources of objectSchema
100
+ tableForGetItem.push(resourceNames(RESOURCE_CLASSES.dynamoDbTable, storageResource.tableName));
101
+
102
+ } else if (storageResource.storageType === STORAGE_TYPES.graph) {
103
+ // find graph serviceName from graphServerTag or *GetNodeHdrInv ?
104
+
105
+ if (hasGraphStorage) {
106
+ continue;
107
+ } else {
108
+ hasGraphStorage = true;
109
+ }
110
+ }
111
+ }
112
+
113
+ if (tableForGetItem.length) {
114
+ additionalResourcePermission.push(
115
+ createIamRole(
116
+ { [RESOURCE_CLASSES.dynamoDbTable]: [DEFAULT_LAMBDA_ROLE_PER_ACTION[action].dynamoDbPermission] },
117
+ tableForGetItem
118
+ )
119
+ );
120
+ }
121
+ function httpEvent(lambdaActiom) {
122
+ return {
123
+ create: "put",
124
+ update: "post",
125
+ get: "post",
126
+ delete: "delete"
127
+ }[lambdaActiom]
128
+ }
129
+
130
+ let event = httpEvent(action)
131
+ // console.log("event:", event)
132
+
133
+ return {
134
+ templatePath: templatePath,
135
+ templateData: {
136
+ functionName: functionName,
137
+ resourceLocation: SOURCE_PATH.resourceLocationPerAction,
138
+ handlerType: "HdrApi",
139
+ additionalResourcePermission,
140
+ event: event,
141
+ objectType: objectType,
142
+ action: actionHandler
143
+ },
144
+ setting: {
145
+ savePath: path.join(srcPath, SOURCE_PATH.appYaml),
146
+ saveFileName: `per-action-function`,
147
+ fileExtension: '.yml',
148
+ isAppend: true
149
+ }
150
+ }
151
+ }
152
+
153
+
154
+
155
+
156
+ // [
157
+ // {
158
+ // templatePath: '/home/toughnut/BasProgram/empty-service-template/app/node_modules/@izara_project/izara-market-library-service-schemas/src/TemplateManager/src/MainResourcesYaml/TemplateAndData/DynamoDbMain/Template/DynamoDb.ejs',
159
+ // templateData: { tableName: 'ObjectTypeSingle', attributes: [Array] },
160
+ // setting: {
161
+ // savePath: '/generatedCode/source/',
162
+ // saveFileName: 'ObjectTypeGet',
163
+ // fileExtension: '.js',
164
+ // isAppend: false
165
+ // }
166
+ // }
167
+ // ]
168
+
169
+
170
+ module.exports = data;
@@ -0,0 +1,14 @@
1
+ {
2
+ "funcitonName": "xx",
3
+ "handler": "hdrApi",
4
+ "iamRoleStatement": {
5
+ "Effect": "Allow",
6
+ "Action": {
7
+ "xxx": [
8
+ "yyy",
9
+ "xxx"
10
+ ]
11
+ },
12
+ "Resource": "xxxxx"
13
+ }
14
+ }
@@ -0,0 +1,33 @@
1
+ <%_ const join = require('path').join; _%>
2
+ <%- firstLetterUpperCase(functionName) %><%- firstLetterUpperCase(handlerType) %>:
3
+ handler: <%- join(resourceLocation, `${firstLetterUpperCase(functionName)}_${firstLetterUpperCase(handlerType)}.main`)%>
4
+ name: ${self:custom.iz_resourcePrefix}<%- firstLetterUpperCase(functionName) %><%- firstLetterUpperCase(handlerType) %>
5
+ events:
6
+ - http:
7
+ path: <%- objectType %>/<%- firstLetterUpperCase(action) %>
8
+ method: <%- event %>
9
+ cors: true
10
+ #<#Authorizer#>
11
+ #<#/Authorizer#>
12
+ iamRoleStatements:
13
+ <%_ additionalResourcePermission.forEach(resourcePermission => { _%>
14
+ - Effect: <%- resourcePermission.effect %>
15
+ Action:
16
+ <%_ Object.keys(resourcePermission.action).forEach(resourcePerAction => { _%>
17
+ <%_ resourcePermission.action[resourcePerAction].forEach(permission => { _%>
18
+ - <%- resourcePerAction %>:<%- permission %>
19
+ <%_}) _%>
20
+ <%_ }) _%>
21
+ Resource:
22
+ <%_ resourcePermission.resource.forEach(resource => { _%>
23
+ - <%- resource %>
24
+ <%_ }) _%>
25
+ <%_}) _%>
26
+ #<#<%- functionName %><%- handlerType %>IamRole#>
27
+ #<#/<%- functionName %><%- handlerType %>IamRole#>
28
+ <%_ function firstLetterUpperCase(text){
29
+ return text.charAt(0).toUpperCase() + text.slice(1)
30
+ } _%>
31
+ <%_ function firstLetterLowerCase(str) {
32
+ return str.charAt(0).toLowerCase() + str.slice(1)
33
+ } _%>
@@ -0,0 +1,180 @@
1
+ /*
2
+ Copyright (C) 2020 Sven Mason <http://izara.io>
3
+
4
+ This program is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU Affero General Public License as
6
+ published by the Free Software Foundation, either version 3 of the
7
+ License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU Affero General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Affero General Public License
15
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ 'use strict';
19
+ const path = require('path');
20
+ const fs = require('fs');
21
+
22
+ const { ACTIONS, HANDLER, STORAGE_TYPES } = require('@izara_project/izara-core-library-service-schemas/src/Consts')
23
+
24
+ const { firstLetterLowerCase: lowerCase, firstLetterUpperCase: upperCase } = require("../../../../MainLibs/src/Utils")
25
+ const { DEFAULT_HANDLER_PER_ACTION, createIamRole, resourceNames, RESOURCE_CLASSES, DEFAULT_LAMBDA_ROLE_PER_ACTION, SQS_RESOURCE, SOURCE_PATH } = require("../../libs/Consts");
26
+
27
+ const templatePath = path.join(__dirname, "./template.ejs")
28
+
29
+ function defaultIamRolePerAction() {
30
+
31
+ let defaultIamRole = [];
32
+
33
+
34
+ defaultIamRole.push(
35
+ createIamRole(
36
+ {
37
+ [RESOURCE_CLASSES.s3]: ["GetObject", "GetObjectVersion"],
38
+ },
39
+ [
40
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema/perServiceSchemas/*"),
41
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema/serviceConfig/ServiceNameConfig.json"),
42
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema/serviceConfig/GraphServerTags.json"),
43
+ ]
44
+ )
45
+ );
46
+
47
+ defaultIamRole.push(
48
+ createIamRole(
49
+ { [RESOURCE_CLASSES.s3]: ["ListBucket"] },
50
+ [
51
+ resourceNames(RESOURCE_CLASSES.s3, "object-schema"),
52
+ ]
53
+ )
54
+ );
55
+ // console.log("defaultIamRole Api", defaultIamRole)
56
+ return defaultIamRole
57
+ }
58
+
59
+ /**
60
+ * receive objectSchema
61
+ * create data for hdrInv template
62
+ *
63
+ * @param {Object} objectSchema
64
+ * @return {{ templatePath, templateData, setting } }
65
+ */
66
+ function data(_izContext, objectSchema, srcPath) {
67
+ let createSourceArray = [];
68
+
69
+ for (const action of Object.values(ACTIONS)) {
70
+ if (objectSchema.overWriteHandlers?.[action]) {
71
+ // if have overWriteHander of action check hdrApi inside
72
+ if (objectSchema.overWriteHandlers[action].includes(HANDLER.hdrDsq)) {
73
+ // create template data
74
+ const createSourceParam = createParamForCreateSource(objectSchema, action, srcPath)
75
+ createSourceArray.push(createSourceParam)
76
+ }
77
+ } else {
78
+ // if not have overWriteHander of action will use default handler
79
+ const defaultHandler = DEFAULT_HANDLER_PER_ACTION[action]
80
+ if (defaultHandler.includes(HANDLER.hdrDsq)) {
81
+ // create template data and object for create source
82
+ const createSourceParam = createParamForCreateSource(objectSchema, action, srcPath)
83
+ createSourceArray.push(createSourceParam)
84
+ }
85
+ }
86
+ }
87
+ return createSourceArray;
88
+ }
89
+
90
+
91
+ function createParamForCreateSource(objectSchema, action, srcPath) {
92
+ let objectType = objectSchema.objectType;
93
+ let actionHandler = action;
94
+ let functionName = objectType + upperCase(actionHandler);
95
+
96
+ let additionalResourcePermission = defaultIamRolePerAction();
97
+ let tableForGetItem = [];
98
+
99
+ let hasGraphStorage = false;
100
+ for (let storageResource of Object.values(objectSchema.storageResources)) {
101
+ if (storageResource.storageType === STORAGE_TYPES.dynamoDB) {
102
+ // add IamRole for dynamodb depend on tableName in storageResources of objectSchema
103
+ tableForGetItem.push(resourceNames(RESOURCE_CLASSES.dynamoDbTable, storageResource.tableName));
104
+
105
+ } else if (storageResource.storageType === STORAGE_TYPES.graph) {
106
+ // find graph serviceName from graphServerTag or *GetNodeHdrInv ?
107
+
108
+ if (hasGraphStorage) {
109
+ continue;
110
+ } else {
111
+ hasGraphStorage = true;
112
+ }
113
+
114
+ }
115
+ }
116
+
117
+ if (tableForGetItem.length) {
118
+ additionalResourcePermission.push(
119
+ createIamRole(
120
+ { [RESOURCE_CLASSES.dynamoDbTable]: [DEFAULT_LAMBDA_ROLE_PER_ACTION[action].dynamoDbPermission] },
121
+ tableForGetItem
122
+ )
123
+ );
124
+ }
125
+
126
+ additionalResourcePermission.push(
127
+ createIamRole({
128
+ [RESOURCE_CLASSES.sqs]:
129
+ [
130
+ SQS_RESOURCE.deleteMessage,
131
+ SQS_RESOURCE.getQueueAttributes,
132
+ SQS_RESOURCE.receiveMessage,
133
+ SQS_RESOURCE.sendMessage,
134
+ SQS_RESOURCE.deleteMessageBatch,
135
+ SQS_RESOURCE.getQueueUrl
136
+ ]
137
+ }, [
138
+ resourceNames(RESOURCE_CLASSES.sqs, functionName + upperCase(HANDLER.hdrDsq)),
139
+ resourceNames(RESOURCE_CLASSES.sqs, functionName + upperCase(HANDLER.hdrDsq) + "DLQ")
140
+ ]
141
+ )
142
+ )
143
+
144
+
145
+
146
+ return {
147
+ templatePath: templatePath,
148
+ templateData: {
149
+ functionName: functionName,
150
+ resourceLocation: SOURCE_PATH.resourceLocationPerAction,
151
+ handlerType: "HdrDsq",
152
+ additionalResourcePermission
153
+ },
154
+ setting: {
155
+ savePath: path.join(srcPath, SOURCE_PATH.appYaml),
156
+ saveFileName: `per-action-function`,
157
+ fileExtension: '.yml',
158
+ isAppend: true
159
+ }
160
+ }
161
+ }
162
+
163
+
164
+
165
+
166
+ // [
167
+ // {
168
+ // templatePath: '/home/toughnut/BasProgram/empty-service-template/app/node_modules/@izara_project/izara-market-library-service-schemas/src/TemplateManager/src/MainResourcesYaml/TemplateAndData/DynamoDbMain/Template/DynamoDb.ejs',
169
+ // templateData: { tableName: 'ObjectTypeSingle', attributes: [Array] },
170
+ // setting: {
171
+ // savePath: '/generatedCode/source/',
172
+ // saveFileName: 'ObjectTypeGet',
173
+ // fileExtension: '.js',
174
+ // isAppend: false
175
+ // }
176
+ // }
177
+ // ]
178
+
179
+
180
+ module.exports = data;
@@ -0,0 +1,19 @@
1
+ {
2
+ "functionName": "xxx",
3
+ "handler": "hdrDsq",
4
+ "event": {
5
+ "sqs": {
6
+ "arn": "queueName"
7
+ },
8
+ "iamRoleStatement": {
9
+ "Effect": "Allow",
10
+ "Action": {
11
+ "xxx": [
12
+ "yyy",
13
+ "xxx"
14
+ ]
15
+ },
16
+ "Resource": "xxxx"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,30 @@
1
+ <%_ const join = require('path').join; _%>
2
+ <%- firstLetterUpperCase(functionName) %><%- firstLetterUpperCase(handlerType) %>:
3
+ handler: <%- join(resourceLocation, `${firstLetterUpperCase(functionName)}_${firstLetterUpperCase(handlerType)}.main`)%>
4
+ name: ${self:custom.iz_resourcePrefix}<%- firstLetterUpperCase(functionName) %><%- firstLetterUpperCase(handlerType) %>
5
+ events:
6
+ - sqs:
7
+ arn: arn:aws:sqs:${self:custom.iz_region}:${self:custom.iz_accountId}:${self:custom.iz_resourcePrefix}<%- firstLetterUpperCase(functionName) %><%- firstLetterUpperCase(handlerType) %>
8
+ batchSize: 10
9
+ iamRoleStatements:
10
+ <%_ additionalResourcePermission.forEach(resourcePermission => { _%>
11
+ - Effect: <%- resourcePermission.effect %>
12
+ Action:
13
+ <%_ Object.keys(resourcePermission.action).forEach(resourcePerAction => { _%>
14
+ <%_ resourcePermission.action[resourcePerAction].forEach(permission => { _%>
15
+ - <%- resourcePerAction %>:<%- permission %>
16
+ <%_}) _%>
17
+ <%_ }) _%>
18
+ Resource:
19
+ <%_ resourcePermission.resource.forEach(resource => { _%>
20
+ - "<%- resource %>"
21
+ <%_ }) _%>
22
+ <%_}) _%>
23
+ #<#<%- functionName %><%- handlerType %>IamRole#>
24
+ #<#/<%- functionName %><%- handlerType %>IamRole#>
25
+ <%_ function firstLetterUpperCase(text){
26
+ return text.charAt(0).toUpperCase() + text.slice(1)
27
+ } _%>
28
+ <%_ function firstLetterLowerCase(str) {
29
+ return str.charAt(0).toLowerCase() + str.slice(1)
30
+ } _%>