diff --git a/libs/routes/api.js b/libs/routes/api.js index feebd9c24202ed35cba2d2d07ba73b0a7d9afba5..9911bf10c84a45c3f661be4bcd5fce399f3cff04 100644 --- a/libs/routes/api.js +++ b/libs/routes/api.js @@ -1,28 +1,28 @@ 'use strict'; -var express = require('express') -var xml = require('js2xmlparser') -var router = express.Router() +const express = require('express'); +const xml = require('js2xmlparser'); +const enrollmentsApp = express(); -var libs = process.cwd() + '/libs/' +const libs = process.cwd() + '/libs/'; -var log = require(libs + 'log')(module) -var config = require(libs + 'config') +const log = require(libs + 'log')(module); +const config = require(libs + 'config'); -var conn = require(libs + 'db/monet') +const conn = require(libs + 'db/monet'); -router.get('/', function (req, res) { +enrollmentsApp.get('/', function (req, res) { res.json({ msg: 'SimCAQ API is running' - }) -}) + }); +}); /** * 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) { +enrollmentsApp.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) { if (req.query.format === 'csv') { @@ -35,16 +35,38 @@ router.get('/year_range', function(req, res) { result: result.data }); } + }, function(error) { + log.error('SQL query error: ${ error.message }?'); + log.debug(error); + res.send('Request could not be satisfied due to an internal error'); }); -}) +}); + +enrollmentsApp.get('/education_level', function(req, res) { + var edLevelId = "SELECT pk_etapa_ensino_id AS id, desc_etapa AS education_level FROM etapa_ensino"; + conn.query(edLevelId, true).then(function(result) { + if (req.query.format === 'csv') { + res.csv(result.data); + } else if (req.query.format === 'xml') { + res.send(xml("result", JSON.stringify({year_range: result.data}))) + } + else { + res.json({ + result: result.data + }); + } + }, function(error) { + log.error('SQL query error: ${ error.message }?'); + log.debug(error); + res.send('Request could not be satisfied due to an internal error'); + }); +}); -router.get('/data', function(req, res) { +enrollmentsApp.get('/data', function(req, res) { log.debug(req.query) log.debug(req.query.met) log.debug(req.query.dim) - conn.query( - 'SELECT * FROM turmas' - ).then(function(result) { + conn.query('SELECT * FROM turmas LIMIT 5', true).then(function(result) { if (req.query.format === 'csv') { res.csv(result.data); } else if (req.query.format === 'xml') { @@ -55,10 +77,14 @@ router.get('/data', function(req, res) { result: result.data }); } - }) + }, function(error) { + log.error('SQL query error: ${ error.message }?'); + log.debug(error); + res.send('Request could not be satisfied due to an internal error'); + }); }) -router.get('/enrollments', function(req, res, next) { +enrollmentsApp.use('/enrollments', function(req, res, next) { const params = req.query; req.paramCnt = 0; @@ -82,10 +108,15 @@ router.get('/enrollments', function(req, res, next) { req.paramCnt += 1; } + if (typeof params.education_level_id !== 'undefined') { + req.education_level_id = parseInt(params.education_level_id, 10); + req.paramCnt += 1; + } + next(); }); -router.get('/enrollments', function(req, res, next) { +enrollmentsApp.use('/enrollments', function(req, res, next) { const params = req.query; if (typeof params.aggregate !== 'undefined' && params.aggregate === 'region') { log.debug('Using enrollments query for regions'); @@ -115,6 +146,12 @@ router.get('/enrollments', function(req, res, next) { req.sqlQueryParams.push(req.location_id); } + if (typeof req.education_level_id !== 'undefined') { + req.sqlQuery += ' AND '; + req.sqlQuery += 't.fk_etapa_ensino_id = ?'; + req.sqlQueryParams.push(req.education_level_id); + } + req.sqlQuery += ')'; if (typeof req.id !== 'undefined') { req.sqlQuery += ' WHERE '; @@ -126,7 +163,7 @@ router.get('/enrollments', function(req, res, next) { next(); }); -router.get('/enrollments', function(req, res, next) { +enrollmentsApp.use('/enrollments', function(req, res, next) { const params = req.query; if (typeof params.aggregate !== 'undefined' && params.aggregate === 'state') { log.debug('Using enrollments query for states'); @@ -155,6 +192,12 @@ router.get('/enrollments', function(req, res, next) { req.sqlQueryParams.push(req.location_id); } + if (typeof req.education_level_id !== 'undefined') { + req.sqlQuery += ' AND '; + req.sqlQuery += 't.fk_etapa_ensino_id = ?'; + req.sqlQueryParams.push(req.education_level_id); + } + req.sqlQuery += ')'; if (typeof req.id !== 'undefined') { @@ -168,7 +211,7 @@ router.get('/enrollments', function(req, res, next) { next(); }); -router.get('/enrollments', function(req, res, next) { +enrollmentsApp.use('/enrollments', function(req, res, next) { const params = req.query; if (typeof params.aggregate !== 'undefined' && params.aggregate === 'city') { log.debug('Using enrollments query for cities'); @@ -196,6 +239,12 @@ router.get('/enrollments', function(req, res, next) { req.sqlQueryParams.push(req.location_id); } + if (typeof req.education_level_id !== 'undefined') { + req.sqlQuery += ' AND '; + req.sqlQuery += 't.fk_etapa_ensino_id = ?'; + req.sqlQueryParams.push(req.education_level_id); + } + req.sqlQuery += ')'; if (typeof req.id !== 'undefined') { @@ -209,7 +258,7 @@ router.get('/enrollments', function(req, res, next) { next(); }); -router.get('/enrollments', function(req, res, next) { +enrollmentsApp.use('/enrollments', function(req, res, next) { const params = req.query; if (typeof params.aggregate === 'undefined') { log.debug('Using enrollments query for the whole country'); @@ -230,7 +279,7 @@ router.get('/enrollments', function(req, res, next) { if (req.sqlQueryParams.length > 0) { req.sqlQuery += ' AND '; } - req.sqlQuery += 't.fk_dependencia_adm = ?'; + req.sqlQuery += 't.fk_dependencia_adm_id = ?'; req.sqlQueryParams.push(req.adm_dependency_id); } @@ -241,11 +290,19 @@ router.get('/enrollments', function(req, res, next) { req.sqlQuery += 't.id_localizacao = ?'; req.sqlQueryParams.push(req.location_id); } + + if (typeof req.education_level_id !== 'undefined') { + if (req.sqlQueryParams.length > 0) { + req.sqlQuery += ' AND '; + } + req.sqlQuery += 't.fk_etapa_ensino_id = ?'; + req.sqlQueryParams.push(req.education_level_id); + } } next(); }); -router.get('/enrollments', function(req, res, next) { +enrollmentsApp.get('/enrollments', function(req, res, next) { log.debug('Request parameters: ${ req }?'); if (typeof req.sqlQuery === 'undefined') { /* Should only happen if there is a bug in the chaining of the @@ -276,4 +333,4 @@ router.get('/enrollments', function(req, res, next) { } }); -module.exports = router +module.exports = enrollmentsApp