From d07a81ab116bb005562be8614596155e56c7b443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20A=2E=20Okida=20Gon=C3=A7alves?= <laog19@inf.ufpr.br> Date: Wed, 1 Mar 2023 11:29:52 -0300 Subject: [PATCH] Add functional version of middleware, add flag to check whether it runs default query or modified query --- src/libs/middlewares/reqBody.js | 37 ++++++++++++++++++++++++++++++++- src/libs/routes/testroute.js | 21 +++++++++++++------ 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/libs/middlewares/reqBody.js b/src/libs/middlewares/reqBody.js index e1f80cb1..9df7ebca 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 2f108eb7..97e28b90 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')); -- GitLab