From 9550c48fca39233e0b84cba2713161e4959ef2c5 Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Tue, 6 Sep 2016 11:04:20 -0300
Subject: [PATCH] Fix query middleware

---
 src/libs/middlewares/query.js    |  4 ++--
 src/libs/middlewares/response.js | 21 +++++++++++++--------
 src/libs/routes/api.js           |  8 ++++----
 src/libs/routes/city.js          | 16 ++++++++--------
 src/libs/routes/enrollment.js    |  2 ++
 src/libs/routes/region.js        |  8 ++++----
 src/libs/routes/state.js         | 12 ++++++------
 7 files changed, 39 insertions(+), 32 deletions(-)

diff --git a/src/libs/middlewares/query.js b/src/libs/middlewares/query.js
index 6b91fc8f..7b0cc586 100644
--- a/src/libs/middlewares/query.js
+++ b/src/libs/middlewares/query.js
@@ -3,8 +3,8 @@ const log = require(`${libs}/log`)(module);
 const execQuery = require(`${libs}/db/query_exec`);
 
 function query(req, res, next) {
-    log.debug(req.query);
-    execQuery(req.query.text, req.query.values).then((result) => {
+    log.debug(req.sql);
+    execQuery(req.sql.text, req.sql.values).then((result) => {
         log.debug(result);
         req.result = result;
         next();
diff --git a/src/libs/middlewares/response.js b/src/libs/middlewares/response.js
index 8328b4ff..accd84a2 100644
--- a/src/libs/middlewares/response.js
+++ b/src/libs/middlewares/response.js
@@ -1,13 +1,18 @@
+const libs = `${process.cwd()}/libs`;
+const log = require(`${libs}/log`)(module);
 const xml = require('js2xmlparser');
 
-function response(req, res) {
-    if (req.query.format === 'csv') {
-        res.csv(req.result);
-    } else if (req.query.format === 'xml') {
-        res.send(xml('result', JSON.stringify({ city: req.result })));
-    } else {
-        res.json({ result: req.result });
-    }
+function response(value) {
+    return function (req, res, next) {
+        log.debug(req.query.format);
+        if (req.query.format === 'csv') {
+            res.csv (req.result);
+        } else if (req.query.format === 'xml') {
+            res.send (xml('result', JSON.stringify({ [value]: req.result })));
+        } else {
+            res.json({ result: req.result });
+        }
+    };
 }
 
 module.exports = response;
diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js
index 9a23be8c..1a901d07 100644
--- a/src/libs/routes/api.js
+++ b/src/libs/routes/api.js
@@ -15,9 +15,9 @@ api.get('/', (req, res) => {
 });
 
 // mount API routes
-api.use('/v1/enrollment', enrollment);
-api.use('/v1/state', state);
-api.use('/v1/region', region);
-api.use('/v1/city', city);
+api.use('/api/v1/enrollment', enrollment);
+api.use('/api/v1/state', state);
+api.use('/api/v1/region', region);
+api.use('/api/v1/city', city);
 
 module.exports = api;
diff --git a/src/libs/routes/city.js b/src/libs/routes/city.js
index aa28900b..6c7550f9 100644
--- a/src/libs/routes/city.js
+++ b/src/libs/routes/city.js
@@ -11,26 +11,26 @@ const query = require(`${libs}/middlewares/query`);
 const response = require(`${libs}/middlewares/response`);
 
 cityApp.get('/', (req, res, next) => {
-    req.query = squel.select().from('municipios').toParam();
+    req.sql = squel.select().from('municipios').toParam();
     next();
-}, query, response);
+}, query, response('city'));
 
 cityApp.get('/:id', (req, res, next) => {
-    req.query = squel.select().from('municipios').where('pk_municipio_id = ?',
+    req.sql = squel.select().from('municipios').where('pk_municipio_id = ?',
         parseInt(req.params.id, 10)).toParam();
     next();
-}, query, response);
+}, query, response('city'));
 
 cityApp.get('/ibge/:id', (req, res, next) => {
-    req.query = squel.select().from('municipios').where('codigo_ibge = ?',
+    req.sql = squel.select().from('municipios').where('codigo_ibge = ?',
         req.params.id).toParam();
     next();
-}, query, response);
+}, query, response('city'));
 
 cityApp.get('/state/:id', (req, res, next) => {
-    req.query = squel.select().from('municipios').where('fk_estado_id = ?',
+    req.sql = squel.select().from('municipios').where('fk_estado_id = ?',
         parseInt(req.params.id, 10));
     next();
-}, query, response);
+}, query, response('city'));
 
 module.exports = cityApp;
diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js
index 7ca2be3e..e3e6c399 100644
--- a/src/libs/routes/enrollment.js
+++ b/src/libs/routes/enrollment.js
@@ -6,6 +6,8 @@ const libs = `${process.cwd()}/libs`;
 
 const log = require(`${libs}/log`)(module);
 
+const squel = require('squel');
+
 const dbQuery = require('../db/query_exec');
 
 const response = require('../middlewares/response');
diff --git a/src/libs/routes/region.js b/src/libs/routes/region.js
index 56c4cd2e..754cd616 100644
--- a/src/libs/routes/region.js
+++ b/src/libs/routes/region.js
@@ -11,14 +11,14 @@ const query = require(`${libs}/middlewares/query`);
 const response = require(`${libs}/middlewares/response`);
 
 regionApp.get('/', (req, res, next) => {
-    req.query = squel.select().from('regioes').toParam();
+    req.sql = squel.select().from('regioes').toParam();
     next();
-}, query, response);
+}, query, response('region'));
 
 regionApp.get('/:id', (req, res, next) => {
-    req.query = squel.select().from('regioes').where('pk_regiao_id = ?',
+    req.sql = squel.select().from('regioes').where('pk_regiao_id = ?',
         parseInt(req.params.id, 10)).toParam();
     next();
-}, query, response);
+}, query, response('region'));
 
 module.exports = regionApp;
diff --git a/src/libs/routes/state.js b/src/libs/routes/state.js
index dae0eb71..637149f1 100644
--- a/src/libs/routes/state.js
+++ b/src/libs/routes/state.js
@@ -11,20 +11,20 @@ const query = require(`${libs}/middlewares/query`);
 const response = require(`${libs}/middlewares/response`);
 
 stateApp.get('/', (req, res, next) => {
-    req.query = squel.select().from('estados').toParam();
+    req.sql = squel.select().from('estados').toParam();
     next();
-}, query, response);
+}, query, response('state'));
 
 stateApp.get('/:id', (req, res, next) => {
-    req.query = squel.select().from('estados').where('pk_estado_id = ?',
+    req.sql = squel.select().from('estados').where('pk_estado_id = ?',
         parseInt(req.params.id, 10)).toParam();
     next();
-}, query, response);
+}, query, response('state'));
 
 stateApp.get('/region/:id', (req, res, next) => {
-    req.query = squel.select().from('estados').where('fk_regiao_id = ?',
+    req.sql = squel.select().from('estados').where('fk_regiao_id = ?',
         parseInt(req.params.id, 10)).toParam();
     next();
-}, query, response);
+}, query, response('state'));
 
 module.exports = stateApp;
-- 
GitLab