Skip to content
Snippets Groups Projects
Unverified Commit 8d77d014 authored by João Victor Risso's avatar João Victor Risso
Browse files

Add education level and fix issue with adm_dependency_id

Changelog:
- Add education level to all queries

- Add route '/education_level' to query the available education levels.
  The response is a set of pairs (id, education_level)

- Change var declarations to their respective const and let counterparts

- Fix wrong foreign key name in the aggregation by states. When a
  adm_dependency_id parameter was supplied, the query would fail.
parent 2c75a3db
No related branches found
No related tags found
1 merge request!7Refactor enrollments route to include query building
Pipeline #
'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
  • @vsbc14 @gas15 Education level ('etapa de ensino') added to the API on the refactor_enrollments branch.

    @lgl15 How can one adapt the tests to use all possible combination of parameters?

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment