diff --git a/examples/js/express/mysql/endpoints.yaml b/examples/js/express/mysql/endpoints.yaml index afd5c01..7afd1f5 100644 --- a/examples/js/express/mysql/endpoints.yaml +++ b/examples/js/express/mysql/endpoints.yaml @@ -94,6 +94,10 @@ type: integer hidden: type: boolean + params: + query: + hidden: + type: boolean - path: /v1/categories/:categoryId get: diff --git a/examples/js/express/mysql/routes.js b/examples/js/express/mysql/routes.js index 4943866..b8470fb 100644 --- a/examples/js/express/mysql/routes.js +++ b/examples/js/express/mysql/routes.js @@ -1,3 +1,7 @@ +const parseBoolean = (value) => { + return value === 'true' +} + const register = (app, pool) => { app.get('/v1/categories/count', (req, res, next) => { @@ -61,7 +65,7 @@ const register = (app, pool) => { app.get('/v1/categories/search', (req, res, next) => { pool.query( 'SELECT id , name , name_ru , slug , hidden FROM categories WHERE hidden = :hidden', - { "hidden": req.query.hidden }, + { "hidden": parseBoolean(req.query.hidden) }, (err, rows, fields) => { if (err) { return next(err) diff --git a/src/cli.js b/src/cli.js index f57ab40..d829a43 100755 --- a/src/cli.js +++ b/src/cli.js @@ -158,7 +158,7 @@ const lengthOfLongestString = (arr) => arr ) // returns user-defined variable's type or null -// Accepts method.dto.fields fieldsInfo +// Accepts method.dto.fields or method.params as fieldsInfo const retrieveType = (fieldsInfo, fieldName) => { const hasTypeInfo = fieldsInfo.hasOwnProperty(fieldName) && fieldsInfo[fieldName].hasOwnProperty('type') if (hasTypeInfo) { @@ -235,7 +235,7 @@ const createEndpoints = async (destDir, { lang }, config) => { // [ "p.page", "b.num" ] => '"page": req.params.page, "num": req.body.num' // (used only with Express) - "formatParamsAsJavaScriptObject": (params) => { + "formatParamsAsJavaScriptObject": (params, method) => { if (params.length === 0) { return params } @@ -245,6 +245,10 @@ const createEndpoints = async (destDir, { lang }, config) => { const bindTarget = p.substring(0, 1) const paramName = p.substring(2) const prefix = placeholdersMap['js'][bindTarget] + // LATER: add support for path (method.params.path) and body (method.dto.fields) parameters + if (method && bindTarget === 'q' && retrieveType(method.params.query, paramName) === 'boolean') { + return `"${paramName}": parseBoolean(${prefix}.${paramName})` + } return `"${paramName}": ${prefix}.${paramName}` } ).join(', ') diff --git a/src/templates/routes.js.ejs b/src/templates/routes.js.ejs index 155867a..193ed77 100644 --- a/src/templates/routes.js.ejs +++ b/src/templates/routes.js.ejs @@ -1,3 +1,8 @@ +<%# LATER: add it only when there is at least one parameter of boolean type -%> +const parseBoolean = (value) => { + return value === 'true' +} + const register = (app, pool) => { <% endpoints.forEach(function(endpoint) { @@ -13,7 +18,7 @@ endpoints.forEach(function(endpoint) { const sql = formatQuery(method.query) const params = extractParamsFromQuery(method.query) const formattedParams = params.length > 0 - ? '\n { ' + formatParamsAsJavaScriptObject(params) + ' },' + ? '\n { ' + formatParamsAsJavaScriptObject(params, method) + ' },' : '' if (hasGetOne || hasGetMany) {