diff --git a/libs/routes/api.js b/libs/routes/api.js index d5dadcd3d622a4c4574f1286c5f89f9bf4f1dc42..aa8dbdee55baa468c7ea12b66495c1888533f821 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)