diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..85266ff985a71c7c1d0a0933785b77be4d3d3c3d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +services: + simcaq-node: + container_name: simcaq-node + build: . + ports: + - '3000:3000' + develop: + watch: + - action: sync + path: . + target: /API diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..04db51922c7afe6455aa25ef452e79ead0cd5751 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/bash +echo "Starting simcaq-node" +gulp watch &> /dev/null & +cd build +NODE_ENV=production gulp run diff --git a/gulpfile.template.js b/gulpfile.template.js new file mode 100644 index 0000000000000000000000000000000000000000..3de679df0c18e307b692cb22a3cb6446c052fcaf --- /dev/null +++ b/gulpfile.template.js @@ -0,0 +1,20 @@ +const gulp = require('gulp'); + +const nodemon = require('gulp-nodemon'); + +gulp.task('run', () => { + // process.chdir('build'); + nodemon({ + script: 'server.js', + // tasks: ['watch'], + ignore: ["test/test.js", "gulpfile.babel.js"], + ext: 'js html json', + env: { 'NODE_ENV': process.env.NODE_ENV } + }); +}); + +gulp.task('default', () => { + console.log("Não execuatar apenas gulp, execute da forma:"); + console.log("\t\tgulp <task>"); +}); + diff --git a/src/libs/convert/fullAgeRangeIES.js b/src/libs/convert/fullAgeRangeIES.js new file mode 100644 index 0000000000000000000000000000000000000000..558c513c97bf8e0262e25eb13ccedb7be603c355 --- /dev/null +++ b/src/libs/convert/fullAgeRangeIES.js @@ -0,0 +1,40 @@ +/* +Copyright (C) 2016 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR + +This file is part of simcaq-node. + +simcaq-node is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +simcaq-node is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with simcaq-node. If not, see <https://www.gnu.org/licenses/>. +*/ + +module.exports = function ageRangeIES(id) { + switch (id) { + case 1: + return 'até 29 anos'; + case 2: + return 'de 30 a 34 anos'; + case 3: + return 'de 35 a 39 anos'; + case 4: + return 'de 40 a 44 anos'; + case 5: + return 'de 45 a 49 anos'; + case 6: + return 'de 50 a 54 anos'; + case 7: + return 'de 55 a 59 anos'; + case 8: + return 'de 60 anos ou mais'; + } +}; diff --git a/src/libs/middlewares/aggregateData.js b/src/libs/middlewares/aggregateData.js index eed373ddbbfd98c4a30fc4615823bb5d91a01fc4..5f2e2de94ec247ed6418f048f5f32c8b050251c8 100644 --- a/src/libs/middlewares/aggregateData.js +++ b/src/libs/middlewares/aggregateData.js @@ -14,6 +14,7 @@ const convert = { region: 'regionCode', state: 'stateName', age_range: 'ageRangeAggregate', + age_range_ies: 'ageRangeIES', gender: 'gender', ethnic_group: 'ethnicGroup', education_level_mod_agg: 'educationLevelModAgg', @@ -35,7 +36,9 @@ const convert = { contract_type_entity: 'contractType', total_doc: "totalDoc", education_degree_entity: "educationDegreeEntity", - government_agreement: "governmentAgreement" + government_agreement: "governmentAgreement", + work_regime: "workRegime", + teacher_schooling: "teacherSchooling", } function aggregateData(req, res, next) { @@ -43,7 +46,8 @@ function aggregateData(req, res, next) { const newResult = [] const aggregateFields = [ 'gender', - 'age_range', + 'age_range', + 'age_range_ies', 'ethnic_group', 'education_level_mod_agg', 'education_level_mod_doc', @@ -62,16 +66,19 @@ function aggregateData(req, res, next) { 'age_range_entity', 'post_graduation_entity', 'contract_type_entity', - 'education_degree_entity' + 'education_degree_entity', + 'work_regime', + 'teacher_schooling' ] let id; const fields = req.query.dims.split(','); let currentAggregateField; let currentNonAggregateField; - + // Verifica se o filtro passado está presente nos filtros agregados fields.forEach(field => {if (aggregateFields.includes(field)) currentAggregateField = field; else currentNonAggregateField = field}); if (currentAggregateField) { + console.log(currentNonAggregateField) req.result.forEach((r) => { // Alguns filtros começam com o id = 0 outros id = 1 id = ['ethnic_group', 'integral_time_agg'].includes(currentAggregateField) ? 0 : 1; @@ -84,9 +91,13 @@ function aggregateData(req, res, next) { [`${currentAggregateField}_id`]: id, [`${currentAggregateField}_name`]: id2str[convert[currentAggregateField]](id) } - - if (currentNonAggregateField) { + + if(currentNonAggregateField == 'university'){ data[`${currentNonAggregateField}_id`] = r[`${currentNonAggregateField}_id`]; + data[`${currentNonAggregateField}_name`] = r[`${currentNonAggregateField}_name`]; + } + else if (currentNonAggregateField) { + data[`${currentNonAggregateField}_id`] = data[`${currentNonAggregateField}_id`]; data[`${currentNonAggregateField}_name`] = id2str[convert[currentNonAggregateField]](r[`${currentNonAggregateField}_id`]); } diff --git a/src/libs/middlewares/id2str.js b/src/libs/middlewares/id2str.js index f366d90a30c8d5c57955856040c78d610b3392b3..8f559421ccbf8288675f4675dbfcee3de0d21881 100644 --- a/src/libs/middlewares/id2str.js +++ b/src/libs/middlewares/id2str.js @@ -42,6 +42,7 @@ const stateName = require(`${libs}/convert/stateName`); const contractType = require(`${libs}/convert/contractType`); const ethnicGroupPnad = require(`${libs}/convert/ethnicGroupPnad`); const ageRange = require(`${libs}/convert/ageRange`); +const ageRangeIES = require(`${libs}/convert/fullAgeRangeIES`); const ageRangeAll = require(`${libs}/convert/ageRangeAll`); const ageStudentCode = require(`${libs}/convert/ageStudentCode`); const fullAgeRange = require(`${libs}/convert/fullAgeRange`); @@ -161,6 +162,7 @@ const ids = { contract_type_id: contractType, ethnic_group_pnad_id: ethnicGroupPnad, age_range_id: ageRange, + age_range_ies_id: ageRangeIES, age_range_all_id: ageRangeAll, age_range_aggregate_id: ageRangeAggregate, full_age_range_id: fullAgeRange, @@ -309,6 +311,7 @@ module.exports = { contractType, ethnicGroupPnad, ageRange, + ageRangeIES, ageRangeAggregate, ageRangeAll, ageStudentCode, diff --git a/src/libs/routes_v1/iesTeachers.js b/src/libs/routes_v1/iesTeachers.js index b8eabacd5642d8fbfbfcb8b7a6992404ee24e878..7a644b7202ff64d241f6be15a035e5fd9a56fee0 100644 --- a/src/libs/routes_v1/iesTeachers.js +++ b/src/libs/routes_v1/iesTeachers.js @@ -32,6 +32,8 @@ const response = require(`${libs}/middlewares/response`); const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); +const aggregateData = require(`${libs}/middlewares/aggregateData`); + const id2str = require(`${libs}/middlewares/id2str`); const config = require(`${libs}/config`); @@ -48,18 +50,16 @@ iesTeachers.get('/years', (req, res, next) => { next(); }, query, response('years')); -iesTeachers.get('/qtd_doc_ex_com_deficiencia', (req, res, next) => { - req.sql.from('docente_ies_agregado') - .field('sum(docente_ies_agregado.qtd_doc_ex_com_deficiencia)', 'total') - .field('docente_ies_agregado.ano_censo', 'year') - .field('docente_ies_agregado.nome_ies', 'university_name') - .field('docente_ies_agregado.cod_ies', 'university_id') - .group('docente_ies_agregado.cod_ies') - .group('docente_ies_agregado.nome_ies') - .group('docente_ies_agregado.ano_censo') - .order('docente_ies_agregado.ano_censo') +iesTeachers.get('/academic_organization', (req, res, next) => { + req.result = []; + for(let i = 1; i <= 5; ++i) { + req.result.push({ + id: i, + name: id2str.academicOrganization(i) + }); + }; next(); -}, query, response('qt_doc_ex_com_deficiencia')); +}, response('academic_organization')); rqf.addField({ name: 'filter', @@ -194,14 +194,14 @@ rqf.addField({ field: 'qtd_doc_ex_indigena' } }).addValue({ - name: 'qtd_doc_ex_com_deficiencia', + name: 'teacher_def', table: 'docente_ies_agregado', tableField: 'qtd_doc_ex_com_deficiencia', resultField: 'qtd_doc_ex_com_deficiencia', where: { relation: '=', type: 'integer', - field: 'qtd_doc_ex_com_deficiencia' + field: 'cod_ies' } }).addValue({ name: 'qtd_doc_ex_0_29', @@ -454,13 +454,14 @@ rqf.addField({ field: 'qtd_doc_ex_est' } }).addValue({ - name: 'tipo_org_acad', + name: 'academic_organization', table: 'docente_ies_agregado', tableField: 'tipo_org_acad', - resultField: 'tipo_org_acad', + resultField: 'academic_organization_id', where: { relation: '=', type: 'integer', + table: 'docente_ies_agregado', field: 'tipo_org_acad' } }).addValue({ @@ -516,17 +517,128 @@ rqf.addField({ }); iesTeachers.get('/', rqf.parse(), rqf.build(), (req, res, next) => { - req.sql.from('docente_ies_agregado') - .field('sum(docente_ies_agregado.qtd_doc_exe)', 'total') - .field('docente_ies_agregado.ano_censo', 'year') - .field('docente_ies_agregado.cod_ies', 'university_id') - .field('docente_ies_agregado.nome_ies', 'university_name') - .group('docente_ies_agregado.ano_censo') - .group('docente_ies_agregado.cod_ies') - .group('docente_ies_agregado.nome_ies') - .order('docente_ies_agregado.ano_censo') - console.log(req.sql.toString()) + if ("university" in req.dims) { + if (req.query.dims && req.query.dims.includes('teacher_def')) { + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_ex_com_deficiencia)', 'total') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .group('docente_ies_agregado.ano_censo') + .order('docente_ies_agregado.ano_censo') + } + else if (req.query.dims && req.query.dims.includes('gender')) + { + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_ex_masc)', 'total_masc') + .field('SUM(docente_ies_agregado.qtd_doc_ex_fem)', 'total_fem') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .order('docente_ies_agregado.ano_censo') + } else if(req.query.dims && req.query.dims.includes('age_range_ies')) + { + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_ex_0_29)', 'total_0_29') + .field('SUM(docente_ies_agregado.qtd_doc_ex_30_34)', 'total_30_34') + .field('SUM(docente_ies_agregado.qtd_doc_ex_35_39)', 'total_35_39') + .field('SUM(docente_ies_agregado.qtd_doc_ex_40_44)', 'total_40_44') + .field('SUM(docente_ies_agregado.qtd_doc_ex_45_49)', 'total_45_49') + .field('SUM(docente_ies_agregado.qtd_doc_ex_50_54)', 'total_50_54') + .field('SUM(docente_ies_agregado.qtd_doc_ex_55_59)', 'total_55_59') + .field('SUM(docente_ies_agregado.qtd_doc_ex_60_mais)', 'qtd_doc_ex_60_mais') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .order('docente_ies_agregado.ano_censo') + } else if(req.query.dims && req.query.dims.includes('ethnic_group')){ + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_ex_cor_nd)', 'total_nd') + .field('SUM(docente_ies_agregado.qtd_doc_ex_branca)', 'total_branca') + .field('SUM(docente_ies_agregado.qtd_doc_ex_preta)', 'total_preta') + .field('SUM(docente_ies_agregado.qtd_doc_ex_parda)', 'total_parda') + .field('SUM(docente_ies_agregado.qtd_doc_ex_amarela)', 'total_amarela') + .field('SUM(docente_ies_agregado.qtd_doc_ex_indigena)', 'total_indigena') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .order('docente_ies_agregado.ano_censo') + }else if(req.query.dims && req.query.dims.includes('teacher_schooling')){ + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_ex_sem_grad)', 'total_sem_grad') + .field('SUM(docente_ies_agregado.qtd_doc_ex_grad)', 'total_grad') + .field('SUM(docente_ies_agregado.qtd_doc_ex_esp)', 'total_esp') + .field('SUM(docente_ies_agregado.qtd_doc_ex_mest)', 'total_mest') + .field('SUM(docente_ies_agregado.qtd_doc_ex_dout)', 'total_dout') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .order('docente_ies_agregado.ano_censo') + }else if(req.query.dims && req.query.dims.includes('academic_organization')){ + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_exe)', 'total') + .field('docente_ies_agregado.tipo_org_acad', 'org_acad') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .group('docente_ies_agregado.tipo_org_acad') + .order('docente_ies_agregado.ano_censo') + }else if(req.query.dims && req.query.dims.includes('work_regime')){ + req.sql.from('docente_ies_agregado') + .field('SUM(docente_ies_agregado.qtd_doc_exe)', 'total') + .field('SUM(docente_ies_agregado.qtd_doc_ex_int)', 'total_tempo_integral') + .field('SUM(docente_ies_agregado.qtd_doc_ex_de)', 'total_de') + .field('SUM(docente_ies_agregado.qtd_doc_ex_int_sem_de)', 'total_tempo_integral_sem_de') + .field('SUM(docente_ies_agregado.qtd_doc_ex_parc)', 'total_tempo_parcial') + .field('SUM(docente_ies_agregado.qtd_doc_ex_hor)', 'total_horista') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .group('docente_ies_agregado.tipo_org_acad') + .order('docente_ies_agregado.ano_censo') + } + else { + req.sql.from('docente_ies_agregado') + .field('sum(docente_ies_agregado.qtd_doc_exe)', 'total') + .field('docente_ies_agregado.ano_censo', 'year') + .field('docente_ies_agregado.cod_ies', 'university_id') + .field('docente_ies_agregado.nome_ies', 'university_name') + .group('docente_ies_agregado.ano_censo') + .group('docente_ies_agregado.cod_ies') + .group('docente_ies_agregado.nome_ies') + .order('docente_ies_agregado.ano_censo') + console.log(req.sql.toString()) + } + next(); + } + else { + res.status(400); + next({ + status: 400, + message: 'Wrong/No filter specified' + }); + } next(); -}, query, id2str.transform(false), response('docente_ies_agregado')); +}, query, aggregateData, id2str.transform(false), response('teacher_ies')); module.exports = iesTeachers;