From 0c0b9244fdee33705805f3917eb5c59bdbb6ff34 Mon Sep 17 00:00:00 2001
From: Fernando Erd <fce15@inf.ufpr.br>
Date: Wed, 5 Apr 2017 11:31:12 -0300
Subject: [PATCH] starting route class

---
 src/libs/routes/api.js   |  3 ++
 src/libs/routes/class.js | 89 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+)
 create mode 100644 src/libs/routes/class.js

diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js
index ce905d8b..d2119dd2 100644
--- a/src/libs/routes/api.js
+++ b/src/libs/routes/api.js
@@ -6,6 +6,8 @@ const libs = `${process.cwd()}/libs`;
 
 const config = require(`${libs}/config`);
 
+const classes = require('./class');
+
 const cache = require('apicache').options({ debug: config.debug }).middleware;
 
 const enrollment = require('./enrollment');
@@ -31,6 +33,7 @@ api.get('/', (req, res) => {
 // mount API routes
 api.use('/user', user);
 api.use('/simulation', simulation);
+api.use('/class', cache('15 day'), classes);
 api.use('/enrollment', cache('1 day'), enrollment);
 api.use('/state', cache('15 day'), state);
 api.use('/region', cache('15 day'), region);
diff --git a/src/libs/routes/class.js b/src/libs/routes/class.js
new file mode 100644
index 00000000..41ad643a
--- /dev/null
+++ b/src/libs/routes/class.js
@@ -0,0 +1,89 @@
+const express = require('express');
+
+const classApp = express.Router();
+
+const libs = `${process.cwd()}/libs`;
+
+const log = require(`${libs}/log`)(module);
+
+const squel = require('squel');
+
+const query = require(`${libs}/middlewares/query`);
+
+const response = require(`${libs}/middlewares/response`);
+
+const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`);
+
+let rqfCount = new ReqQueryFields();
+
+rqfCount.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: 'turma'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'municipio_id',
+        foreignTable: 'turma'
+    }
+}).addValue({
+    name: 'state',
+    table: 'estado',
+    tableField: 'nome',
+    resultField: 'state_name',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'estado_id',
+        table: 'turma'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'estado_id',
+        foreignTable: 'turma'
+    }
+}).addValue({
+    name: 'region',
+    table: 'regiao',
+    tableField: 'nome',
+    resultField: 'region_name',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'id'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'regiao_id',
+        foreignTable: 'turma'
+    }
+});
+
+
+classApp.get('/', rqfCount.parse(), rqfCount.build(), (req, res, next) => {
+  log.debug(req.sql.toParam());
+   req.sql.field('COUNT(turma.id)', 'total')
+   .field("'Brasil'", 'name')
+   .field('turma.ano_censo', 'year')
+   .from('turma')
+   .group('turma.ano_censo')
+   .order('turma.ano_censo')
+   .where('turma.tipo_turma_id = 0 OR turma.tipo_turma_id = 1 OR turma.tipo_turma_id = 2 OR turma.tipo_turma_id = 3');
+   next();
+}, query, response('class'));
+
+module.exports = classApp;
-- 
GitLab