From 9554c18b151551ea708612fdd24ed4fa5dc54f92 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Risso?= <joaovictor.risso@gmail.com>
Date: Fri, 28 Oct 2016 11:01:36 -0200
Subject: [PATCH] Fix location type in school queries

- Change id_localizacao to tipo_localizacao when querying escola (school) table
- Add missing condition for querying escola table, which is tuples that have id_tipo_turma = 0, according to the use case.
---
 src/libs/routes/location.js | 119 +++++++++++++++++++++++-------------
 1 file changed, 76 insertions(+), 43 deletions(-)

diff --git a/src/libs/routes/location.js b/src/libs/routes/location.js
index a4289272..241fdcac 100644
--- a/src/libs/routes/location.js
+++ b/src/libs/routes/location.js
@@ -15,14 +15,21 @@ const response = require(`${libs}/middlewares/response`);
 const locationApp = express();
 
 function locationIdToStr(locationId) {
-    let locationStr = 'Todas';
+    let locationStr = 'Total';
     switch(locationId) {
         case 1:
-            locationStr = 'Urbana';
-            break;
+            locationStr = 'Urbana';                         break;
         case 2:
-            locationStr = 'Rural';
-            break;
+            locationStr = 'Rural';                          break;
+        case 3:
+            locationStr = 'Área de assentamento';           break;
+        case 4:
+            locationStr = 'Terra indígena';                 break;
+        case 5:
+            locationStr = 'Área remanescente de quilombos'; break;
+        case 6:
+            locationStr = 'Unidade de uso sustentável';     break;
+
     }
     return locationStr;
 }
@@ -33,7 +40,7 @@ locationApp.get('/sociodemographic', (req, res, next) => {
         .from('ibge_populacao');
 
     const populationQry = squel.select()
-        .field('\'Brasil\'', 'location')
+        .field('\'Brasil\'', 'name')
         .field('SUM(populacao)', 'population')
         .field('ibge_populacao.ano_censo')
         .from('ibge_populacao')
@@ -45,7 +52,7 @@ locationApp.get('/sociodemographic', (req, res, next) => {
         .from('ibge_pib');
 
     const pibQry = squel.select()
-        .field('\'Brasil\'', 'location')
+        .field('\'Brasil\'', 'name')
         .field('AVG(ibge_pib.pib_per_capita)', 'gdp_per_capita')
         .field('ibge_pib.ano_censo')
         .from('ibge_pib')
@@ -57,7 +64,7 @@ locationApp.get('/sociodemographic', (req, res, next) => {
         .from('adh_idh');
 
     const idhQry = squel.select()
-        .field('\'Brasil\'', 'location')
+        .field('\'Brasil\'', 'name')
         .field('AVG(idhm)', 'idhm')
         .field('adh_idh.ano_censo')
         .from('adh_idh')
@@ -69,7 +76,7 @@ locationApp.get('/sociodemographic', (req, res, next) => {
         .from('adh_analfabetismo');
 
     const analfabQry = squel.select()
-        .field('\'Brasil\'', 'location')
+        .field('\'Brasil\'', 'name')
         .field('AVG(t_analf15m)', 'analfabetism')
         .field('adh_analfabetismo.ano_censo')
         .from('adh_analfabetismo')
@@ -81,7 +88,7 @@ locationApp.get('/sociodemographic', (req, res, next) => {
         .from('adh_gini');
 
     const giniQry = squel.select()
-        .field('\'Brasil\'', 'location')
+        .field('\'Brasil\'', 'name')
         .field('AVG(gini)', 'gini')
         .field('adh_gini.ano_censo')
         .from('adh_gini')
@@ -114,7 +121,7 @@ locationApp.get('/sociodemographic/region/:id', (req, res, next) => {
         .from('ibge_populacao');
 
     const populationQry = squel.select()
-        .field('regiao.nome', 'location')
+        .field('regiao.nome', 'name')
         .field('SUM(populacao)', 'population')
         .field('ano_censo', 'census_year')
         .from('ibge_populacao')
@@ -135,7 +142,7 @@ locationApp.get('/sociodemographic/region/:id', (req, res, next) => {
         .from('ibge_pib');
 
     const pibQry = squel.select()
-        .field('regiao.nome', 'location')
+        .field('regiao.nome', 'name')
         .field('AVG(ibge_pib.pib_per_capita)', 'gdp_per_capita')
         .field('ano_censo', 'census_year')
         .from('ibge_pib')
@@ -156,7 +163,7 @@ locationApp.get('/sociodemographic/region/:id', (req, res, next) => {
         .from('adh_idh');
 
     const idhQry = squel.select()
-        .field('regiao.nome', 'location')
+        .field('regiao.nome', 'name')
         .field('AVG(idhm)', 'idhm')
         .field('ano_censo', 'census_year')
         .from('adh_idh')
@@ -177,7 +184,7 @@ locationApp.get('/sociodemographic/region/:id', (req, res, next) => {
         .from('adh_analfabetismo');
 
     const analfabQry = squel.select()
-        .field('regiao.nome', 'location')
+        .field('regiao.nome', 'name')
         .field('AVG(t_analf15m)', 'analfabetism')
         .field('ano_censo', 'census_year')
         .from('adh_analfabetismo')
@@ -198,7 +205,7 @@ locationApp.get('/sociodemographic/region/:id', (req, res, next) => {
         .from('adh_gini');
 
     const giniQry = squel.select()
-        .field('regiao.nome', 'location')
+        .field('regiao.nome', 'name')
         .field('AVG(gini)', 'gini')
         .field('ano_censo', 'census_year')
         .from('adh_gini')
@@ -240,7 +247,7 @@ locationApp.get('/sociodemographic/state/:id', (req, res, next) => {
         .from('ibge_populacao');
     // load all cities by state and compute the sociodemographic and educational information
     const populationQry = squel.select()
-        .field('estado.nome', 'location')
+        .field('estado.nome', 'name')
         .field('SUM(populacao)', 'population')
         .field('ibge_populacao.ano_censo', 'census_year')
         .from('ibge_populacao')
@@ -259,7 +266,7 @@ locationApp.get('/sociodemographic/state/:id', (req, res, next) => {
         .from('ibge_pib');
 
     const pibQry = squel.select()
-        .field('estado.nome', 'location')
+        .field('estado.nome', 'name')
         .field('AVG(ibge_pib.pib_per_capita)', 'gdp_per_capita')
         .field('ibge_pib.ano_censo', 'census_year')
         .from('ibge_pib')
@@ -278,7 +285,7 @@ locationApp.get('/sociodemographic/state/:id', (req, res, next) => {
         .from('adh_idh');
 
     const idhQry = squel.select()
-        .field('estado.nome', 'location')
+        .field('estado.nome', 'name')
         .field('AVG(idhm)', 'idhm')
         .field('adh_idh.ano_censo', 'census_year')
         .from('adh_idh')
@@ -297,7 +304,7 @@ locationApp.get('/sociodemographic/state/:id', (req, res, next) => {
         .from('adh_analfabetismo');
 
     const analfabQry = squel.select()
-        .field('estado.nome', 'location')
+        .field('estado.nome', 'name')
         .field('AVG(t_analf15m)', 'analfabetism')
         .field('adh_analfabetismo.ano_censo', 'census_year')
         .from('adh_analfabetismo')
@@ -316,7 +323,7 @@ locationApp.get('/sociodemographic/state/:id', (req, res, next) => {
         .from('adh_gini');
 
     const giniQry = squel.select()
-        .field('estado.nome', 'location')
+        .field('estado.nome', 'name')
         .field('AVG(gini)', 'gini')
         .field('adh_gini.ano_censo', 'census_year')
         .from('adh_gini')
@@ -356,7 +363,7 @@ locationApp.get('/sociodemographic/city/:id', (req, res, next) => {
         .from('ibge_populacao');
     // load all cities by state and compute the sociodemographic and educational information
     const populationQry = squel.select()
-        .field('municipio.nome', 'location')
+        .field('municipio.nome', 'name')
         .field('SUM(populacao)', 'population')
         .field('ibge_populacao.ano_censo', 'census_year')
         .from('ibge_populacao')
@@ -373,7 +380,7 @@ locationApp.get('/sociodemographic/city/:id', (req, res, next) => {
         .from('ibge_pib');
 
     const pibQry = squel.select()
-        .field('municipio.nome', 'location')
+        .field('municipio.nome', 'name')
         .field('AVG(ibge_pib.pib_per_capita)', 'gdp_per_capita')
         .field('ibge_pib.ano_censo', 'census_year')
         .from('ibge_pib')
@@ -390,7 +397,7 @@ locationApp.get('/sociodemographic/city/:id', (req, res, next) => {
         .from('adh_idh');
 
     const idhQry = squel.select()
-        .field('municipio.nome', 'location')
+        .field('municipio.nome', 'name')
         .field('AVG(idhm)', 'idhm')
         .field('adh_idh.ano_censo', 'census_year')
         .from('adh_idh')
@@ -407,7 +414,7 @@ locationApp.get('/sociodemographic/city/:id', (req, res, next) => {
         .from('adh_analfabetismo');
 
     const analfabQry = squel.select()
-        .field('municipio.nome', 'location')
+        .field('municipio.nome', 'name')
         .field('AVG(t_analf15m)', 'analfabetism')
         .field('adh_analfabetismo.ano_censo', 'census_year')
         .from('adh_analfabetismo')
@@ -424,7 +431,7 @@ locationApp.get('/sociodemographic/city/:id', (req, res, next) => {
         .from('adh_gini');
 
     const giniQry = squel.select()
-        .field('municipio.nome', 'location')
+        .field('municipio.nome', 'name')
         .field('AVG(gini)', 'gini')
         .field('adh_gini.ano_censo', 'census_year')
         .from('adh_gini')
@@ -461,17 +468,25 @@ locationApp.get('/educational', (req, res, next) => {
         .toString();
 
     const totalSchoolsQry = squel.select()
+        .field('\'Brasil\'', 'name')
         .field('0', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
-        .where(`escola.ano_censo IN (${censusYearQry})`);
+        .where(`escola.ano_censo IN (${censusYearQry})`)
+        .where('escola.id_tipo_turma = 0')
+        .group('escola.ano_censo');
 
     const schoolsPerLocationQry = squel.select()
-        .field('escola.id_localizacao', 'location')
+        .field('\'Brasil\'', 'name')
+        .field('escola.tipo_localizacao', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .where(`escola.ano_censo IN (${censusYearQry})`)
-        .group('escola.id_localizacao');
+        .where('escola.id_tipo_turma = 0')
+        .group('escola.tipo_localizacao')
+        .group('escola.ano_censo');
 
     const queries = [totalSchoolsQry, schoolsPerLocationQry].map((qry) => {
         return sqlQuery(qry.toString());
@@ -503,9 +518,10 @@ locationApp.get('/educational/region/:id', (req, res, next) => {
         .toString();
 
     const totalSchoolsQry = squel.select()
-        .field('regiao.nome')
+        .field('regiao.nome', 'name')
         .field('0', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .from('estado')
         .from('regiao')
@@ -513,12 +529,15 @@ locationApp.get('/educational/region/:id', (req, res, next) => {
         .where('estado.fk_regiao_id = regiao.pk_regiao_id')
         .where(`regiao.pk_regiao_id = ${regionId}`)
         .where(`escola.ano_censo IN (${censusYearQry})`)
-        .group('regiao.nome');
+        .where('escola.id_tipo_turma = 0')
+        .group('regiao.nome')
+        .group('escola.ano_censo');
 
     const schoolsPerLocationQry = squel.select()
-        .field('regiao.nome')
-        .field('escola.id_localizacao', 'location')
+        .field('regiao.nome', 'name')
+        .field('escola.tipo_localizacao', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .from('estado')
         .from('regiao')
@@ -526,8 +545,10 @@ locationApp.get('/educational/region/:id', (req, res, next) => {
         .where('estado.fk_regiao_id = regiao.pk_regiao_id')
         .where(`regiao.pk_regiao_id = ${regionId}`)
         .where(`escola.ano_censo IN (${censusYearQry})`)
+        .where('escola.id_tipo_turma = 0')
         .group('regiao.nome')
-        .group('escola.id_localizacao');
+        .group('escola.tipo_localizacao')
+        .group('escola.ano_censo');
 
     const queries = [totalSchoolsQry, schoolsPerLocationQry].map((qry) => {
         return sqlQuery(qry.toString());
@@ -559,27 +580,33 @@ locationApp.get('/educational/state/:id', (req, res, next) => {
         .toString();
 
     const totalSchoolsQry = squel.select()
-        .field('estado.nome')
+        .field('estado.nome', 'name')
         .field('0', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .from('estado')
         .where('escola.fk_estado_id = estado.pk_estado_id')
         .where(`escola.fk_estado_id = ${stateId}`)
         .where(`escola.ano_censo IN (${censusYearQry})`)
-        .group('estado.nome');
+        .where('escola.id_tipo_turma = 0')
+        .group('estado.nome')
+        .group('escola.ano_censo');
 
     const schoolsPerLocationQry = squel.select()
-        .field('estado.nome')
-        .field('escola.id_localizacao', 'location')
+        .field('estado.nome', 'name')
+        .field('escola.tipo_localizacao', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .from('estado')
         .where('escola.fk_estado_id = estado.pk_estado_id')
         .where(`escola.fk_estado_id = ${stateId}`)
         .where(`escola.ano_censo IN (${censusYearQry})`)
+        .where('escola.id_tipo_turma = 0')
         .group('estado.nome')
-        .group('escola.id_localizacao');
+        .group('escola.tipo_localizacao')
+        .group('escola.ano_censo');
 
     const queries = [totalSchoolsQry, schoolsPerLocationQry].map((qry) => {
         return sqlQuery(qry.toString());
@@ -611,27 +638,33 @@ locationApp.get('/educational/city/:id', (req, res, next) => {
         .toString();
 
     const totalSchoolsQry = squel.select()
-        .field('municipio.nome')
+        .field('municipio.nome', 'name')
         .field('0', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .from('municipio')
         .where('escola.fk_municipio_id = municipio.pk_cod_ibge')
         .where(`escola.fk_municipio_id = ${cityId}`)
         .where(`escola.ano_censo IN (${censusYearQry})`)
-        .group('municipio.nome');
+        .where('escola.id_tipo_turma = 0')
+        .group('municipio.nome')
+        .group('escola.ano_censo');
 
     const schoolsPerLocationQry = squel.select()
-        .field('municipio.nome')
-        .field('escola.id_localizacao', 'location')
+        .field('municipio.nome', 'name')
+        .field('escola.tipo_localizacao', 'location')
         .field('COUNT(DISTINCT(escola.cod_entidade))', 'total')
+        .field('escola.ano_censo', 'census_year')
         .from('escola')
         .from('municipio')
         .where('escola.fk_municipio_id = municipio.pk_cod_ibge')
         .where(`escola.fk_municipio_id = ${cityId}`)
         .where(`escola.ano_censo IN (${censusYearQry})`)
+        .where('escola.id_tipo_turma = 0')
         .group('municipio.nome')
-        .group('escola.id_localizacao');
+        .group('escola.tipo_localizacao')
+        .group('escola.ano_censo');
 
     const queries = [totalSchoolsQry, schoolsPerLocationQry].map((qry) => {
         return sqlQuery(qry.toString());
-- 
GitLab