From 4e7153e50da57f38a01749c0c8c740ce289632ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Tozatti=20Risso?= <jvtr12@c3sl.ufpr.br>
Date: Fri, 8 Jul 2016 14:48:26 -0300
Subject: [PATCH] Add initial support for parameters in the enrollments route

- Rename /matriculas to /enrollments
- Add initial support for parameters in the enrollments route
---
 libs/routes/api.js | 97 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 84 insertions(+), 13 deletions(-)

diff --git a/libs/routes/api.js b/libs/routes/api.js
index d5dadcd3..aa8dbdee 100644
--- a/libs/routes/api.js
+++ b/libs/routes/api.js
@@ -14,6 +14,20 @@ router.get('/', function (req, res) {
     })
 })
 
+/**
+ * Complete range of the enrollments dataset
+ *
+ * Returns a tuple of start and ending years of the complete enrollments dataset.
+ */
+router.get('/year_range', function(req, res) {
+    var yearSql = "SELECT MIN(t.ano_censo) AS start_year, MAX(t.ano_censo) AS end_year FROM turmas AS t";
+    conn.query(yearSql, true).then(function(result) {
+        res.json({
+            result: result.data
+        })
+    });
+})
+
 router.get('/data', function(req, res) {
     log.debug(req.query)
     log.debug(req.query.met)
@@ -27,27 +41,84 @@ router.get('/data', function(req, res) {
     })
 })
 
-router.get('/matriculas.:format?', function(req, res) {
-    log.debug(req.query);
+router.get('/enrollments.:format?', function(req, res) {
+    var params = req.query;
+    var id = 0;
+    var location_id = 0;
+    var adm_dependency_id = 0;
+    var start_year = 0;
+    var end_year = 0;
+    var enrollmentSql = "";
+
+    if (params.id)
+    {
+        id = parseInt(params.id, 10);
+    }
+
+    if (params.location_id)
+    {
+        location_id = parseInt(params.location_id, 10);
+    }
+
+    if (params.adm_dependency_id)
+    {
+        adm_dependency_id = parseInt(params.adm_dependency_id)
+    }
+
+    if (!params.start_year && !params.end_year)
+    {
+        var yearSql = "SELECT MIN(t.ano_censo) AS start_year, MAX(t.ano_censo) AS end_year FROM turmas AS t";
+        conn.query(yearSql, true).then(function(result) {
+            start_year = result.data.start_year;
+            end_year = result.data.end_year;
+        });
+    }
+
+    if (params.start_year)
+    {
+        start_year = parseInt(params.start_year, 10);
+    } else if (start_year > 0) {  // if start_year was not previously set
+        var yearSql = "SELECT MIN(t.ano_censo) AS start_year FROM turmas AS t";
+        conn.query(yearSql, true).then(function(result) {
+            start_year = result.data.start_year;
+        });
+    }
 
-    tbl_name = "matriculas";
-    switch(req.query.agregar)
+    if (params.end_year)
     {
-    case "estado":
+        end_year = parseInt(params.end_year, 10);
+    } else if (end_year > 0) {  // if end_year was not previously set
+        var yearSql = "SELECT MAX(t.ano_censo) AS end_year FROM turmas AS t";
+        conn.query(yearSql, true).then(function(result) {
+            end_year = result.data.end_year;
+        });
+    }
+
+    switch(params.aggregate)
+    {
+    /** TODO: function to compute enrollments by state in the database not yet available
+    case "state":
         tbl_name = "matriculas_estado";
         break;
-    case "regiao":
-        tbl_name = "matriculas_regiao";
+    */
+    case "region":
+        if (!id) { // FIXME: parametrized query for all regions is not yet available
+            enrollmentSql = "SELECT nome AS name, total, ano_inicio AS start_year, ano_fim AS end_year \
+                FROM matRegiao(1," + start_year + "," + end_year + "," + adm_dependency_id + "," + location_id + ")";
+        } else {
+            enrollmentSql = "SELECT nome AS name, total, ano_inicio AS start_year, ano_fim AS end_year \
+                FROM matRegiao(" + id + "," + start_year + "," + end_year + "," + adm_dependency_id + "," + location_id + ")";
+        }
         break;
+    default:
+        enrollmentSql = "SELECT nome AS name, total, ano_inicio AS start_year, ano_fim AS end_year \
+            FROM matBrasil(" + start_year + "," + end_year + "," + adm_dependency_id + "," + location_id + ")";
     }
 
-    log.info("Querying table '" + tbl_name + "'");
+    log.debug(params);
+    log.debug("Executing query :\"" + enrollmentSql + "\"");
 
-    /* FIXME: Replace parameter substitution
-       - Might not be needed since the parameter tbl_name is not supplied by the user */
-    conn.query(
-        'SELECT * FROM ' + tbl_name, true
-    ).then(function(result) {
+    conn.query(enrollmentSql, true).then(function(result) {
         log.debug(result);
         if (req.params.format === 'csv') {
           res.csv(result.data)
-- 
GitLab