From 06dbeceaf3aec0078c1b5c2f644bfb978ac85216 Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Fri, 8 Jul 2016 17:23:15 -0300
Subject: [PATCH] Add XML and CSV response to all routes

---
 libs/log.js            |  2 +-
 libs/routes/api.js     |  3 +-
 libs/routes/cities.js  | 71 +++++++++++++++++++++++++++++++++---------
 libs/routes/regions.js | 32 +++++++++++++++----
 libs/routes/states.js  | 49 +++++++++++++++++++++++------
 5 files changed, 125 insertions(+), 32 deletions(-)

diff --git a/libs/log.js b/libs/log.js
index 09855713..419b3e4b 100644
--- a/libs/log.js
+++ b/libs/log.js
@@ -19,7 +19,7 @@ function logger(module) {
                 level: 'debug',
                 label: getFilePath(module),
                 handleException: true,
-                json: false,
+                json: true,
                 colorize: true
             })
         ],
diff --git a/libs/routes/api.js b/libs/routes/api.js
index c85949e6..3d72a1eb 100644
--- a/libs/routes/api.js
+++ b/libs/routes/api.js
@@ -1,4 +1,5 @@
 var express = require('express')
+var xml = require('xml')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -125,7 +126,7 @@ router.get('/enrollments.:format?', function(req, res) {
         } else if (req.params.format === 'xml') {
           res.set('Content-Type', 'text/xml')
           res.send(xml({
-            'result': result.data
+            result: result.data
           }))
         }
         else {
diff --git a/libs/routes/cities.js b/libs/routes/cities.js
index d605c4df..e13f887b 100644
--- a/libs/routes/cities.js
+++ b/libs/routes/cities.js
@@ -1,4 +1,5 @@
 var express = require('express')
+var xml = require('xml')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -13,43 +14,83 @@ router.get('/', function(req, res) {
     'SELECT * FROM municipios', true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 
 })
 
 router.get('/:id', function(req, res) {
   conn.query(
-    'SELECT * FROM regioes WHERE pk_municipio_id='+req.params.id, true
+    'SELECT * FROM municipios WHERE pk_municipio_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 })
 
 router.get('/ibge/:id', function(req, res) {
   conn.query(
-    'SELECT * FROM regioes WHERE codigo_ibge='+req.params.id, true
+    'SELECT * FROM municipios WHERE codigo_ibge='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 })
 
 router.get('/state/:id', function(req, res) {
   conn.query(
-    'SELECT * FROM regioes WHERE fk_estado_id='+req.params.id, true
+    'SELECT * FROM municipios WHERE fk_estado_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 })
 
diff --git a/libs/routes/regions.js b/libs/routes/regions.js
index 60352efb..360f9edf 100644
--- a/libs/routes/regions.js
+++ b/libs/routes/regions.js
@@ -1,4 +1,5 @@
 var express = require('express')
+var xml = require('xml')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -13,9 +14,18 @@ router.get('/', function(req, res) {
     'SELECT * FROM regioes', true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    } else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 
 })
@@ -25,9 +35,19 @@ router.get('/:id', function(req, res) {
     'SELECT * FROM regioes WHERE pk_regiao_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 })
 
diff --git a/libs/routes/states.js b/libs/routes/states.js
index 3c3be7b5..0f26ef60 100644
--- a/libs/routes/states.js
+++ b/libs/routes/states.js
@@ -1,4 +1,5 @@
 var express = require('express')
+var xml = require('xml')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -13,9 +14,19 @@ router.get('/', function(req, res) {
     'SELECT * FROM estados', true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 
 })
@@ -25,9 +36,19 @@ router.get('/:id', function(req, res) {
     'SELECT * FROM estados WHERE pk_estado_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 })
 
@@ -36,9 +57,19 @@ router.get('/region/:id', function(req, res) {
     'SELECT * FROM estados WHERE fk_regiao_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    res.json({
-      result: result.data
-    })
+    if (req.query.format === 'csv') {
+      res.csv(result.data)
+    } else if (req.query.format === 'xml') {
+      res.set('Content-Type', 'text/xml')
+      res.send(xml({
+        result: result.data
+      }))
+    }
+    else {
+      res.json({
+          result: result.data
+      })
+    }
   })
 })
 
-- 
GitLab