From 73424fbf64ae93f89cee5f9b879e79187ddcfbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Tozatti=20Risso?= <jvtr12@c3sl.ufpr.br> Date: Mon, 11 Jul 2016 14:51:08 -0300 Subject: [PATCH] Implement queries for cities and states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: João Victor Tozatti Risso <jvtr12@c3sl.ufpr.br> --- libs/routes/api.js | 78 ++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/libs/routes/api.js b/libs/routes/api.js index ad255719..eb1926e0 100644 --- a/libs/routes/api.js +++ b/libs/routes/api.js @@ -47,8 +47,7 @@ router.get('/enrollments', function(req, res) { var id = 0; var location_id = 0; var adm_dependency_id = 0; - var start_year = 0; - var end_year = 0; + var census_year = 0; var enrollmentSql = ""; if (params.id) @@ -63,77 +62,66 @@ router.get('/enrollments', function(req, res) { if (params.adm_dependency_id) { - adm_dependency_id = parseInt(params.adm_dependency_id) + adm_dependency_id = parseInt(params.adm_dependency_id, 10); } - if (!params.start_year && !params.end_year) + if (params.census_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; - }); - } - - if (params.end_year) - { - 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; - }); + census_year = parseInt(params.census_year, 10); } + /** + * FIXME: parameter substitution in the queries is not safe (vulnerable to + * SQL injection). Substitution from MonetDB module is not working for some + * reason. + */ switch(params.aggregate) { - /** TODO: function to compute enrollments by state in the database not yet available + case "city": + if (id) { + enrollmentSql = "SELECT nome AS name, total FROM mat_municipio(" + id + "," + census_year + "," + adm_dependency_id + "," + location_id + ")"; + } else { + enrollmentSql = "SELECT nome AS name, total FROM mat_municipios(" + census_year + "," + adm_dependency_id + "," + location_id + ")"; + } + break; case "state": - tbl_name = "matriculas_estado"; + if (id) { + enrollmentSql = "SELECT nome AS name, total FROM mat_estado(" + id + "," + census_year + "," + adm_dependency_id + "," + location_id + ")"; + } else { + enrollmentSql = "SELECT nome AS name, total FROM mat_estados(" + census_year + "," + adm_dependency_id + "," + location_id + ")"; + } break; - */ case "region": - if (!id) { - enrollmentSql = "SELECT nome AS name, total, ano_inicio AS start_year, ano_fim AS end_year \ - FROM matRegioes(" + start_year + "," + end_year + "," + adm_dependency_id + "," + location_id + ")"; + if (id) { + enrollmentSql = "SELECT nome AS name, total FROM mat_regiao(" + id + "," + census_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 + ")"; + enrollmentSql = "SELECT nome AS name, total FROM mat_regioes(" + census_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 + ")"; + enrollmentSql = "SELECT nome AS name, total FROM mat_brasil(" + census_year + "," + adm_dependency_id + "," + location_id + ")"; } log.debug(params); - log.debug("Executing query :\"" + enrollmentSql + "\""); + log.debug("Executing query: " + enrollmentSql); + log.debug("Query parameters:" + enrollmentSqlParams); - conn.query(enrollmentSql, true).then(function(result) { + conn.query(enrollmentSql).then(function(result) { log.debug(result); if (req.query.format === 'csv') { - res.csv(result.data) + res.csv(result.data); } else if (req.query.format === 'xml') { - res.set('Content-Type', 'text/xml') + res.set('Content-Type', 'text/xml'); res.send(xml({ result: result.data - })) + })); } else { res.json({ result: result.data - }) + }); } + log.debug("All resources were released"); }); }) -- GitLab