diff --git a/src/libs/middlewares/reqBody.js b/src/libs/middlewares/reqBody.js index e1f80cb188302ea86d1335caf41d8b66ba8981a3..9df7ebcaeb827836d5a93dbc85f28e0ba33b702d 100644 --- a/src/libs/middlewares/reqBody.js +++ b/src/libs/middlewares/reqBody.js @@ -2,6 +2,32 @@ class ReqBody { constructor() { } + + add_metrics(req, column, metricsArray) { + for (let i in metricsArray) { + switch(metricsArray[i]["function"]) { + case "max": + req.sql.field("max(" + column + ")", metricsArray[i]["return_name"]); + req.hasMetrics = true; + break; + case "min": + req.sql.field("min(" + column + ")", metricsArray[i]["return_name"]); + req.hasMetrics = true; + break; + case "count": + req.sql.field("count(" + column + ")", metricsArray[i]["return_name"]); + req.hasMetrics = true; + break; + case "sum": + req.sql.field("sum(" + column + ")", metricsArray[i]["return_name"]); + req.hasMetrics = true; + break; + default: + break; + } + } + } + parse() { return(req, res, next) => { // Gets body of the HTTP requisition @@ -10,8 +36,17 @@ class ReqBody { // Chooses operation based on the mode field of the body switch(body["mode"]) { case "add_metrics": - console.log(body); + // adds flag to check whether it runs the default query or not + req.hasMetrics = false; + // Gets all column names + let columns = Object.keys(body["add_metrics"]); + // Calls function to add metrics that were specified to req.sql + for (let i in columns) { + this.add_metrics(req, columns[i], body["add_metrics"][columns[i]]); + } + break; + default: break; } diff --git a/src/libs/routes/testroute.js b/src/libs/routes/testroute.js index 2f108eb798d3b2126ce75c1a25d34b75e545bd8a..97e28b905146d45d8ea478e8c324924619f2232a 100644 --- a/src/libs/routes/testroute.js +++ b/src/libs/routes/testroute.js @@ -176,12 +176,21 @@ rqf.addField({ }); testApp.get('/', rqf.parse(), rqf.build(), reqBody.parse(), (req, res, next) => { - req.sql.from('escola') - .field('ano_censo') - .field('count(*)', 'total') - .group('ano_censo').order('ano_censo') - .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)') - console.log(req.sql.toString()); + // Runs default query + if (!req.hasMetrics) { + req.sql.from('escola') + .field('ano_censo') + .field('count(*)', 'total') + .group('ano_censo').order('ano_censo') + .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)') + } + // Runs modified query + else { + req.sql.from('escola') + .field('ano_censo') + .group('ano_censo').order('ano_censo') + .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)') + } next(); }, query, response('school'));