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

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 (63) hide show
  1. package/package.json +1 -1
  2. package/src/SourceManager/src/CreateSource.js +0 -1
  3. package/src/SourceManager/src/Utils.js +15 -1
  4. package/src/TemplateManager/src/FunctionYaml/HdrApi/data.js +170 -0
  5. package/src/TemplateManager/src/FunctionYaml/HdrApi/request.json +14 -0
  6. package/src/TemplateManager/src/FunctionYaml/HdrApi/template.ejs +33 -0
  7. package/src/TemplateManager/src/FunctionYaml/HdrDsq/data.js +178 -0
  8. package/src/TemplateManager/src/FunctionYaml/HdrDsq/request.json +19 -0
  9. package/src/TemplateManager/src/FunctionYaml/HdrDsq/template.ejs +30 -0
  10. package/src/TemplateManager/src/FunctionYaml/HdrInv/data.js +169 -0
  11. package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrInv.exampleData.js → FunctionYaml/HdrInv/example req.js } +3 -3
  12. package/src/TemplateManager/src/FunctionYaml/HdrInv/request.json +14 -0
  13. package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrInv.ejs → FunctionYaml/HdrInv/template.ejs} +5 -5
  14. package/src/TemplateManager/src/FunctionYaml/HdrSqs/data.js +184 -0
  15. package/src/TemplateManager/src/FunctionYaml/HdrSqs/request.json +19 -0
  16. package/src/TemplateManager/src/FunctionYaml/HdrSqs/template.ejs +30 -0
  17. package/src/TemplateManager/src/GenerateCode(Old).js +135 -0
  18. package/src/TemplateManager/src/GenerateCode.js +86 -14
  19. package/src/TemplateManager/src/MainResourcesYaml/CreateSourceData.js +2 -2
  20. package/src/TemplateManager/src/MainResourcesYaml/TemplateAndData/DynamoDbMain/Data/MainDynamoDbYamlData.js +3 -1
  21. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/data.js +100 -0
  22. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/request.json +7 -0
  23. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrApi/template.ejs +76 -0
  24. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/data.js +109 -0
  25. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/request.json +7 -0
  26. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrDsq/template.ejs +105 -0
  27. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/data.js +102 -0
  28. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/request.json +7 -0
  29. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrInv/template.ejs +82 -0
  30. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/data.js +102 -0
  31. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/request.json +7 -0
  32. package/src/TemplateManager/src/PerActionEndpoint/Handler/HdrSqs/template.ejs +124 -0
  33. package/src/TemplateManager/src/PerActionEndpoint/Handler/testRequest.json +5 -0
  34. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Get/data.js +88 -0
  35. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Get/request.json +5 -0
  36. package/src/TemplateManager/src/PerActionEndpoint/MainFunction/Get/template.ejs +219 -0
  37. package/src/TemplateManager/src/ResourceYaml/CreateSourceData.js +76 -0
  38. package/src/TemplateManager/src/ResourceYaml/dynamodb/mainResourcePerObjectSchemaData.js +173 -0
  39. package/src/TemplateManager/src/ResourceYaml/dynamodb/processLogicalAndFindData.js +102 -0
  40. package/src/TemplateManager/src/ResourceYaml/dynamodb/request.json +7 -0
  41. package/src/TemplateManager/src/ResourceYaml/dynamodb/template.ejs +31 -0
  42. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/defaultSnsInSqsForFindDataAndProcessLogical.js +81 -0
  43. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/request.json +4 -0
  44. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/snsAndSqsPerActiondata.js +108 -0
  45. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/snsTemplate.ejs +59 -0
  46. package/src/TemplateManager/src/ResourceYaml/sns-in-sqs/sqsTemplate.ejs +42 -0
  47. package/src/TemplateManager/src/externalService/LambdaRole/data.js +147 -0
  48. package/src/TemplateManager/src/externalService/LambdaRole/request.json +18 -0
  49. package/src/TemplateManager/src/externalService/LambdaRole/template.ejs +52 -0
  50. package/src/TemplateManager/src/{PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Delete.js → externalService/SnsTopicSubscriotions/data.js} +13 -0
  51. package/src/TemplateManager/src/externalService/SnsTopicSubscriotions/template.ejs +14 -0
  52. package/src/TemplateManager/src/libs/Consts.js +39 -1
  53. package/src/TemplateManager/src/PerActionEndpoint/CreateSourceData.js +0 -131
  54. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/Handler/Handler.js +0 -0
  55. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Create.js +0 -18
  56. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Get.js +0 -18
  57. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplate/Update.js +0 -18
  58. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/MainFunction/MainFunctionTemplateData.js +0 -0
  59. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Data/LambdaYamlData.js +0 -166
  60. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrApi.ejs +0 -0
  61. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrDsq.ejs +0 -0
  62. package/src/TemplateManager/src/PerActionEndpoint/TemplateAndData/ResourceYaml/Lambda/Template/HdrSqs.ejs +0 -0
  63. /package/src/TemplateManager/src/{PerActionEndpoint/DataPerActionEndpoint.js → externalService/SnsTopicSubscriotions/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.3",
4
4
  "description": "Schemas for Izara Market project",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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.resourceLocation,
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: `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,178 @@
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.recieveMessage,
133
+ SQS_RESOURCE.sendMessage
134
+ ]
135
+ }, [
136
+ resourceNames(RESOURCE_CLASSES.sqs, functionName + upperCase(HANDLER.hdrDsq)),
137
+ resourceNames(RESOURCE_CLASSES.sqs, functionName + upperCase(HANDLER.hdrDsq) + "DLQ")
138
+ ]
139
+ )
140
+ )
141
+
142
+
143
+
144
+ return {
145
+ templatePath: templatePath,
146
+ templateData: {
147
+ functionName: functionName,
148
+ resourceLocation: SOURCE_PATH.resourceLocation,
149
+ handlerType: "HdrDsq",
150
+ additionalResourcePermission
151
+ },
152
+ setting: {
153
+ savePath: path.join(srcPath, SOURCE_PATH.appYaml),
154
+ saveFileName: `function`,
155
+ fileExtension: '.yml',
156
+ isAppend: true
157
+ }
158
+ }
159
+ }
160
+
161
+
162
+
163
+
164
+ // [
165
+ // {
166
+ // 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',
167
+ // templateData: { tableName: 'ObjectTypeSingle', attributes: [Array] },
168
+ // setting: {
169
+ // savePath: '/generatedCode/source/',
170
+ // saveFileName: 'ObjectTypeGet',
171
+ // fileExtension: '.js',
172
+ // isAppend: false
173
+ // }
174
+ // }
175
+ // ]
176
+
177
+
178
+ 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
+ } _%>
@@ -0,0 +1,169 @@
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
+
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
+
68
+ // const shortNamePath = path.join(srcPath, "./schemas/ShortNameObjectType.js");
69
+
70
+ // const shortName = fs.existsSync(shortNamePath) ? require(shortNamePath) : {};
71
+
72
+ console.log("objectSchema in mainFunction: ", objectSchema)
73
+
74
+
75
+ let createSourceArray = [];
76
+
77
+ for (const action of Object.values(ACTIONS)) {
78
+ if (objectSchema.overWriteHandlers?.[action]) {
79
+ // if have overWriteHander of action check hdrInv inside
80
+ if (objectSchema.overWriteHandlers[action].includes(HANDLER.hdrInv)) {
81
+ // create template data
82
+ const createSourceParam = createParamForCreateSource(objectSchema, action, srcPath)
83
+ createSourceArray.push(createSourceParam)
84
+ }
85
+ } else {
86
+ // if not have overWriteHander of action will use default handler
87
+ const defaultHandler = DEFAULT_HANDLER_PER_ACTION[action]
88
+ if (defaultHandler.includes(HANDLER.hdrInv)) {
89
+ // create template data and object for create source
90
+ const createSourceParam = createParamForCreateSource(objectSchema, action, srcPath)
91
+ createSourceArray.push(createSourceParam)
92
+ }
93
+ }
94
+ }
95
+ return createSourceArray;
96
+ }
97
+
98
+
99
+
100
+ function createParamForCreateSource(objectSchema, action, srcPath) {
101
+ let objectType = objectSchema.objectType;
102
+ let actionHandler = action;
103
+ let functionName = objectType + upperCase(actionHandler);
104
+ let additionalResourcePermission = defaultIamRolePerAction();
105
+ let tableForGetItem = [];
106
+
107
+ let hasGraphStorage = false;
108
+ for (let storageResource of Object.values(objectSchema.storageResources)) {
109
+ if (storageResource.storageType === STORAGE_TYPES.dynamoDB) {
110
+ // add IamRole for dynamodb depend on tableName in storageResources of objectSchema
111
+ tableForGetItem.push(resourceNames(RESOURCE_CLASSES.dynamoDbTable, storageResource.tableName));
112
+
113
+ } else if (storageResource.storageType === STORAGE_TYPES.graph) {
114
+ // find graph serviceName from graphServerTag or *GetNodeHdrInv ?
115
+
116
+ if (hasGraphStorage) {
117
+ continue;
118
+ } else {
119
+ hasGraphStorage = true;
120
+ }
121
+ }
122
+ }
123
+
124
+ if (tableForGetItem.length) {
125
+ additionalResourcePermission.push(
126
+ createIamRole(
127
+ { [RESOURCE_CLASSES.dynamoDbTable]: [DEFAULT_LAMBDA_ROLE_PER_ACTION[action].dynamoDbPermission] },
128
+ tableForGetItem
129
+ )
130
+ );
131
+ }
132
+
133
+
134
+
135
+ return {
136
+ templatePath: templatePath,
137
+ templateData: {
138
+ functionName: functionName,
139
+ resourceLocation: SOURCE_PATH.resourceLocation,
140
+ handlerType: "HdrInv",
141
+ additionalResourcePermission
142
+ },
143
+ setting: {
144
+ savePath: path.join(srcPath, SOURCE_PATH.appYaml),
145
+ saveFileName: `function`,
146
+ fileExtension: '.yml',
147
+ isAppend: true
148
+ }
149
+ }
150
+ }
151
+
152
+
153
+
154
+
155
+ // [
156
+ // {
157
+ // 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',
158
+ // templateData: { tableName: 'ObjectTypeSingle', attributes: [Array] },
159
+ // setting: {
160
+ // savePath: '/generatedCode/source/',
161
+ // saveFileName: 'ObjectTypeGet',
162
+ // fileExtension: '.js',
163
+ // isAppend: false
164
+ // }
165
+ // }
166
+ // ]
167
+
168
+
169
+ module.exports = data;
@@ -1,13 +1,13 @@
1
1
  // example template data
2
2
  const templateData = {
3
- resourceName: "xx",
3
+ functionName: "xx",
4
4
  handlerType: "xx",
5
5
  resourceLocation: "xx",
6
6
  additionalResourcePermission: [
7
7
  {
8
- effect: "xx",
8
+ effect: "Allow",
9
9
  action: {
10
- sqs: ["sendMessage", "receiveMessage"],
10
+ dynamodb: ["GetItem"],
11
11
  },
12
12
  resource: ["aws:sqs", "..."]
13
13
  }
@@ -0,0 +1,14 @@
1
+ {
2
+ "functionName": "xxx",
3
+ "handler": "hdrInv",
4
+ "iamRoleStatement": {
5
+ "Effect": "Allow",
6
+ "Action": {
7
+ "xxx": [
8
+ "yyy",
9
+ "xxx"
10
+ ]
11
+ },
12
+ "Resource": "xxxx"
13
+ }
14
+ }