From 8ecf8b268f5dc25f219e9dbf98e3d6d20684a32b Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Wed, 22 Mar 2017 11:22:40 -0300 Subject: [PATCH] Change /spatial/educational/school_level to use RQF --- src/libs/routes/spatial.js | 257 +++---------------------------------- 1 file changed, 18 insertions(+), 239 deletions(-) diff --git a/src/libs/routes/spatial.js b/src/libs/routes/spatial.js index ffda3cee..82daae57 100644 --- a/src/libs/routes/spatial.js +++ b/src/libs/routes/spatial.js @@ -351,247 +351,26 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => { }); }, 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() - .field('MAX(turma.ano_censo)', 'census_year') - .from('turma'); + .field('MAX(matricula.ano_censo)', 'census_year') + .from('matricula'); - 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') - .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('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') + const enrollmentsPerSchoolLevelQry = req.sql.clone() + .field('COALESCE(COUNT(matricula.id), 0)', 'total') + .field('matricula.ano_censo', 'census_year') + .field('matricula.serie_ano_id', 'school_year') + .field('etapa_ensino.desc_etapa', 'school_level_name') + .from('matricula') + .join('etapa_ensino', null, 'matricula.etapa_ensino_id=etapa_ensino.id') + .where(`matricula.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`) + .where('matricula.tipo <= 3') .group('etapa_ensino.desc_etapa') - .group('etapa_ensino.pk_etapa_ensino_id') - .group('turma.serie_ano') - .group('turma.ano_censo') - .order('municipio.nome') - .order('etapa_ensino.pk_etapa_ensino_id') - .order('turma.serie_ano') - .order('turma.ano_censo'); + .group('matricula.serie_ano_id') + .group('matricula.ano_censo') + .order('etapa_ensino.id') + .order('matricula.serie_ano_id') + .order('matricula.ano_censo'); const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ]; const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ]; @@ -634,6 +413,6 @@ spatialApp.get('/educational/school_level/city/:id', (req, res, next) => { log.error(`[SQL query error] ${error}`); next(error); }); -}, response('location')); +}, response('spatial')); module.exports = spatialApp; -- GitLab