diff --git a/src/libs/routes/classCount.js b/src/libs/routes/classCount.js index 854b489a8a46aef657a35b6d9b556f9aaece2646..71b7ab36a540d3e6dff748d7840b3e5e815f0a04 100644 --- a/src/libs/routes/classCount.js +++ b/src/libs/routes/classCount.js @@ -298,21 +298,6 @@ classCountApp.get('/source', (req, res, next) => { next(); }, query, response('source')); -function averageCalc(response) { - let obj = []; - response.forEach((result) => { - let newObj = {}; - let keys = Object.keys(result); - keys.forEach((key) => { - if(key !== "total_classes" && key !== "total_enrollment") - newObj[key] = result[key] - }) - newObj.average = result.total_enrollment / result.total_classes; - obj.push(newObj); - }); - return(obj); -} - // Se a dimensão obrigatória do LDE (etapa de ensino) possui alguma etapa sem nenhum valor, então é criado um objeto // com média 0.0 e é inserido no resultado. Usada para não quebrar a sequência de etapas na tabela do LDE. function addNullFields(result) { @@ -339,10 +324,13 @@ function addNullFields(result) { classCountApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { // Faz a consulta do número de alunos pelas dimensões if(("education_level_mod" in req.dims) || ("education_level_mod" in req.filter)) { - req.sql.field('COUNT(turma.id)', 'total_classes') - .field('SUM(turma.num_matricula)', 'total_enrollment') - .field("'Brasil'", 'name') + req.sql.field("'Brasil'", 'name') .field('turma.ano_censo', 'year') + .field('AVG(turma.num_matricula)', 'average') + .field('MEDIAN(turma.num_matricula)', 'median') + .field('STDDEV_POP(turma.num_matricula)', 'stddev') + .field('QUANTILE(turma.num_matricula, 0.25)', 'first_qt') + .field('QUANTILE(turma.num_matricula, 0.75)', 'third_qt') .from('turma') .group('turma.ano_censo') .order('turma.ano_censo') @@ -358,7 +346,7 @@ classCountApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { }, rqf.build(), query, id2str.transform(), (req, res, next) => { req.partial = []; - // Caso tenha apenas uma dimensão, a indicador possuirá uma linha de total + // Caso tenha apenas uma dimensão, o indicador possuirá uma linha de total if((req.dims) && (req.dims.size == 1)) { req.partial = req.result; @@ -373,10 +361,13 @@ classCountApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.resetSql(); req.dims = {}; req.filter = yearFilter; - req.sql.field('COUNT(turma.id)', 'total_classes') - .field('SUM(turma.num_matricula)', 'total_enrollment') - .field("'Brasil'", 'name') + req.sql.field("'Brasil'", 'name') .field('turma.ano_censo', 'year') + .field('AVG(turma.num_matricula)', 'average') + .field('MEDIAN(turma.num_matricula)', 'median') + .field('STDDEV_POP(turma.num_matricula)', 'stddev') + .field('QUANTILE(turma.num_matricula, 0.25)', 'first_qt') + .field('QUANTILE(turma.num_matricula, 0.75)', 'third_qt') .from('turma') .group('turma.ano_censo') .order('turma.ano_censo') @@ -384,10 +375,10 @@ classCountApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { } next(); }, rqf.build(), query, addMissing(rqf), id2str.transform(), (req, res, next) => { + // Se tem apenas uma dimensão if(req.partial.length > 0) { - const classCount = averageCalc(req.partial); - const yearClassCount = averageCalc(req.result); - req.result = classCount; + const yearClassCount = req.result; + req.result = req.partial; // Como a linha de total deve aparecer em um caso especÃfico, ela é adicionada junto com a dimensão obrigatória yearClassCount.forEach((result) => { @@ -398,20 +389,21 @@ classCountApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { }) } // Caso tenha mais de uma dimensão, retorna a consulta só pelas dimensões, sem linha de total - else { - const classCount = averageCalc(req.result); - req.result = classCount; + else addNullFields(req.result); - } + next(); }, response('class_count')); // SimCAQ classCountApp.get('/count', rqf.parse(), rqf.build(), (req, res, next) => { - req.sql.field('COUNT(turma.id)', 'total_classes') - .field('SUM(turma.num_matricula)', 'total_enrollment') - .field("'Brasil'", 'name') + req.sql.field("'Brasil'", 'name') .field('turma.ano_censo', 'year') + .field('AVG(turma.num_matricula)', 'average') + .field('MEDIAN(turma.num_matricula)', 'median') + .field('STDDEV_POP(turma.num_matricula)', 'stddev') + .field('QUANTILE(turma.num_matricula, 0.25)', 'first_qt') + .field('QUANTILE(turma.num_matricula, 0.75)', 'third_qt') .from('turma') .group('turma.ano_censo') .order('turma.ano_censo') @@ -433,10 +425,13 @@ classCountApp.get('/count', rqf.parse(), rqf.build(), (req, res, next) => { req.resetSql(); req.dims = {}; req.filter = yearFilter; - req.sql.field('COUNT(turma.id)', 'total_classes') - .field('SUM(turma.num_matricula)', 'total_enrollment') - .field("'Brasil'", 'name') + req.sql.field("'Brasil'", 'name') .field('turma.ano_censo', 'year') + .field('AVG(turma.num_matricula)', 'average') + .field('MEDIAN(turma.num_matricula)', 'median') + .field('STDDEV_POP(turma.num_matricula)', 'stddev') + .field('QUANTILE(turma.num_matricula, 0.25)', 'first_qt') + .field('QUANTILE(turma.num_matricula, 0.75)', 'third_qt') .from('turma') .group('turma.ano_censo') .order('turma.ano_censo') @@ -444,10 +439,10 @@ classCountApp.get('/count', rqf.parse(), rqf.build(), (req, res, next) => { } next(); }, rqf.build(), query, addMissing(rqf), id2str.transform(), (req, res, next) => { + // Se possui apenas uma dimensão if(req.partial.length > 0) { - const classCount = averageCalc(req.partial); - const yearClassCount = averageCalc(req.result); - req.result = classCount; + const yearClassCount = req.result; + req.result = req.partial; // Adiciona os totais por anos ao fim da consulta // Como esse tipo de total é especÃfico desse indicador, um label foi adicionado para indicar @@ -458,10 +453,7 @@ classCountApp.get('/count', rqf.parse(), rqf.build(), (req, res, next) => { req.result.push(obj); }) } - else { - const classCount = averageCalc(req.result); - req.result = classCount; - } + // Caso tenha mais de uma dimensão, retorna a consulta só pelas dimensões, sem linha de total (req.result) next(); }, response('class_count'));