From 31f48959cb94fdfa1a28f3ce0a637651ffb29a2c Mon Sep 17 00:00:00 2001
From: Fernando Gbur dos Santos <fgs21@inf.ufpr.br>
Date: Mon, 2 Jun 2025 13:21:57 +0000
Subject: [PATCH] Development

---
 src/libs/routes_v1/expenses.js | 76 ++++++++++++++++++++--------------
 1 file changed, 44 insertions(+), 32 deletions(-)

diff --git a/src/libs/routes_v1/expenses.js b/src/libs/routes_v1/expenses.js
index 0e578f2e..a761b108 100644
--- a/src/libs/routes_v1/expenses.js
+++ b/src/libs/routes_v1/expenses.js
@@ -117,46 +117,58 @@ rqf.addField({
 })
 
 
-ExpensesApp.get('/', rqf.parse(), rqf.build(),  (req, res, next) => {
-
-    let obj = {}
+ExpensesApp.get(
+  '/',
+  rqf.parse(),
+  rqf.build(),
+  (req, res, next) => {
+    let obj = {};
     let typeFilter = false;
-    let whereCondition = req.query.filter.includes("region") ? "" : "despesas.cod_ibge = 0";
+    // condição inicial padrão (sem filtro de região, coloca cod_ibge = 0 só para não quebrar a query)
+    let whereCondition = req.query.filter.includes('region')
+      ? ''
+      : 'despesas.cod_ibge = 0';
     let filterId;
-    const filters = req.query.filter.split(",");
+    const filters = req.query.filter.split(',');
+
+    // Se houver filtro de estado/cidade, ajusta o cod_ibge
     filters.forEach((filter) => {
-        if (filter.includes("state") || filter.includes("city")) {
-            filterId = Number(filter.split(":")[1].replace(/"/g, ""));
-            whereCondition = `despesas.cod_ibge = ${filterId}`
-        }
-    })
+      if (filter.includes('state') || filter.includes('city')) {
+        filterId = Number(filter.split(':')[1].replace(/"/g, ''));
+        whereCondition = `despesas.cod_ibge = ${filterId}`;
+      }
+    });
 
+    // Interpreta o JSON de filtros; se tiver “type”, ajusta o where para agregar por tipo
     if (req.query.filter) {
-        const jsonString = `{${req.query.filter.replace(/(\w+):/g, '"$1":')}}`;
-        obj = JSON.parse(jsonString);
-        if (obj.type) {
-            if (obj.type.includes("1") && !obj.type.includes("2")) {
-                whereCondition = "despesas.cod_ibge >= 11 and despesas.cod_ibge <= 53"
-            }
-            else if (obj.type.includes("2") && !obj.type.includes("1")) {
-                whereCondition = "despesas.cod_ibge > 53"
-            }
-
-            typeFilter = true;
+      const jsonString = `{${req.query.filter.replace(/(\w+):/g, '"$1":')}}`;
+      obj = JSON.parse(jsonString);
+
+      if (obj.type) {
+        // Se vier só “1” (por exemplo, Unidades Federativas)
+        if (obj.type.includes('1') && !obj.type.includes('2')) {
+          whereCondition = 'despesas.cod_ibge >= 11 AND despesas.cod_ibge <= 53';
         }
+        // Se vier só “2” (Municípios)
+        else if (obj.type.includes('2') && !obj.type.includes('1')) {
+          whereCondition = 'despesas.cod_ibge > 53';
+        }
+        typeFilter = true;
+      }
     }
 
-    if (!typeFilter || (typeFilter && (!obj.state && !obj.city && !obj.region))) {
-        req.sql.from('despesas')
-        .field('despesas.ano_censo', 'year')
-        .field('despesas.ano_censo', 'total_ano')
-        .field('despesas.nome_ente', 'total_nome_ente')
-        .field('round(despesas.despesas,2)', 'total')
-        .where(`${whereCondition}`)
-        .order('despesas.ano_censo')
-    }
+    req.sql
+      .from('despesas')
+      .field('despesas.ano_censo', 'year')
+      .field('SUM(ROUND(despesas.despesas, 2))', 'total')
+      .where(whereCondition)
+      .group('despesas.ano_censo')
+      .order('despesas.ano_censo');
 
     next();
-}, query, id2str.transform(false), response('expenses'));
-
+  },
+  query,
+  id2str.transform(false),
+  response('expenses')
+);
 module.exports = ExpensesApp;
\ No newline at end of file
-- 
GitLab