From 7621a5143b11bb59a228610bad8c5b592b7d6ad5 Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Mon, 11 Jul 2016 10:30:41 -0300
Subject: [PATCH] Fixed XML output

Closes #6
---
 libs/app.js            |  2 +-
 libs/routes/api.js     |  8 ++---
 libs/routes/cities.js  | 75 +++++++++++++-----------------------------
 libs/routes/regions.js | 45 ++++++++++---------------
 libs/routes/states.js  | 67 +++++++++++++------------------------
 package.json           |  4 +--
 6 files changed, 70 insertions(+), 131 deletions(-)

diff --git a/libs/app.js b/libs/app.js
index 5d6a1539..8797bdf3 100644
--- a/libs/app.js
+++ b/libs/app.js
@@ -3,7 +3,7 @@ var path = require('path')
 var cookieParser = require('cookie-parser')
 var bodyParser = require('body-parser')
 var csv = require('csv-express')
-var xml = require('xml')
+var xml = require('js2xmlparser')
 var methodOverride = require('method-override')
 var cors = require('cors')
 
diff --git a/libs/routes/api.js b/libs/routes/api.js
index 3d72a1eb..ecfcc708 100644
--- a/libs/routes/api.js
+++ b/libs/routes/api.js
@@ -1,5 +1,5 @@
 var express = require('express')
-var xml = require('xml')
+var xml = require('js2xmlparser')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -42,7 +42,7 @@ router.get('/data', function(req, res) {
     })
 })
 
-router.get('/enrollments.:format?', function(req, res) {
+router.get('/enrollments', function(req, res) {
     var params = req.query;
     var id = 0;
     var location_id = 0;
@@ -121,9 +121,9 @@ router.get('/enrollments.:format?', function(req, res) {
 
     conn.query(enrollmentSql, true).then(function(result) {
         log.debug(result);
-        if (req.params.format === 'csv') {
+        if (req.query.format === 'csv') {
           res.csv(result.data)
-        } else if (req.params.format === 'xml') {
+        } else if (req.query.format === 'xml') {
           res.set('Content-Type', 'text/xml')
           res.send(xml({
             result: result.data
diff --git a/libs/routes/cities.js b/libs/routes/cities.js
index e13f887b..6a222049 100644
--- a/libs/routes/cities.js
+++ b/libs/routes/cities.js
@@ -1,5 +1,5 @@
 var express = require('express')
-var xml = require('xml')
+var xml = require('js2xmlparser')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -9,24 +9,26 @@ var config = require(libs + 'config')
 
 var conn = require(libs + 'db/monet')
 
+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
+    })
+  }
+}
+
 router.get('/', function(req, res) {
   conn.query(
     'SELECT * FROM municipios', true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 
 })
@@ -36,19 +38,8 @@ router.get('/:id', function(req, res) {
     'SELECT * FROM municipios WHERE pk_municipio_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 })
 
@@ -57,19 +48,8 @@ router.get('/ibge/:id', function(req, res) {
     'SELECT * FROM municipios WHERE codigo_ibge='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 })
 
@@ -78,19 +58,8 @@ router.get('/state/:id', function(req, res) {
     'SELECT * FROM municipios WHERE fk_estado_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 })
 
diff --git a/libs/routes/regions.js b/libs/routes/regions.js
index 360f9edf..6c85fccb 100644
--- a/libs/routes/regions.js
+++ b/libs/routes/regions.js
@@ -1,5 +1,5 @@
 var express = require('express')
-var xml = require('xml')
+var xml = require('js2xmlparser')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -9,25 +9,27 @@ var config = require(libs + 'config')
 
 var conn = require(libs + 'db/monet')
 
+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
+    })
+  }
+}
+
 router.get('/', function(req, res) {
   conn.query(
     'SELECT * FROM regioes', true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
-
 })
 
 router.get('/:id', function(req, res) {
@@ -35,19 +37,8 @@ router.get('/:id', function(req, res) {
     'SELECT * FROM regioes WHERE pk_regiao_id='+req.params.id, true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 })
 
diff --git a/libs/routes/states.js b/libs/routes/states.js
index 0f26ef60..2192c537 100644
--- a/libs/routes/states.js
+++ b/libs/routes/states.js
@@ -1,5 +1,5 @@
 var express = require('express')
-var xml = require('xml')
+var xml = require('js2xmlparser')
 var router = express.Router()
 
 var libs = process.cwd() + '/libs/'
@@ -9,67 +9,46 @@ var config = require(libs + 'config')
 
 var conn = require(libs + 'db/monet')
 
-router.get('/', function(req, res) {
+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
+    })
+  }
+}
+
+router.get('/', function(req, res, next) {
   conn.query(
     'SELECT * FROM estados', true
   ).then(function(result) {
     log.debug(result)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
-
 })
 
-router.get('/:id', function(req, res) {
+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)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 })
 
-router.get('/region/:id', function(req, res) {
+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)
-    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
-      })
-    }
+    req.result = result
+    response(req, res)
   })
 })
 
diff --git a/package.json b/package.json
index 935408c0..d8b84a4f 100644
--- a/package.json
+++ b/package.json
@@ -16,11 +16,11 @@
     "debug": "~2.0.x",
     "express": "^4.13.0",
     "faker": "^2.1.5",
+    "js2xmlparser": "^1.0.0",
     "method-override": "^2.3.3",
     "monetdb": "^1.1.2",
     "nconf": "^0.6.x",
-    "winston": "^2.2.0",
-    "xml": "^1.0.1"
+    "winston": "^2.2.0"
   },
   "license": "MIT"
 }
-- 
GitLab