diff --git a/cli/recipes/endpoint/template/schemas/post.liquid b/cli/recipes/endpoint/template/schemas/post.liquid index 5a581fd..65ec8fb 100644 --- a/cli/recipes/endpoint/template/schemas/post.liquid +++ b/cli/recipes/endpoint/template/schemas/post.liquid @@ -81,6 +81,8 @@ const newPost{{entityName | toPascalCase}}Schema = yup.object().shape({ mixed().nullable().test('is-blob', 'Binary data', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), {% elsif column.dataType == 'tinyblob'%} mixed().nullable().test('is-blob', 'Binary data', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), + {% elsif column.dataType == 'enum' %} + string().oneOf([{{ column.columnnType | extractEnumValues }}], "The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}").nullable().label('{{column.column | toCamelCase}}').typeError("The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}"), {% endif %} {% else %} {% if column.columnKey == 'MUL' %} @@ -161,6 +163,8 @@ const newPost{{entityName | toPascalCase}}Schema = yup.object().shape({ mixed().required().test('is-blob', 'Binary data required', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), {% elsif column.dataType == 'tinyblob'%} mixed().required().test('is-blob', 'Binary data required', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), + {% elsif column.dataType == 'enum' %} + string().oneOf([{{ column.columnnType | extractEnumValues }}], "The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}").required('The {{column.column | toCamelCase}} field is required').label('{{column.column | toCamelCase}}').typeError("The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}"), {% endif %} {% endif %} {% endif %} diff --git a/cli/recipes/endpoint/template/schemas/put.liquid b/cli/recipes/endpoint/template/schemas/put.liquid index c3e78d8..c10e168 100644 --- a/cli/recipes/endpoint/template/schemas/put.liquid +++ b/cli/recipes/endpoint/template/schemas/put.liquid @@ -108,6 +108,8 @@ const newPut{{entityName | toPascalCase}}Schema = yup.object().shape({ mixed().nullable().test('is-blob', 'Binary data', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), {% elsif column.dataType == 'tinyblob'%} mixed().nullable().test('is-blob', 'Binary data', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), + {% elsif column.dataType == 'enum' %} + string().oneOf([{{ column.columnnType | extractEnumValues }}], "The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}").nullable().label('{{column.column | toCamelCase}}').typeError("The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}"), {% endif %} {% else %} {% if column.columnKey == 'MUL' %} @@ -188,6 +190,8 @@ const newPut{{entityName | toPascalCase}}Schema = yup.object().shape({ mixed().test('is-blob', 'Binary data required', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), {% elsif column.dataType == 'tinyblob'%} mixed().test('is-blob', 'Binary data required', value => {return value instanceof Buffer || value instanceof Uint8Array || false;}), + {% elsif column.dataType == 'enum' %} + string().oneOf([{{ column.columnnType | extractEnumValues }}], "The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}").required('The {{column.column | toCamelCase}} field is required').label('{{column.column | toCamelCase}}').typeError("The {{column.column | toCamelCase}} field must be one of: {{ column.columnnType | extractEnumValues }}"), {% endif %} {% endif %} {% endif %} diff --git a/cli/utils/templateRenderer/filters/index.js b/cli/utils/templateRenderer/filters/index.js index 54b69be..af4f233 100644 --- a/cli/utils/templateRenderer/filters/index.js +++ b/cli/utils/templateRenderer/filters/index.js @@ -21,6 +21,10 @@ const enrichEngine = (engine) => { engine.registerFilter("toConstantCase", (v) => upperCase(v).replace(/ /g, "_") ); + engine.registerFilter("extractEnumValues", (input) => { + const match = input.match(/enum\((.+)\)/); + return match ? match[1] : ""; + }); engine.registerFilter("toTypeScriptType", (v) => { switch (v) { case "int": @@ -49,11 +53,22 @@ const enrichEngine = (engine) => { }); engine.registerFilter("schemaImports", (v) => { let imports = []; - const filteredSchema = v.filter((c) => (c.columnKey === 'MUL' || c.columnKey === 'PRI') && c.dataType === 'int'); - const uniqueTargetTables = [...new Set(filteredSchema.map((c) => c.foreignKeyTo.targetTable))]; - Promise.all(uniqueTargetTables.map(async (table) => { - imports.push(`const select${toPascalCase(table)}ById = require('./queries/select${toPascalCase(table)}ById');`); - })); + const filteredSchema = v.filter( + (c) => + (c.columnKey === "MUL" || c.columnKey === "PRI") && c.dataType === "int" + ); + const uniqueTargetTables = [ + ...new Set(filteredSchema.map((c) => c.foreignKeyTo.targetTable)), + ]; + Promise.all( + uniqueTargetTables.map(async (table) => { + imports.push( + `const select${toPascalCase( + table + )}ById = require('./queries/select${toPascalCase(table)}ById');` + ); + }) + ); return imports.join("\n"); }); @@ -167,7 +182,7 @@ const enrichEngine = (engine) => { } let fieldList = uniq(fields); - const isUsingDotNotation = fields.find((field) => field.includes(".")) + const isUsingDotNotation = fields.find((field) => field.includes(".")); if (isUsingDotNotation) { return `${fieldList @@ -234,7 +249,6 @@ const enrichEngine = (engine) => { }); return joins.join(", "); }); - }; module.exports = enrichEngine; diff --git a/package.json b/package.json index 588cbef..eef828b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xest", - "version": "0.0.0-alpha.23", + "version": "0.0.0-alpha.24", "description": "Xest CLI for managing projects", "main": "index.js", "bin": {