Skip to content
Snippets Groups Projects
Commit f2efe894 authored by Gabriel Ruschel's avatar Gabriel Ruschel
Browse files

siope route

parent f2d68251
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!91Siope route
Pipeline #
...@@ -50,6 +50,8 @@ const infrastructure = require(`${libs}/routes/infrastructure`); ...@@ -50,6 +50,8 @@ const infrastructure = require(`${libs}/routes/infrastructure`);
const distributionFactor = require(`${libs}/routes/distributionFactor`); const distributionFactor = require(`${libs}/routes/distributionFactor`);
const siope = require(`${libs}/routes/siope`);
api.get('/', (req, res) => { api.get('/', (req, res) => {
res.json({ msg: 'SimCAQ API is running' }); res.json({ msg: 'SimCAQ API is running' });
}); });
...@@ -77,5 +79,6 @@ api.use('/reset', resetToken); ...@@ -77,5 +79,6 @@ api.use('/reset', resetToken);
api.use('/education_years', educationYears); api.use('/education_years', educationYears);
api.use('/infrastructure', infrastructure); api.use('/infrastructure', infrastructure);
api.use('/distribution_factor', distributionFactor); api.use('/distribution_factor', distributionFactor);
api.use('/siope', siope);
module.exports = api; module.exports = api;
const express = require('express');
const siopeApp = express.Router();
const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module);
const squel = require('squel');
const query = require(`${libs}/middlewares/query`);
const multiQuery = require(`${libs}/middlewares/multiQuery`);
const response = require(`${libs}/middlewares/response`);
const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`);
const id2str = require(`${libs}/middlewares/id2str`);
const config = require(`${libs}/config`);
const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware;
const matchQueries = require(`${libs}/middlewares/matchQueries`);
let rqf = new ReqQueryFields();
siopeApp.use(cache('15 day'));
siopeApp.get('/years', (req, res, next) => {
req.sql.from('siope_mun')
.field('DISTINCT siope_mun.ano_censo', 'year');
next();
}, query, (req, res, next) => {
req.oldResult = req.result;
req.sql = squel.select();
req.sql.from('siope_uf')
.field('DISTINCT siope_uf.ano_censo', 'year');
next();
}, query, (req, res, next) => {
let result = Object.assign(req.oldResult, req.result);
req.result = result;
next();
}, response('years'));
rqf.addField({
name: 'filter',
field: false,
where: true
}).addField({
name: 'dims',
field: true,
where: false
}).addValue({
name: 'city',
table: 'municipio',
tableField: 'nome',
resultField: 'city_name',
where: {
relation: '=',
type: 'integer',
field: 'municipio_id',
table: 'siope_mun'
},
join: {
primary: 'id',
foreign: 'municipio_id',
foreignTable: 'siope_mun'
}
}).addValue({
name: 'state',
table: 'estado',
tableField: 'nome',
resultField: 'state_name',
where: {
relation: '=',
type: 'integer',
field: 'estado_id',
table: '@'
},
join: {
primary: 'id',
foreign: 'estado_id',
foreignTable: '@'
}
}).addValue({
name: 'min_year',
table: '@',
tableField: 'ano_censo',
resultField: 'year',
where: {
relation: '>=',
type: 'integer',
table: '@',
field: 'ano_censo'
}
}).addValue({
name: 'max_year',
table: '@',
tableField: 'ano_censo',
resultField: 'year',
where: {
relation: '<=',
type: 'integer',
table: '@',
field: 'ano_censo'
}
});
siopeApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
req.querySet = [];
req.queryIndex = {};
let siopeUf = req.sql.clone();
siopeUf.from('siope_uf')
.field('siope_uf.ano_censo', 'year')
.field('siope_uf.estado_id', 'state_id')
.field('siope_uf.fundeb', 'fundeb')
.field('siope_uf.total_impostos', 'impostos')
.field('siope_uf.total_mde', 'MDE')
.group('siope_uf.ano_censo')
.group('siope_uf.estado_id')
.group('siope_uf.fundeb')
.group('siope_uf.total_impostos')
.group('siope_uf.total_mde')
.order('siope_uf.ano_censo');
req.queryIndex.siopeUf = req.querySet.push(siopeUf) - 1;
let siopeMun = req.sql.clone();
siopeMun.from('siope_mun')
.field('siope_mun.ano_censo', 'year')
.field('siope_mun.estado_id', 'state_id')
.field('siope_mun.municipio_id', 'city_id')
.field('siope_mun.fundeb', 'fundeb')
.field('siope_mun.total_impostos', 'impostos')
.field('siope_mun.total_mde', 'MDE')
.group('siope_mun.ano_censo')
.group('siope_mun.estado_id')
.group('siope_mun.municipio_id')
.group('siope_mun.fundeb')
.group('siope_mun.total_impostos')
.group('siope_mun.total_mde')
.order('siope_mun.ano_censo');
req.queryIndex.siopeMun = req.querySet.push(siopeMun) - 1;
next();
}, multiQuery, (req, res, next) => {
let result = {}
if ('state' in req.filter) {
req.result[req.queryIndex.siopeUf].forEach((item) => {
let keys = Object.keys(item);
keys.forEach((key) => {
result[key] = item[key];
});
});
}
req.result = result;
next();
}, id2str.transform(), response('siope'));
module.exports = siopeApp;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment