Skip to content
Snippets Groups Projects
Commit 9afe6816 authored by Victor Picussa's avatar Victor Picussa
Browse files

[release v1.4.0]Fix merge

parents 8e802878 b450e966
No related branches found
No related tags found
1 merge request!133Release v1.4.0
Pipeline #16292 failed
......@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
### Added
- Add school building filter/dimension to school count route
- Add transport indicator
- Add cub route
### Changed
- Fixed CSV output when result objects have nested arrays and/or objects
- Limit year range to 2007-2015 in out of school indicator
......
......@@ -68,6 +68,8 @@ const transport = require(`./transport`);
const dailyChargeAmount = require(`${libs}/routes/dailyChargeAmount`);
const cub = require(`${libs}/routes/cub`);
api.get('/', (req, res) => {
res.json({ msg: 'SimCAQ API is running' });
});
......@@ -104,5 +106,6 @@ api.use('/out_of_school', outOfSchool);
api.use('/classroom_count', classroomCount);
api.use('/daily_charge_amount', dailyChargeAmount);
api.use('/transport', transport);
api.use('/cub', cub);
module.exports = api;
const express = require('express');
const cubApp = express.Router();
const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module);
const squel = require('squel');
const query = require(`${libs}/middlewares/query`).query;
const response = require(`${libs}/middlewares/response`);
const id2str = require(`${libs}/middlewares/id2str`);
const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`);
const request = require(`request`);
const config = require(`${libs}/config`);
const passport = require('passport');
const download = require(`${libs}/middlewares/downloadDatabase`);
const addMissing = require(`${libs}/middlewares/addMissing`);
const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware;
let rqf = new ReqQueryFields();
let rqfCount = new ReqQueryFields();
cubApp.get('/year_range', (req, res, next) => {
req.sql.from('cub')
.field('MIN(cub.ano_censo)', 'start_year')
.field('MAX(cub.ano_censo)', 'end_year');
next();
}, query, response('range'));
cubApp.get('/years', (req, res, next) => {
req.sql.from('cub')
.field('DISTINCT cub.ano_censo', 'year');
next();
}, query, response('years'));
cubApp.get('/months', (req, res, next) => {
req.sql.from('cub')
.field('DISTINCT cub.mes_censo', 'month');
next();
}, query, response('months'));
cubApp.get('/years_months', (req, res, next) => {
req.sql.from('cub')
.field('DISTINCT cub.ano_censo AS "year", cub.mes_censo AS "month"');
next();
}, query, response('years_months'));
cubApp.get('/price_type', (req, res, next) => {
req.sql.from('cub')
.field('DISTINCT cub.tipo_preco', 'price_type');
next();
}, query, response('price_type'));
rqf.addField({
name: 'filter',
field: false,
where: true
}).addField({
name: 'dims',
field: true,
where: false
}).addValue({
name: 'state',
table: 'estado',
tableField: ['sigla', 'id'],
resultField: ['sigla_uf', 'cod_uf'],
where: {
relation: '=',
type: 'integer',
field: 'estado_id',
table: 'cub'
},
join: {
primary: 'id',
foreign: 'estado_id',
foreignTable: 'cub'
}
}).addValue({
name: 'min_year',
table: 'cub',
tableField: 'ano_censo',
resultField: 'year',
where: {
relation: '>=',
type: 'integer',
table: 'cub',
field: 'ano_censo'
}
}).addValue({
name: 'max_year',
table: 'cub',
tableField: 'ano_censo',
resultField: 'year',
where: {
relation: '<=',
type: 'integer',
table: 'cub',
field: 'ano_censo'
}
}).addValue({
name: 'min_month',
table: 'cub',
tableField: 'mes_censo',
resultField: 'month',
where: {
relation: '>=',
type: 'integer',
table: 'cub',
field: 'mes_censo'
}
}).addValue({
name: 'max_month',
table: 'cub',
tableField: 'mes_censo',
resultField: 'month',
where: {
relation: '<=',
type: 'integer',
table: 'cub',
field: 'mes_censo'
}
});
cubApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
if (req.filter.size || req.filter.dims) {
if ('state' in req.filter || 'state' in req.dims) {
req.sql.from('cub')
.field('cub.estado_id', 'cod_uf')
.field('estado.sigla', 'sigla_uf')
.field('cub.tipo_preco', 'tipo_preco')
.field('cub.preco', 'preco')
.join('estado', null, 'cub.estado_id=estado.id')
.group('cub.ano_censo')
.group('cub.mes_censo')
.group('cub.estado_id')
.group('estado.sigla')
.group('cub.tipo_preco')
.group('cub.preco')
} else {
req.sql.from('cub')
.field("'BR'", 'sigla_uf')
.field("cub.tipo_preco", 'tipo_preco')
.field('AVG(cub.preco)', 'preco')
.join('estado', null, 'cub.estado_id=estado.id')
.group('cub.ano_censo')
.group('cub.mes_censo')
.group('cub.tipo_preco')
}
} else {
req.sql.from('cub')
.field('cub.estado_id', 'cod_uf')
.field('estado.sigla', 'sigla_uf')
.field('cub.tipo_preco', 'tipo_preco')
.field('cub.preco', 'preco')
.join('estado', null, 'cub.estado_id=estado.id')
.group('cub.ano_censo')
.group('cub.mes_censo')
.group('cub.estado_id')
.group('estado.sigla')
.group('cub.tipo_preco')
.group('cub.preco')
}
next();
}, query, addMissing(rqf), id2str.transform(), response('cub'));
module.exports = cubApp;
process.env.NODE_ENV = 'test';
const chai = require('chai');
const dirtyChai = require('dirty-chai');
chai.use(dirtyChai);
const chaiXml = require('chai-xml');
chai.use(chaiXml);
const chaiHttp = require('chai-http');
const assert = chai.assert;
const expect = chai.expect;
const should = chai.should(); // actually call the function
const libs = `${process.cwd()}/libs`;
const server = require(`${libs}/app`);
chai.use(chaiHttp);
describe('request cub', () => {
it('should return default query cub', (done) => {
chai.request(server)
.get('/api/v1/cub')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('cod_uf');
res.body.result[0].should.have.property('sigla_uf');
res.body.result[0].should.have.property('tipo_preco');
res.body.result[0].should.have.property('preco');
done();
});
});
it('should list the years', (done) => {
chai.request(server)
.get('/api/v1/cub/years')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('year');
done();
});
});
it('should list the year range', (done) => {
chai.request(server)
.get('/api/v1/cub/year_range')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('start_year');
res.body.result[0].should.have.property('end_year');
done();
});
});
it('should list the months', (done) => {
chai.request(server)
.get('/api/v1/cub/months')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('month');
done();
});
});
it('should list the years and months', (done) => {
chai.request(server)
.get('/api/v1/cub/year_range')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('year');
res.body.result[0].should.have.property('month');
done();
});
});
it('should list the price type', (done) => {
chai.request(server)
.get('/api/v1/cub/price_type')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('price_type');
done();
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment