From 71db7dcc88edf9dc283f07ba50ea22ad0d07d7fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Tozatti=20Risso?= <jvtr12@inf.ufpr.br> Date: Mon, 7 Nov 2016 16:57:57 -0200 Subject: [PATCH] Add ordering to educational route queries in location module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: João Victor Tozatti Risso <jvtr12@inf.ufpr.br> --- src/libs/routes/location.js | 167 +++++++++++++++++++++++++++++++++--- 1 file changed, 153 insertions(+), 14 deletions(-) diff --git a/src/libs/routes/location.js b/src/libs/routes/location.js index 3db23d54..68ca03be 100644 --- a/src/libs/routes/location.js +++ b/src/libs/routes/location.js @@ -34,6 +34,79 @@ function locationIdToStr(locationId) { return locationStr; } +function schoolYearIdToStr(schoolYearId) +{ + let schoolYearStr; + switch(schoolYearId) { + case 11: + schoolYearStr = 'Creche'; + break; + case 21: + schoolYearStr = 'Pré-escola'; + break; + case 31: + schoolYearStr = 'EF-AI 1 Ano'; + break; + case 32: + schoolYearStr = 'EF-AI 2 Ano - 1 Serie'; + break; + case 33: + schoolYearStr = 'EF-AI 3 Ano - 2 Serie'; + break; + case 34: + schoolYearStr = 'EF-AI 4 Ano - 3 Serie'; + break; + case 35: + schoolYearStr = 'EF-AI 5 Ano - 4 Serie'; + break; + case 41: + schoolYearStr = 'EF-AF 6 Ano - 5 Serie'; + break; + case 42: + schoolYearStr = 'EF-AF 7 Ano - 6 Serie'; + break; + case 43: + schoolYearStr = 'EF-AF 8 Ano - 7 Serie'; + break; + case 44: + schoolYearStr = 'EF-AF 9 Ano - 8 Serie'; + break; + case 51: + schoolYearStr = 'EM 1 Série'; + break; + case 52: + schoolYearStr = 'EM 2 Série'; + break; + case 53: + schoolYearStr = 'EM 3 Série'; + break; + case 54: + schoolYearStr = 'EM 4 Série'; + break; + case 61: + schoolYearStr = 'EJA AI'; + break; + case 62: + schoolYearStr = 'EJA AF'; + break; + case 63: + schoolYearStr = 'EJA EM'; + break; + case 64: + schoolYearStr = 'EJA semi-presencial'; + break; + case 71: + schoolYearStr = 'EP'; + break; + case 81: + schoolYearStr = 'Atividades complementares e AEE'; + break; + default: + schoolYearStr = 'Não classificado'; + } + return schoolYearStr; +} + function processResultSet(querySet, querySetLabels = ["result"], singleResult = false) { const resultMap = new Map(); let resultIdx = 0; @@ -490,7 +563,8 @@ locationApp.get('/educational', (req, res, next) => { .where(`escola.ano_censo IN (${censusYearQry})`) .where('escola.id_tipo_turma = 0') .group('escola.tipo_localizacao') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('escola.tipo_localizacao'); const schoolClassYearQry = squel.select() .field('MAX(turma.ano_censo)') @@ -517,7 +591,8 @@ locationApp.get('/educational', (req, res, next) => { .where('turma.fk_tipo_turma_id <= 3') .where(`turma.ano_censo IN (${schoolClassYearQry})`) .group('turma.ano_censo') - .group('dependencia_adm.nome'); + .group('dependencia_adm.nome') + .order('dependencia_adm.nome'); const enrollmentsPerSchoolLevelQry = squel.select() .field('\'Brasil\'', 'name') @@ -576,7 +651,8 @@ locationApp.get('/educational/region/:id', (req, res, next) => { .where(`escola.ano_censo IN (${censusYearQry})`) .where('escola.id_tipo_turma = 0') .group('regiao.nome') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('regiao.nome'); const schoolsPerLocationQry = squel.select() .field('regiao.nome', 'name') @@ -593,7 +669,9 @@ locationApp.get('/educational/region/:id', (req, res, next) => { .where('escola.id_tipo_turma = 0') .group('regiao.nome') .group('escola.tipo_localizacao') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('regiao.nome') + .order('escola.tipo_localizacao'); const schoolClassYearQry = squel.select() .field('MAX(turma.ano_censo)') @@ -611,7 +689,8 @@ locationApp.get('/educational/region/:id', (req, res, next) => { .where(`turma.ano_censo IN (${schoolClassYearQry})`) .where('turma.fk_tipo_turma_id <= 3') .group('turma.ano_censo') - .group('regiao.nome'); + .group('regiao.nome') + .order('regiao.nome'); const enrollmentsPerAdmDepQry = squel.select() .field('regiao.nome', 'name') @@ -628,7 +707,9 @@ locationApp.get('/educational/region/:id', (req, res, next) => { .where(`turma.ano_censo IN (${schoolClassYearQry})`) .group('turma.ano_censo') .group('dependencia_adm.nome') - .group('regiao.nome'); + .group('regiao.nome') + .order('regiao.nome') + .order('dependencia_adm.nome'); const enrollmentsPerSchoolLevelQry = squel.select() .field('regiao.nome', 'name') @@ -690,7 +771,8 @@ locationApp.get('/educational/state/:id', (req, res, next) => { .where(`escola.ano_censo IN (${censusYearQry})`) .where('escola.id_tipo_turma = 0') .group('estado.nome') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('estado.nome'); const schoolsPerLocationQry = squel.select() .field('estado.nome', 'name') @@ -705,7 +787,9 @@ locationApp.get('/educational/state/:id', (req, res, next) => { .where('escola.id_tipo_turma = 0') .group('estado.nome') .group('escola.tipo_localizacao') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('estado.nome') + .order('escola.tipo_localizacao'); const schoolClassYearQry = squel.select() .field('MAX(turma.ano_censo)') @@ -723,7 +807,8 @@ locationApp.get('/educational/state/:id', (req, res, next) => { .where(`turma.ano_censo IN (${schoolClassYearQry})`) .where('turma.fk_tipo_turma_id <= 3') .group('turma.ano_censo') - .group('estado.nome'); + .group('estado.nome') + .order('estado.nome'); const enrollmentsPerAdmDepQry = squel.select() .field('estado.nome', 'name') @@ -740,7 +825,9 @@ locationApp.get('/educational/state/:id', (req, res, next) => { .where(`turma.ano_censo IN (${schoolClassYearQry})`) .group('turma.ano_censo') .group('dependencia_adm.nome') - .group('estado.nome'); + .group('estado.nome') + .order('estado.nome') + .order('dependencia_adm.nome'); const enrollmentsPerSchoolLevelQry = squel.select() .field('estado.nome', 'name') @@ -802,7 +889,8 @@ locationApp.get('/educational/city/:id', (req, res, next) => { .where(`escola.ano_censo IN (${censusYearQry})`) .where('escola.id_tipo_turma = 0') .group('municipio.nome') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('municipio.nome'); const schoolsPerLocationQry = squel.select() .field('municipio.nome', 'name') @@ -817,7 +905,9 @@ locationApp.get('/educational/city/:id', (req, res, next) => { .where('escola.id_tipo_turma = 0') .group('municipio.nome') .group('escola.tipo_localizacao') - .group('escola.ano_censo'); + .group('escola.ano_censo') + .order('municipio.nome') + .order('escola.tipo_localizacao'); const schoolClassYearQry = squel.select() .field('MAX(turma.ano_censo)') @@ -835,7 +925,8 @@ locationApp.get('/educational/city/:id', (req, res, next) => { .where(`turma.ano_censo IN (${schoolClassYearQry})`) .where('turma.fk_tipo_turma_id <= 3') .group('turma.ano_censo') - .group('municipio.nome'); + .group('municipio.nome') + .order('municipio.nome'); const enrollmentsPerAdmDepQry = squel.select() .field('municipio.nome', 'name') @@ -852,7 +943,9 @@ locationApp.get('/educational/city/:id', (req, res, next) => { .where(`turma.ano_censo IN (${schoolClassYearQry})`) .group('turma.ano_censo') .group('dependencia_adm.nome') - .group('municipio.nome'); + .group('municipio.nome') + .order('municipio.nome') + .order('dependencia_adm.nome'); const enrollmentsPerSchoolLevelQry = squel.select() .field('municipio.nome', 'name') @@ -894,4 +987,50 @@ locationApp.get('/educational/city/:id', (req, res, next) => { }); }, response('location')); +/* TODO: fix response format to nest objects by year +locationApp.get('/educational/per_year', (req, res, next) => { + 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.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id') + .where('turma.fk_tipo_turma_id <= 3') + .group('etapa_ensino.desc_etapa') + .group('turma.serie_ano') + .group('turma.ano_censo') + .order('etapa_ensino.desc_etapa') + .order('turma.serie_ano') + .order('turma.ano_censo'); + + const queryLabels = [ "enrollment_per_school_level" ]; + const querySet = [ enrollmentsPerSchoolLevelQry ]; + // wait until all queries finish or one of them fail + Promise.all(dbExecAll(querySet)).then((queryResults) => { + const result = queryResults[0]; + let response = {}; + for(let i = 0; i < result.length; ++i) { + log.debug(result[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 response[school_level] === "undefined") { + response[school_level] = {}; + } + if (typeof response[school_level][school_year] === "undefined") { + response[school_level][school_year] = {}; + } + response[school_level][school_year] = parseInt(result[i].total, 10); + } + req.result = response; + next(); + }).catch((error) => { + log.error(`[SQL query error] ${error}`); + next(error); + }); +}, response('location')); +*/ + module.exports = locationApp; -- GitLab