From 55ff5ecad7e6450777f627c44c86d4a40e7bdc84 Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Fri, 2 Sep 2016 10:25:57 -0300
Subject: [PATCH] Add query middleware! :smile:

Route /cities/ibge/:id removed also
Do not tell people I did that
---
 libs/middlewares/query.js | 16 +++++++++
 libs/routes/cities.js     | 72 +++++++++++++--------------------------
 libs/routes/regions.js    | 51 ++++++++++++---------------
 libs/routes/states.js     | 57 +++++++++++++------------------
 package.json              |  1 +
 test/test.js              | 16 ---------
 6 files changed, 86 insertions(+), 127 deletions(-)
 create mode 100644 libs/middlewares/query.js

diff --git a/libs/middlewares/query.js b/libs/middlewares/query.js
new file mode 100644
index 00000000..d14958dc
--- /dev/null
+++ b/libs/middlewares/query.js
@@ -0,0 +1,16 @@
+var libs = process.cwd() + '/libs/'
+var conn = require(libs + 'db/monet')
+var log = require(libs + 'log')(module)
+
+function query(req, res, next) {
+    log.debug(req.query)
+    conn.query(
+        req.query.text, req.query.values, true
+    ).then(function(result) {
+        // log.debug(result)
+        req.result = result
+        next()
+    })
+}
+
+module.exports = query
diff --git a/libs/routes/cities.js b/libs/routes/cities.js
index 6a222049..10d7ceef 100644
--- a/libs/routes/cities.js
+++ b/libs/routes/cities.js
@@ -1,6 +1,7 @@
 var express = require('express')
 var xml = require('js2xmlparser')
 var router = express.Router()
+var squel = require('squel')
 
 var libs = process.cwd() + '/libs/'
 
@@ -8,59 +9,34 @@ var log = require(libs + 'log')(module)
 var config = require(libs + 'config')
 
 var conn = require(libs + 'db/monet')
+var query = require(libs + 'middlewares/query')
 
 function response(req, res) {
-  if (req.query.format === 'csv') {
-    res.csv(req.result.data)
-  } else if (req.query.format === 'xml') {
-    res.send(xml("result", JSON.stringify({city: req.result.data})))
-  }
-  else {
-    res.json({
-        result: req.result.data
-    })
-  }
+    if (req.query.format === 'csv') {
+        res.csv(req.result.data)
+    } else if (req.query.format === 'xml') {
+        res.send(xml("result", JSON.stringify({city: req.result.data})))
+    }
+    else {
+        res.json({
+            result: req.result.data
+        })
+    }
 }
 
-router.get('/', function(req, res) {
-  conn.query(
-    'SELECT * FROM municipios', true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
+router.get('/', function(req, res, next) {
+    req.query = squel.select().from('municipios').toParam()
+    next()
+}, query, response)
 
-})
+router.get('/:id', function(req, res, next) {
+    req.query = squel.select().from('municipios').where('pk_municipio_id=?', parseInt(req.params.id, 10)).toParam()
+    next()
+}, query, response)
 
-router.get('/:id', function(req, res) {
-  conn.query(
-    'SELECT * FROM municipios WHERE pk_municipio_id='+req.params.id, true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
-
-router.get('/ibge/:id', function(req, res) {
-  conn.query(
-    'SELECT * FROM municipios WHERE codigo_ibge='+req.params.id, true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
-
-router.get('/state/:id', function(req, res) {
-  conn.query(
-    'SELECT * FROM municipios WHERE fk_estado_id='+req.params.id, true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
+router.get('/state/:id', function(req, res, next) {
+    req.query = squel.select().from('municipios').where('fk_estado_id=?', parseInt(req.params.id, 10)).toParam()
+    next()
+}, query, response)
 
 module.exports = router
diff --git a/libs/routes/regions.js b/libs/routes/regions.js
index 6c85fccb..cfbbcd94 100644
--- a/libs/routes/regions.js
+++ b/libs/routes/regions.js
@@ -1,6 +1,7 @@
 var express = require('express')
 var xml = require('js2xmlparser')
 var router = express.Router()
+var squel = require('squel')
 
 var libs = process.cwd() + '/libs/'
 
@@ -9,37 +10,29 @@ var config = require(libs + 'config')
 
 var conn = require(libs + 'db/monet')
 
+var query = require(libs + 'middlewares/query')
+
 function response(req, res) {
-  if (req.query.format === 'csv') {
-    res.csv(req.result.data)
-  } else if (req.query.format === 'xml') {
-    res.send(xml("result", JSON.stringify({state: req.result.data})))
-  }
-  else {
-    res.json({
-        result: req.result.data
-    })
-  }
+    if (req.query.format === 'csv') {
+        res.csv(req.result.data)
+    } else if (req.query.format === 'xml') {
+        res.send(xml("result", JSON.stringify({state: req.result.data})))
+    }
+    else {
+        res.json({
+            result: req.result.data
+        })
+    }
 }
 
-router.get('/', function(req, res) {
-  conn.query(
-    'SELECT * FROM regioes', true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
-
-router.get('/:id', function(req, res) {
-  conn.query(
-    'SELECT * FROM regioes WHERE pk_regiao_id='+req.params.id, true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
+router.get('/', function(req, res, next) {
+    req.query = squel.select().from('regioes').toParam()
+    next()
+}, query, response)
+
+router.get('/:id', function(req, res, next) {
+    req.query = squel.select().from('regioes').where('pk_regiao_id=?', parseInt(req.params.id, 10)).toParam()
+    next()
+}, query, response)
 
 module.exports = router
diff --git a/libs/routes/states.js b/libs/routes/states.js
index 2192c537..79959ef8 100644
--- a/libs/routes/states.js
+++ b/libs/routes/states.js
@@ -1,6 +1,7 @@
 var express = require('express')
 var xml = require('js2xmlparser')
 var router = express.Router()
+var squel = require('squel')
 
 var libs = process.cwd() + '/libs/'
 
@@ -9,47 +10,35 @@ var config = require(libs + 'config')
 
 var conn = require(libs + 'db/monet')
 
+var query = require(libs + 'middlewares/query')
+
 function response(req, res) {
-  if (req.query.format === 'csv') {
-    res.csv(req.result.data)
-  } else if (req.query.format === 'xml') {
-    res.send(xml("result", JSON.stringify({state: req.result.data})))
-  }
-  else {
-    res.json({
-        result: req.result.data
-    })
-  }
+    console.log('respostas :)')
+    if (req.query.format === 'csv') {
+        res.csv(req.result.data)
+    } else if (req.query.format === 'xml') {
+        res.send(xml("result", JSON.stringify({state: req.result.data})))
+    }
+    else {
+        res.json({
+            result: req.result.data
+        })
+    }
 }
 
 router.get('/', function(req, res, next) {
-  conn.query(
-    'SELECT * FROM estados', true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
+    req.query = squel.select().from('estados').toParam()
+    next()
+}, query, response)
 
 router.get('/:id', function(req, res, next) {
-  conn.query(
-    'SELECT * FROM estados WHERE pk_estado_id='+req.params.id, true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
+    req.query = squel.select().from('estados').where('pk_estado_id = ?', parseInt(req.params.id, 10)).toParam()
+    next()
+}, query, response)
 
 router.get('/region/:id', function(req, res, next) {
-  conn.query(
-    'SELECT * FROM estados WHERE fk_regiao_id='+req.params.id, true
-  ).then(function(result) {
-    log.debug(result)
-    req.result = result
-    response(req, res)
-  })
-})
+    req.query = squel.select().from('estados').where('fk_regiao_id = ?', parseInt(req.params.id, 10)).toParam()
+    next()
+}, query, response)
 
 module.exports = router
diff --git a/package.json b/package.json
index 70eae984..c8c186c7 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
     "method-override": "^2.3.3",
     "monetdb": "^1.1.2",
     "nconf": "^0.6.x",
+    "squel": "^5.4.2",
     "winston": "^2.2.0"
   },
   "license": "MIT",
diff --git a/test/test.js b/test/test.js
index bad774a4..d6b67ff8 100644
--- a/test/test.js
+++ b/test/test.js
@@ -139,20 +139,4 @@ describe('request cities', function(){
       })
   });
 
-  it('should list a city by codigo_ibge', function(done){
-    chai.request(server)
-      .get('/api/v1/cities/ibge/1200013')
-      .end(function(err, res){
-        res.should.have.status(200);
-        res.should.be.json;
-        res.body.should.have.property('result');
-        res.body.result.should.be.a('array');
-        res.body.result[0].should.have.property('pk_municipio_id');
-        res.body.result[0].should.have.property('fk_estado_id');
-        res.body.result[0].should.have.property('nome');
-        res.body.result[0].should.have.property('codigo_ibge');
-        done();
-      })
-  });
-
 });
-- 
GitLab