diff --git a/src/libs/routes_v1/expenses.js b/src/libs/routes_v1/expenses.js index 0e578f2e663414eb3641496670685e710b221ac1..a761b10870886e48a2239768bfca786b11fd670c 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