diff --git a/docs/Project API.postman_collection.json b/docs/Project API.postman_collection.json index 0c484294..cda37b99 100644 --- a/docs/Project API.postman_collection.json +++ b/docs/Project API.postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "dd9afefd-0b47-4483-a4e5-33ca395791a3", + "_postman_id": "2e0a1b99-3cb9-4c77-a562-7e6fe4956358", "name": "Project API", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -4798,7 +4798,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"scope\":{\r\n \"scope1\":\"scope 1\"\r\n },\r\n \"phases\":{\r\n \"phase1\":\"phase 1\"\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"scope\":{\r\n \"scope1\":\"scope 1\"\r\n },\r\n \"phases\":{\r\n \"phase1\":\"phase 1\"\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates", @@ -4845,7 +4845,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1\r\n },\r\n \"priceConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1\r\n },\r\n \"planConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1\r\n },\r\n \"priceConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1\r\n },\r\n \"planConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates", @@ -4892,7 +4892,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"dev\"\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"dev\"\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates", @@ -4924,7 +4924,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"wrong-key\"\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"wrong-key\"\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates", @@ -4956,7 +4956,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1123\r\n },\r\n \"priceConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1123\r\n },\r\n \"planConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1123\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"icon\": \"http://example.com/icon1.ico\",\r\n \"question\": \"question 1\",\r\n \"info\": \"info 1\",\r\n \"aliases\": [\"key-1\", \"key_1\"],\r\n \"form\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1123\r\n },\r\n \"priceConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1123\r\n },\r\n \"planConfig\": {\r\n \t\"key\": \"dev\",\r\n \t\"version\": 1123\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates", @@ -5147,7 +5147,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"scope\":{\r\n \"scope1\":\"scope 1\",\r\n \"scope2\": [\"a\"]\r\n },\r\n \"phases\":{\r\n \"phase1\":\"phase 1\",\r\n \"phase2\": {\r\n \t\"another\": \"another\"\r\n }\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"scope\":{\r\n \"scope1\":\"scope 1\",\r\n \"scope2\": [\"a\"]\r\n },\r\n \"phases\":{\r\n \"phase1\":\"phase 1\",\r\n \"phase2\": {\r\n \t\"another\": \"another\"\r\n }\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates/{{projectTemplateId}}", @@ -5180,7 +5180,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"form\": {\r\n \"key\": \"dev\",\r\n \"version\": 1\r\n },\r\n \"priceConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1\r\n },\r\n \"planConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n \"form\": {\r\n \"key\": \"dev\",\r\n \"version\": 1\r\n },\r\n \"priceConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1\r\n },\r\n \"planConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates/{{projectTemplateId}}", @@ -5213,7 +5213,7 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n\t\"form\": {\r\n \"key\": \"dev\",\r\n \"version\": 1123\r\n },\r\n \"priceConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1123\r\n },\r\n \"planConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1123\r\n }\r\n }" + "raw": "{\r\n \"name\":\"new name\",\r\n \"key\":\"new key\",\r\n \"category\":\"app\",\r\n \"subCategory\":\"app\",\r\n \"metadata\":{},\r\n\t\"form\": {\r\n \"key\": \"dev\",\r\n \"version\": 1123\r\n },\r\n \"priceConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1123\r\n },\r\n \"planConfig\": {\r\n \"key\": \"dev\",\r\n \"version\": 1123\r\n }\r\n }" }, "url": { "raw": "{{api-url}}/projects/metadata/projectTemplates/{{projectTemplateId}}", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 4912bf84..31e834a9 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -5266,6 +5266,12 @@ definitions: category: type: string description: the project template category + subCategory: + type: string + description: the project template subCategory + metadata: + type: object + description: the project template metadata scope: type: object description: the project template scope @@ -6638,4 +6644,4 @@ definitions: type: integer format: int64 description: READ-ONLY. User that last updated this object - readOnly: true \ No newline at end of file + readOnly: true diff --git a/migrations/20200107_refactor_project_templates.sql b/migrations/20200107_refactor_project_templates.sql new file mode 100644 index 00000000..8ffa7e4b --- /dev/null +++ b/migrations/20200107_refactor_project_templates.sql @@ -0,0 +1,12 @@ +-- +-- UPDATE EXISTING TABLES: +-- project_templates: +-- added column `subCategory` +-- added column `metadata` + +-- +-- project_templates + + +ALTER TABLE project_templates ADD COLUMN "subCategory" character varying(45); +ALTER TABLE project_templates ADD COLUMN "metadata" json NOT NULL DEFAULT '{}'::json; diff --git a/src/models/projectTemplate.js b/src/models/projectTemplate.js index 2d14299c..3b61600b 100644 --- a/src/models/projectTemplate.js +++ b/src/models/projectTemplate.js @@ -12,6 +12,8 @@ module.exports = (sequelize, DataTypes) => { name: { type: DataTypes.STRING(255), allowNull: false }, key: { type: DataTypes.STRING(45), allowNull: false }, category: { type: DataTypes.STRING(45), allowNull: false }, + subCategory: { type: DataTypes.STRING(45) }, + metadata: { type: DataTypes.JSON, allowNull: false, defaultValue: {} }, icon: { type: DataTypes.STRING(255), allowNull: false }, question: { type: DataTypes.STRING(255), allowNull: false }, info: { type: DataTypes.STRING(255), allowNull: false }, diff --git a/src/routes/projectTemplates/create.js b/src/routes/projectTemplates/create.js index 5cc7ae07..9e68fc47 100644 --- a/src/routes/projectTemplates/create.js +++ b/src/routes/projectTemplates/create.js @@ -18,6 +18,8 @@ const schema = { name: Joi.string().max(255).required(), key: Joi.string().max(45).required(), category: Joi.string().max(45).required(), + subCategory: Joi.string().max(45).empty(null), + metadata: Joi.object(), icon: Joi.string().max(255).required(), question: Joi.string().max(255).required(), info: Joi.string().max(255).required(), diff --git a/src/routes/projectTemplates/update.js b/src/routes/projectTemplates/update.js index 016a20ff..b2755771 100644 --- a/src/routes/projectTemplates/update.js +++ b/src/routes/projectTemplates/update.js @@ -21,6 +21,8 @@ const schema = { name: Joi.string().max(255), key: Joi.string().max(45), category: Joi.string().max(45), + subCategory: Joi.string().max(45).empty(null), + metadata: Joi.object(), icon: Joi.string().max(255), question: Joi.string().max(255), info: Joi.string().max(255),