diff --git a/src/libs/routes/classroom.js b/src/libs/routes/classroom.js index 37186e56f098ee294ca7267e5970eff5d81e318c..87c34d9e86f67054a74f958ab86771a2af2566c9 100644 --- a/src/libs/routes/classroom.js +++ b/src/libs/routes/classroom.js @@ -12,8 +12,44 @@ const response = require(`${libs}/middlewares/response`); const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); +const id2str = require(`${libs}/middlewares/id2str`); + let rqf = new ReqQueryFields(); +let rqfCount = new ReqQueryFields(); + +// Complete range of the enrollments dataset. +// Returns a tuple of start and ending years of the complete enrollments dataset. +classroomApp.get('/year_range', (req, res, next) => { + req.sql.from('escola') + .field('MIN(escola.ano_censo)', 'start_year') + .field('MAX(escola.ano_censo)', 'end_year'); + next(); +}, query, response('range')); + +classroomApp.get('/adm_dependency', (req, res, next) => { + req.sql.from('dependencia_adm') + .field('id') + .field('nome', 'name') + .where('id <= 4'); + next() +}, query, response('adm_dependency')); + +classroomApp.get('/adm_dependency_detailed', (req, res, next) => { + req.sql.from('dependencia_adm') + .field('id', 'id') + .field('nome', 'name'); + next() +}, query, response('adm_dependency_detailed')); + +classroomApp.get('/location', (req, res, next) => { + req.sql = squel.select() + .field('id') + .field('descricao', 'name') + .from('localizacao'); + next() +}, query, response('location')); + rqf.addField({ name: 'filter', field: false, @@ -79,56 +115,54 @@ rqf.addField({ foreignTable: 'escola' } }).addValue({ - name: 'year', + name: 'min_year', table: 'escola', tableField: 'ano_censo', resultField: 'year', where: { - relation: '=', + relation: '>=', type: 'integer', - field: 'ano_censo', - table: 'escola' + field: 'ano_censo' + } +}).addValue({ + name: 'max_year', + table: 'escola', + tableField: 'ano_censo', + resultField: 'year', + where: { + relation: '<=', + type: 'integer', + field: 'ano_censo' } }).addValue({ name: 'adm_dependency', - table: 'dependencia_adm', - tableField: 'nome', - resultField: 'adm_dependency_name', + table: 'escola', + tableField: 'dependencia_adm_id', + resultField: 'adm_dependency_id', where: { relation: '=', type: 'integer', - field: 'id' - }, - join: { - primary: 'id', - foreign: 'dependencia_adm_id', - foreignTable: 'escola' + field: 'dependencia_adm_id' } }).addValue({ name: 'adm_dependency_detailed', - table: 'dependencia_adm', - tableField: 'nome', - resultField: 'adm_dependency_detailed_name', + table: 'escola', + tableField: 'dependencia_adm_priv', + resultField: 'adm_dependency_detailed_id', where: { relation: '=', type: 'integer', - field: 'id' - }, - join: { - primary: 'id', - foreign: 'dependencia_adm_priv', - foreignTable: 'escola' + field: 'dependencia_adm_priv' } }).addValue({ - name: 'locality', + name: 'location', table: 'escola', tableField: 'cod_localizacao', - resultField: 'locality', + resultField: 'location_id', where: { relation: '=', type: 'integer', - field: 'cod_localizacao', - table: 'escola' + field: 'cod_localizacao' } }); @@ -142,6 +176,6 @@ classroomApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .order('escola.ano_censo') .where('escola.situacao_de_funcionamento = 1 AND escola.local_func_predio_escolar = 1'); next(); -}, query, response('classroom')); +}, query, id2str.transform(true), response('classroom')); module.exports = classroomApp; diff --git a/src/test/classroom.js b/src/test/classroom.js index 54d058aee1e5f213c6c8ba92d28dcdf812462354..bd520cf8b67ad396f8251092bf0a4036bb65e36a 100644 --- a/src/test/classroom.js +++ b/src/test/classroom.js @@ -25,6 +25,48 @@ const server = require(`${libs}/app`); chai.use(chaiHttp); describe('request classrooms', () => { + it('should list the locations', (done) => { + chai.request(server) + .get('/api/v1/classroom/location') + .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('id'); + res.body.result[0].should.have.property('name'); + done(); + }); + }); + + it('should list the administrative dependencies', (done) => { + chai.request(server) + .get('/api/v1/classroom/adm_dependency') + .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('id'); + res.body.result[0].should.have.property('name'); + done(); + }); + }); + + it('should list the detailed administrative dependencies', (done) => { + chai.request(server) + .get('/api/v1/classroom/adm_dependency_detailed') + .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('id'); + res.body.result[0].should.have.property('name'); + done(); + }); + }); + it('should list classrooms', (done) => { chai.request(server) .get('/api/v1/classroom') @@ -111,7 +153,7 @@ describe('request classrooms', () => { it('should list classrooms with valid filters', (done) => { chai.request(server) - .get('/api/v1/classroom?filter=locality:1') + .get('/api/v1/classroom?filter=location:1') .end((err, res) => { res.should.have.status(200); res.should.be.json; @@ -195,13 +237,13 @@ describe('request classrooms', () => { it('should list classrooms with valid dimensions', (done) => { chai.request(server) - .get('/api/v1/classroom?dims=locality') + .get('/api/v1/classroom?dims=location') .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('locality'); + res.body.result[0].should.have.property('name'); res.body.result[0].should.have.property('total'); done(); });