Skip to content

Commit

Permalink
Merge pull request #17 from sombriks/develop
Browse files Browse the repository at this point in the history
publicação de teste
  • Loading branch information
sombriks authored May 15, 2024
2 parents 914c005 + 4989860 commit 90d181a
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 69 deletions.
3 changes: 3 additions & 0 deletions service-node-koa/.env.staging
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ALG=aes-256-cbc
SECRET=CH4NG3M3CH4NG3M3CH4NG3M3CH4NG3M3
PG_CONNECTION_URL=postgresql://<username>:<password>@<host>:<port>/<schema>
7 changes: 6 additions & 1 deletion service-node-koa/app/config/db/knexfile.cjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* @type { Object.<string, import("knex").Knex.Config> }
* @type { import("knex").Knex.Config }
*/
const _cfg = {
client: 'sqlite3',
Expand Down Expand Up @@ -30,6 +30,11 @@ module.exports = {
// client: 'pg',
// connection: process.env.PG_CONNECTION_URL
},
staging: {
..._cfg,
client: 'pg',
connection: process.env.PG_CONNECTION_URL
},
production: {
..._cfg,
client: 'pg',
Expand Down
122 changes: 85 additions & 37 deletions service-node-koa/app/services/dashboard.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { knex } from '../config/db/index.mjs'
import { addMonths, addYears } from 'date-fns'

/**
*
Expand All @@ -10,25 +11,15 @@ export const getDashboard = async ({ usuario_id, inicio, fim }) => {
inicio = new Date(inicio).toISOString()
fim = new Date(fim).toISOString()
return {
receitaDespesaTotalPeriodo: await receitaDespesaTotalPeriodo({ usuario_id, inicio, fim }),
receitaDespesaEfetivadaPeriodo: await receitaDespesaEfetivadaPeriodo({ usuario_id, inicio, fim }),
despesaConta: await despesaConta({ usuario_id, inicio, fim }),
despesaCategoria: await despesaCategoria({ usuario_id, inicio, fim }),
receitaConta: await receitaConta({ usuario_id, inicio, fim }),
receitaCategoria: await receitaCategoria({ usuario_id, inicio, fim }),
composicaoDespesas: await composicaoDespesas({ usuario_id, inicio, fim }),
composicaoReceitas: await composicaoReceitas({ usuario_id, inicio, fim }),
saldos: {
// Saldos relativos ao período
anteriorGeral: 0,
anterior1Ano: -10,
anterior6Meses: 0,
anterior1Mes: 0,
periodo: 0,
projetado1Mes: 0,
projetado6Meses: 10,
projetado1Ano: 0
},
receitaDespesaTotalPeriodo: unwrap(await receitaDespesaTotalPeriodo({ usuario_id, inicio, fim })),
receitaDespesaEfetivadaPeriodo: unwrap(await receitaDespesaEfetivadaPeriodo({ usuario_id, inicio, fim })),
despesaConta: unwrap(await despesaConta({ usuario_id, inicio, fim })),
despesaCategoria: unwrap(await despesaCategoria({ usuario_id, inicio, fim })),
receitaConta: unwrap(await receitaConta({ usuario_id, inicio, fim })),
receitaCategoria: unwrap(await receitaCategoria({ usuario_id, inicio, fim })),
composicaoDespesas: unwrap(await composicaoDespesas({ usuario_id, inicio, fim })),
composicaoReceitas: unwrap(await composicaoReceitas({ usuario_id, inicio, fim })),
saldos: await saldos({ usuario_id, inicio, fim }),
vencimentos: {
quitadas: 7,
aVencer: 3,
Expand Down Expand Up @@ -75,14 +66,14 @@ async function receitaDespesaEfetivadaPeriodo({ usuario_id, inicio, fim }) {

async function despesaConta({ usuario_id, inicio, fim }) {
return knex.raw(`
with data_frame as (select conta.*, movimentacao.*
with data_frame as (select conta.descricao, conta.cor, movimentacao.valor
from conta
join movimentacao on conta.id = movimentacao.conta_id
where usuario_id = :usuario_id
and tipo_movimentacao_id = 2
and vencimento between :inicio and :fim)
select descricao as label,
cor as color,
cor as color,
sum(valor) as value
from data_frame
group by descricao, cor
Expand All @@ -91,14 +82,14 @@ async function despesaConta({ usuario_id, inicio, fim }) {

async function despesaCategoria({ usuario_id, inicio, fim }) {
return knex.raw(`
with data_frame as (select categoria.*, movimentacao.*
with data_frame as (select categoria.descricao, categoria.cor, movimentacao.valor
from movimentacao
left join categoria on categoria.id = movimentacao.categoria_id
where usuario_id = :usuario_id
and tipo_movimentacao_id = 2
and vencimento between :inicio and :fim)
select descricao as label,
cor as color,
cor as color,
sum(valor) as value
from data_frame
group by descricao, cor
Expand All @@ -108,14 +99,14 @@ async function despesaCategoria({ usuario_id, inicio, fim }) {

async function receitaConta({ usuario_id, inicio, fim }) {
return knex.raw(`
with data_frame as (select *
with data_frame as (select conta.descricao, conta.cor, movimentacao.valor
from conta
join movimentacao on conta.id = movimentacao.conta_id
where usuario_id = :usuario_id
and tipo_movimentacao_id = 1
and vencimento between :inicio and :fim)
select descricao as label,
cor as color,
cor as color,
sum(valor) as value
from data_frame
group by descricao, cor
Expand All @@ -124,27 +115,27 @@ async function receitaConta({ usuario_id, inicio, fim }) {

async function receitaCategoria({ usuario_id, inicio, fim }) {
return knex.raw(`
with data_frame as (select categoria.*, movimentacao.*
with data_frame as (select categoria.descricao, categoria.cor, movimentacao.valor
from movimentacao
left join categoria on categoria.id = movimentacao.categoria_id
where usuario_id = :usuario_id
and tipo_movimentacao_id = 1
and vencimento between :inicio and :fim)
select descricao as label,
cor as color,
cor as color,
sum(valor) as value
from data_frame
group by descricao, cor
`, { usuario_id, inicio, fim })
}

async function composicaoDespesas({ usuario_id, inicio, fim }){
const contas = await knex("conta").where({usuario_id})
async function composicaoDespesas({ usuario_id, inicio, fim }) {
const contas = await knex('conta').where({ usuario_id })
for await (const conta of contas) {
const conta_id = conta.id
conta.color = conta.cor
conta.data = await knex.raw(`
with data_frame as (select categoria.*, movimentacao.*
conta.data = unwrap(await knex.raw(`
with data_frame as (select categoria.descricao, categoria.cor, movimentacao.valor
from movimentacao
left join categoria on categoria.id = movimentacao.categoria_id
where conta_id = :conta_id
Expand All @@ -153,18 +144,18 @@ async function composicaoDespesas({ usuario_id, inicio, fim }){
select descricao as label, cor as color, sum(valor) as value
from data_frame
group by descricao, cor
`,{conta_id, inicio, fim})
`, { conta_id, inicio, fim }))
}
return contas.filter(c => c.data.length)
}

async function composicaoReceitas({ usuario_id, inicio, fim }){
const contas = await knex("conta").where({usuario_id})
async function composicaoReceitas({ usuario_id, inicio, fim }) {
const contas = await knex('conta').where({ usuario_id })
for await (const conta of contas) {
const conta_id = conta.id
conta.color = conta.cor
conta.data = await knex.raw(`
with data_frame as (select categoria.*, movimentacao.*
conta.data = unwrap(await knex.raw(`
with data_frame as (select categoria.descricao, categoria.cor, movimentacao.valor
from movimentacao
left join categoria on categoria.id = movimentacao.categoria_id
where conta_id = :conta_id
Expand All @@ -173,7 +164,64 @@ async function composicaoReceitas({ usuario_id, inicio, fim }){
select descricao as label, cor as color, sum(valor) as value
from data_frame
group by descricao, cor
`,{conta_id, inicio, fim})
`, { conta_id, inicio, fim }))
}
return contas.filter(c => c.data.length)
}

async function saldos({ usuario_id, inicio, fim }) {
return {
anterior1Ano: unwrapSaldos(await saldo({ usuario_id, inicio: addYears(inicio, -1).toISOString(), fim: inicio })),
anterior6Meses: unwrapSaldos(await saldo({ usuario_id, inicio: addMonths(inicio, -6).toISOString(), fim: inicio })),
anterior1Mes: unwrapSaldos(await saldo({ usuario_id, inicio: addMonths(inicio, -1).toISOString(), fim: inicio })),
periodo: unwrapSaldos(await saldo({ usuario_id, inicio, fim })),
projetado1Mes: unwrapSaldos(await saldo({
usuario_id,
inicio: addMonths(inicio, 1).toISOString(),
fim: addMonths(fim, 1).toISOString()
})),
projetado6Meses: unwrapSaldos(await saldo({
usuario_id,
inicio: addMonths(inicio, 1).toISOString(),
fim: addMonths(fim, 6).toISOString()
})),
projetado1Ano: unwrapSaldos(await saldo({
usuario_id,
inicio: addMonths(inicio, 1).toISOString(),
fim: addYears(fim, 1).toISOString()
})),
}
}

async function saldo({ usuario_id, inicio, fim }) {
return knex.raw(`
with entradas as (select sum(valor) as value
from movimentacao
where tipo_movimentacao_id = 1
and conta_id in (select id from conta where usuario_id = :usuario_id)
and vencimento between :inicio and :fim),
saidas as (select sum(valor) as value
from movimentacao
where tipo_movimentacao_id = 2
and conta_id in (select id from conta where usuario_id = :usuario_id)
and vencimento between :inicio and :fim)
select entradas.value - saidas.value as saldo
from entradas,
saidas
`, { usuario_id, inicio, fim })
}

/**
* knex.raw behaves differently on sqlite and postgres
*
* @param result
*/
function unwrap(result) {
// XXX check env or knex cfg instead
return result.rows ?? result
}

function unwrapSaldos(result) {
const [{ saldo }] = unwrap(result)
return saldo
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
version: '3.8'
---
# version: '3.8'

services:
db:
Expand Down
1 change: 1 addition & 0 deletions service-node-koa/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"scripts": {
"start": "node -r dotenv-flow/config index.mjs",
"dev:service": "cross-env NODE_ENV=development nodemon -r dotenv-flow/config",
"staging:service": "cross-env NODE_ENV=staging nodemon -r dotenv-flow/config",
"test:service": "cross-env NODE_ENV=test mocha -r dotenv-flow/config -r app/config/_test_hooks.mjs --recursive app",
"test:service:coverage": "c8 npm run test:service",
"migrate:make": "knex migrate:make --knexfile app/config/db/knexfile.cjs -x mjs -- ",
Expand Down
Loading

0 comments on commit 90d181a

Please sign in to comment.