Skip to content
Snippets Groups Projects
Commit 8ecf8b26 authored by Vytor Calixto's avatar Vytor Calixto :space_invader:
Browse files

Change /spatial/educational/school_level to use RQF

parent 8da95fa1
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!34Db simcaq dev2
Pipeline #
...@@ -351,247 +351,26 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => { ...@@ -351,247 +351,26 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
}); });
}, response('spatial')); }, response('spatial'));
spatialApp.get('/educational/school_level', (req, res, next) => { spatialApp.get('/educational/school_level', rqf.parse(), rqf.build(), (req, res, next) => {
const enrollmentsPerSchoolLevelYearQry = squel.select() const enrollmentsPerSchoolLevelYearQry = squel.select()
.field('MAX(turma.ano_censo)', 'census_year') .field('MAX(matricula.ano_censo)', 'census_year')
.from('turma'); .from('matricula');
const enrollmentsPerSchoolLevelQry = squel.select() const enrollmentsPerSchoolLevelQry = req.sql.clone()
.field('COALESCE(SUM(turma.num_matriculas), 0)', 'total') .field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('turma.ano_censo', 'census_year') .field('matricula.ano_censo', 'census_year')
.field('turma.serie_ano', 'school_year') .field('matricula.serie_ano_id', 'school_year')
.field('etapa_ensino.desc_etapa', 'school_level') .field('etapa_ensino.desc_etapa', 'school_level_name')
.from('turma') .from('matricula')
.from('etapa_ensino') .join('etapa_ensino', null, 'matricula.etapa_ensino_id=etapa_ensino.id')
.where(`turma.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`) .where(`matricula.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`)
.where('turma.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id') .where('matricula.tipo <= 3')
.where('turma.fk_tipo_turma_id <= 3')
.group('etapa_ensino.desc_etapa')
.group('etapa_ensino.pk_etapa_ensino_id')
.group('turma.serie_ano')
.group('turma.ano_censo')
.order('etapa_ensino.pk_etapa_ensino_id')
.order('turma.serie_ano')
.order('turma.ano_censo');
const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ];
const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ];
// wait until all queries finish or one of them fail
Promise.all(dbExecAll(querySet, enrollmentsPerSchoolLevelYearQry)).then((queryResults) => {
const result = queryResults[0];
const censusYear = queryResults[1][0]['census_year'];
let school_levels = {};
for(let i = 0; i < result.length; ++i) {
const school_year = schoolYearIdToStr(result[i].school_year);
const school_level = result[i].school_level;
const census_year = result[i].census_year;
if (typeof school_levels[school_level] === 'undefined') {
school_levels[school_level] = {};
}
school_levels[school_level][school_year] = parseInt(result[i].total, 10);
}
let response = [];
for(let level in school_levels) {
if (school_levels.hasOwnProperty(level)) {
let sclevel = {};
sclevel["degree"] = level;
sclevel["census_year"] = parseInt(censusYear, 10);
sclevel["table"] = [];
for(let school_year in school_levels[level]) {
if (school_levels[level].hasOwnProperty(school_year)) {
let enrollment = { 'title' : school_year,
'value' : school_levels[level][school_year] };
sclevel["table"].push(enrollment);
}
}
response.push(sclevel);
}
}
req.result = response;
next();
}).catch((error) => {
log.error(`[SQL query error] ${error}`);
next(error);
});
}, response('location'));
spatialApp.get('/educational/school_level/region/:id', (req, res, next) => {
const regionId = parseInt(req.params.id, 10);
const enrollmentsPerSchoolLevelYearQry = squel.select()
.field('MAX(turma.ano_censo)', 'census_year')
.from('turma');
const enrollmentsPerSchoolLevelQry = squel.select()
.field('COALESCE(SUM(turma.num_matriculas), 0)', 'total')
.field('turma.ano_censo', 'census_year')
.field('turma.serie_ano', 'school_year')
.field('etapa_ensino.desc_etapa', 'school_level')
.from('turma')
.from('etapa_ensino')
.from('regiao')
.where(`turma.fk_regiao_id = ${regionId}`)
.where('turma.fk_regiao_id = regiao.pk_regiao_id')
.where(`turma.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`)
.where('turma.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id')
.where('turma.fk_tipo_turma_id <= 3')
.group('regiao.nome')
.group('etapa_ensino.desc_etapa')
.group('etapa_ensino.pk_etapa_ensino_id')
.group('turma.serie_ano')
.group('turma.ano_censo')
.order('regiao.nome')
.order('etapa_ensino.pk_etapa_ensino_id')
.order('turma.serie_ano')
.order('turma.ano_censo');
const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ];
const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ];
// wait until all queries finish or one of them fail
Promise.all(dbExecAll(querySet, enrollmentsPerSchoolLevelYearQry)).then((queryResults) => {
const result = queryResults[0];
const censusYear = queryResults[1][0]['census_year'];
let school_levels = {};
for(let i = 0; i < result.length; ++i) {
const school_year = schoolYearIdToStr(result[i].school_year);
const school_level = result[i].school_level;
const census_year = result[i].census_year;
if (typeof school_levels[school_level] === 'undefined') {
school_levels[school_level] = {};
}
school_levels[school_level][school_year] = parseInt(result[i].total, 10);
}
let response = [];
for(let level in school_levels) {
if (school_levels.hasOwnProperty(level)) {
let sclevel = {};
sclevel["degree"] = level;
sclevel["census_year"] = parseInt(censusYear, 10);
sclevel["table"] = [];
for(let school_year in school_levels[level]) {
if (school_levels[level].hasOwnProperty(school_year)) {
let enrollment = { 'title' : school_year,
'value' : school_levels[level][school_year] };
sclevel["table"].push(enrollment);
}
}
response.push(sclevel);
}
}
req.result = response;
next();
}).catch((error) => {
log.error(`[SQL query error] ${error}`);
next(error);
});
}, response('location'));
spatialApp.get('/educational/school_level/state/:id', (req, res, next) => {
const stateId = parseInt(req.params.id, 10);
const enrollmentsPerSchoolLevelYearQry = squel.select()
.field('MAX(turma.ano_censo)', 'census_year')
.from('turma');
const enrollmentsPerSchoolLevelQry = squel.select()
.field('COALESCE(SUM(turma.num_matriculas), 0)', 'total')
.field('turma.ano_censo', 'census_year')
.field('turma.serie_ano', 'school_year')
.field('etapa_ensino.desc_etapa', 'school_level')
.from('turma')
.from('etapa_ensino')
.from('estado')
.where(`turma.fk_estado_id = ${stateId}`)
.where('turma.fk_estado_id = estado.pk_estado_id')
.where(`turma.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`)
.where('turma.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id')
.where('turma.fk_tipo_turma_id <= 3')
.group('estado.nome')
.group('etapa_ensino.desc_etapa')
.group('etapa_ensino.pk_etapa_ensino_id')
.group('turma.serie_ano')
.group('turma.ano_censo')
.order('estado.nome')
.order('etapa_ensino.pk_etapa_ensino_id')
.order('turma.serie_ano')
.order('turma.ano_censo');
const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ];
const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ];
// wait until all queries finish or one of them fail
Promise.all(dbExecAll(querySet, enrollmentsPerSchoolLevelYearQry)).then((queryResults) => {
const result = queryResults[0];
const censusYear = queryResults[1][0]['census_year'];
let school_levels = {};
for(let i = 0; i < result.length; ++i) {
const school_year = schoolYearIdToStr(result[i].school_year);
const school_level = result[i].school_level;
const census_year = result[i].census_year;
if (typeof school_levels[school_level] === 'undefined') {
school_levels[school_level] = {};
}
school_levels[school_level][school_year] = parseInt(result[i].total, 10);
}
let response = [];
for(let level in school_levels) {
if (school_levels.hasOwnProperty(level)) {
let sclevel = {};
sclevel["degree"] = level;
sclevel["census_year"] = parseInt(censusYear, 10);
sclevel["table"] = [];
for(let school_year in school_levels[level]) {
if (school_levels[level].hasOwnProperty(school_year)) {
let enrollment = { 'title' : school_year,
'value' : school_levels[level][school_year] };
sclevel["table"].push(enrollment);
}
}
response.push(sclevel);
}
}
req.result = response;
next();
}).catch((error) => {
log.error(`[SQL query error] ${error}`);
next(error);
});
}, response('location'));
spatialApp.get('/educational/school_level/city/:id', (req, res, next) => {
const cityId = parseInt(req.params.id, 10);
const enrollmentsPerSchoolLevelYearQry = squel.select()
.field('MAX(turma.ano_censo)', 'census_year')
.from('turma');
const enrollmentsPerSchoolLevelQry = squel.select()
.field('COALESCE(SUM(turma.num_matriculas), 0)', 'total')
.field('turma.ano_censo', 'census_year')
.field('turma.serie_ano', 'school_year')
.field('etapa_ensino.desc_etapa', 'school_level')
.from('turma')
.from('etapa_ensino')
.from('municipio')
.where(`turma.fk_municipio_id = ${cityId}`)
.where('turma.fk_municipio_id = municipio.pk_cod_ibge')
.where(`turma.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`)
.where('turma.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id')
.where('turma.fk_tipo_turma_id <= 3')
.group('municipio.nome')
.group('etapa_ensino.desc_etapa') .group('etapa_ensino.desc_etapa')
.group('etapa_ensino.pk_etapa_ensino_id') .group('matricula.serie_ano_id')
.group('turma.serie_ano') .group('matricula.ano_censo')
.group('turma.ano_censo') .order('etapa_ensino.id')
.order('municipio.nome') .order('matricula.serie_ano_id')
.order('etapa_ensino.pk_etapa_ensino_id') .order('matricula.ano_censo');
.order('turma.serie_ano')
.order('turma.ano_censo');
const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ]; const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ];
const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ]; const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ];
...@@ -634,6 +413,6 @@ spatialApp.get('/educational/school_level/city/:id', (req, res, next) => { ...@@ -634,6 +413,6 @@ spatialApp.get('/educational/school_level/city/:id', (req, res, next) => {
log.error(`[SQL query error] ${error}`); log.error(`[SQL query error] ${error}`);
next(error); next(error);
}); });
}, response('location')); }, response('spatial'));
module.exports = spatialApp; module.exports = spatialApp;
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