Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
2363129
fix: add api env fallback and fix hosted redirects
LCapistrano25 May 27, 2026
0d39ed7
fix(auth): improve dynamic auth redirect URL handling
LCapistrano25 May 28, 2026
ffec65b
fix(supabase): drop unnecessary API_URL fallback
LCapistrano25 May 28, 2026
d273c7e
fix(auth callback): remove redundant env and fix redirect URL
LCapistrano25 May 28, 2026
0b7d329
fix(auth): improve auth checks and redirect logic
LCapistrano25 May 28, 2026
18fa6e7
fix(use-auth): refine auth redirect URL handling
LCapistrano25 May 28, 2026
2cc1878
refactor(domain): split types into enum files and update imports
LCapistrano25 May 28, 2026
dc2ff68
feat: add transaction entity and props interface
LCapistrano25 May 29, 2026
c8255e5
refactor(domain): replace string literal types with enums
LCapistrano25 May 29, 2026
6ad89f8
feat(transaction-repo): add getTransactionById and refactor with mapper
LCapistrano25 May 29, 2026
f1ceae0
refactor: restructure transaction create use case
LCapistrano25 May 29, 2026
4b9a43e
feat: add delete transaction use case with checks
LCapistrano25 May 29, 2026
c884a5c
refactor(transaction hooks): replace direct handler calls with use cases
LCapistrano25 May 29, 2026
863a9c4
refactor(transaction): restructure edit transaction command
LCapistrano25 May 29, 2026
d5417e8
refactor(edit-transaction): swap handler for use case
LCapistrano25 May 29, 2026
6432a3f
fix: update transaction imports and fix type error
LCapistrano25 May 29, 2026
585e233
refactor(transaction): rename Transaction.get to restore
LCapistrano25 May 29, 2026
a67cc8c
refactor(transaction commands): standardize use cases and add unit tests
LCapistrano25 May 29, 2026
09529dc
feat(auth): add auth interface and supabase auth services
LCapistrano25 May 29, 2026
5ab6b8e
refactor: use shared auth service for transaction operations
LCapistrano25 May 29, 2026
3e6e6f2
feat: add auth & transaction CRUD use cases, fix imports & types
LCapistrano25 May 29, 2026
01299ed
refactor(auth, transactions): restructure auth & add transaction use …
LCapistrano25 May 29, 2026
f520a0f
refactor: restructure auth imports and formalize transaction use cases
LCapistrano25 May 29, 2026
04a9daf
refactor(hooks): organize hooks into feature-based folders
LCapistrano25 May 29, 2026
0edf536
refactor: restructure supabase and add category domain
LCapistrano25 May 29, 2026
2ed4b5a
refactor: fix type safety and optimize transaction hook
LCapistrano25 May 29, 2026
61c17b4
test: fix incorrect mock import paths in test files
LCapistrano25 May 29, 2026
777431e
refactor(transaction): standardize on TransactionType enum
LCapistrano25 May 29, 2026
24e4d7a
style(transaction-form): remove unused Transaction type import
LCapistrano25 May 29, 2026
f9cb508
refactor: clean up use case constructors and fix SSR access
LCapistrano25 May 29, 2026
3130ef1
fix(auth): fix SSR origin check and add login tests
LCapistrano25 May 29, 2026
7000342
style(use-auth): simplify globalThis window existence check
LCapistrano25 May 29, 2026
c07eebc
Refactor authentication and transaction handling with use cases (#58)
LCapistrano25 May 29, 2026
550996d
- Criando a entidade Account e todo o fluxo para futuramente ser util…
May 29, 2026
57373ae
- Refatorando o Amount para não ser apenas valor e acrescentando vali…
May 29, 2026
3dd7411
- Ajustando entidade category e todo o seu fluxo dentro do domais + t…
May 29, 2026
d47b998
- Ajustando entidade category e todo o seu fluxo dentro do domais + t…
May 29, 2026
41750e7
- removendo a dependencia direta do login do infra, criado a interfac…
May 29, 2026
59ddef6
- removendo a dependencia direta do login do infra, criado a interfac…
May 29, 2026
3e61a93
- removendo a dependencia direta do login do infra, criado a interfac…
May 29, 2026
affaa39
- Ajustando a transaction para utilizar o Amount do que o valor
May 29, 2026
a0f5537
- Removendo comentarios
May 29, 2026
3b62d89
- Ajuste de rotas e a maneira de como e feito a coleta do user, agora…
May 29, 2026
8ad7ac7
- Ajuste de rotas e a maneira de como e feito a coleta do user, agora…
May 29, 2026
d7c9387
- Criado interface para manipular as categorias no banco
May 29, 2026
19ccc9c
- Correções sonar
May 29, 2026
3a151b6
- adicionando novos testes para ampliar a cobertura de testes
May 29, 2026
f269688
Feature/keven.rodrigues/correcoes ddd (#59)
keven-rdr May 29, 2026
855def4
refatoração: ajuste de caminhos de importação para uso de caminhos ab…
lucasfontinele May 29, 2026
a9217fc
refact: Ajusta testes para o sonar
lucasfontinele May 29, 2026
27ab6ce
feat: add complete category management workflow
LCapistrano25 May 29, 2026
ffaff90
feat(transaction, category): add transaction category selection and v…
LCapistrano25 May 29, 2026
a311775
refact: Ajusta build
lucasfontinele May 29, 2026
e16efad
feat(account): add full account management functionality and UI
LCapistrano25 May 29, 2026
f69bdcb
feat(transaction): add account association and display
LCapistrano25 May 29, 2026
fbc2853
refactor(dashboard): clean up transaction code
LCapistrano25 May 29, 2026
e84d771
refactor(transaction): replace enum with literal types and required f…
LCapistrano25 May 29, 2026
489c7de
feat: add checks for transactions before deletion
LCapistrano25 May 29, 2026
6544b1e
Implement full category and account management with transaction valid…
LCapistrano25 May 29, 2026
8a13762
refatoração: ajuste de caminhos de importação para uso de caminhos ab…
LCapistrano25 May 29, 2026
69bd9be
- Adicionando pipeline de CD para enviar para o GoogleCloud
keven-rdr Jun 10, 2026
720e269
- Correção de pipeline, erro apresentado pelo sonnar
keven-rdr Jun 10, 2026
965c339
Feature/keven.rodrigues/apply cd (#63)
keven-rdr Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions .github/workflows/deploy-cloud-run.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: CD Cloud Run

on:
workflow_run:
workflows: ["CI Pipeline"]
branches: ["main"]
types: [completed]
workflow_dispatch:

concurrency:
group: cd-cloud-run-${{ github.event.workflow_run.head_branch || github.ref }}
cancel-in-progress: true

jobs:
deploy:
name: Deploy to Google Cloud Run
if: |
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') ||
(
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'push' &&
github.event.workflow_run.head_branch == 'main' &&
github.event.workflow_run.head_repository.full_name == github.repository
)
runs-on: ubuntu-latest

permissions:
contents: read
id-token: write

env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
GCP_REGION: southamerica-east1
CLOUD_RUN_SERVICE: finance-app

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v3
with:
project_id: ${{ env.GCP_PROJECT_ID }}
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

- name: Deploy source to Cloud Run
id: deploy
uses: google-github-actions/deploy-cloudrun@v3
with:
project_id: ${{ env.GCP_PROJECT_ID }}
service: ${{ env.CLOUD_RUN_SERVICE }}
region: ${{ env.GCP_REGION }}
source: .
env_vars: |
NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
NEXT_PUBLIC_AUTH_REDIRECT_URL=${{ secrets.NEXT_PUBLIC_AUTH_REDIRECT_URL }}
NEXT_TELEMETRY_DISABLED=1
flags: >-
--allow-unauthenticated
--set-build-env-vars=NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }},NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }},NEXT_PUBLIC_AUTH_REDIRECT_URL=${{ secrets.NEXT_PUBLIC_AUTH_REDIRECT_URL }},NEXT_TELEMETRY_DISABLED=1

- name: Show service URL
run: echo "${{ steps.deploy.outputs.url }}"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
gha-creds-*.json

# env files (can opt-in for committing if needed)
.env*
Expand Down
94 changes: 94 additions & 0 deletions RELATORIO_DDD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Relatório DDD (baseado no FINANCE_APP_REPORT) — Finance App (final para apresentação)

Este relatório consolida o que foi efetivamente implementado no código **em relação aos problemas apontados** no `FINANCE_APP_REPORT`, com evidências diretas no repositório, e lista o que ainda está pendente.

## O que estava incorreto e agora está correto (com evidências)

- **Separação explícita da regra de “resumo financeiro” (income/expense/balance)**
- **Problema no documento:** cálculo de receitas/despesas/saldo misturado com a listagem de transações (regra de negócio escondida).
- **Solução implementada:** regra concentrada em um Value Object de domínio e orquestrada pelo caso de uso.
- **Status no código atual:** implementado.
- **Evidências:**
- Regra de cálculo em: [TransactionSummary](src/domain/value-objects/transaction-summary.ts#L4-L28)
- Orquestração em: [GetTransactionsUseCase](src/application/usecases/transaction/get-transaction/usecase.ts#L13-L30)

- **Porta de autenticação movida para a camada de Application (reduz acoplamento com Supabase)**
- **Problema no documento:** dependência da aplicação em detalhes de infraestrutura e tipos do Supabase na fronteira de autenticação.
- **Solução implementada:** `IAuthService` passa a ser uma porta em `application/ports` e retorna um tipo próprio (`AuthenticatedUser`) com o mínimo necessário.
- **Status no código atual:** implementado.
- **Evidências:**
- Contrato/tipo próprio em: [iauth.service.ts](src/application/ports/iauth.service.ts#L1-L10)
- Implementação Supabase isolada na infraestrutura em: [SupabaseAuthService](src/infrastructure/services/supabase-auth.service.ts#L1-L53)

- **Inversão de dependência nos casos de uso (Application depende de contratos do domínio)**
- **Problema no documento:** handlers/use cases dependiam diretamente de repositórios concretos (infra).
- **Solução implementada:** casos de uso recebem repositórios por construtor via interfaces do domínio.
- **Status no código atual:** implementado.
- **Evidências:**
- Contrato em: [ITransactionRepository](src/domain/repositories/ITransactionRepository.ts#L3-L9)
- Exemplo de caso de uso usando contrato (e não implementação): [CreateTransactionUseCase](src/application/usecases/transaction/create-transaction/usecase.ts#L7-L24)

- **Fortalecimento das entidades do domínio (entidades menos “anêmicas”)**
- **Problema no documento:** entidades sem invariantes/comportamento, deixando regras espalhadas.
- **Solução implementada:** entidades com fábricas, restore, validações e comportamento.
- **Status no código atual:** implementado para `Transaction`, `Account` e `Category`.
- **Evidências:**
- `Transaction` com validações (valor, usuário, moeda, data, tipo, recorrência) e comportamento: [Transaction](src/domain/entities/transaction/transaction.ts#L6-L99)
- `Account` deixou de ser interface e virou entidade com validação: [Account](src/domain/entities/account/account.ts#L3-L36)
- `Category` com validação de tipo e `created_at` opcional: [Category](src/domain/entities/category/category.ts#L4-L43), [CategoryProps](src/domain/entities/category/category.props.ts#L3-L11)

- **Value Object `Amount` para proteger valor monetário**
- **Problema no documento:** `amount: number` tende a espalhar validações e permitir valores inválidos.
- **Solução implementada:** Value Object `Amount` valida finitude e positividade e é usado pela entidade `Transaction`.
- **Status no código atual:** implementado.
- **Evidências:**
- VO em: [Amount](src/domain/value-objects/amount.ts#L1-L23)
- Uso do VO dentro da entidade em: [Transaction](src/domain/entities/transaction/transaction.ts#L36-L71)

- **Contratos e repositórios para Aggregate Roots (`Account` e `Category`)**
- **Problema no documento:** persistência concentrada e/ou sem contratos claros para outros conceitos do domínio.
- **Solução implementada:** contratos no domínio + implementações Supabase na infraestrutura, com mappers.
- **Status no código atual:** implementado.
- **Evidências:**
- Contratos: [IAccountRepository](src/domain/repositories/IAccountRepository.ts#L1-L9), [ICategoryRepository](src/domain/repositories/ICategoryRepository.ts#L1-L9)
- Implementações: [AccountRepository](src/infrastructure/repositories/supabase/account/account.repository.ts#L6-L69), [CategoryRepository](src/infrastructure/repositories/supabase/category/category.repository.ts#L6-L69)
- Mapper de Account: [AccountMapper](src/infrastructure/mappers/account.mapper.ts#L1-L22)

- **Testes de domínio adicionados (protegem invariantes e expressam regras)**
- **Problema no documento:** regras importantes não estavam bem protegidas/visíveis (dificulta evolução e defesa técnica).
- **Solução implementada:** testes unitários cobrindo VOs e entidades principais.
- **Status no código atual:** implementado.
- **Evidências:**
- Testes do VO: [amount.test.ts](src/domain/value-objects/amount.test.ts#L3-L19), [transaction-summary.test.ts](src/domain/value-objects/transaction-summary.test.ts#L5-L27), [month-year.test.ts](src/domain/value-objects/month-year.test.ts#L3-L30)
- Testes de entidades: [account.test.ts](src/domain/entities/account/account.test.ts#L3-L46), [transaction.test.ts](src/domain/entities/transaction/transaction.test.ts#L13-L64), [category.test.ts](src/domain/entities/category/category.test.ts#L4-L40)

## O que foi citado no documento e ainda continua errado / não foi implementado

- **Documentação (README e/ou diagramas externos) ainda pode estar desalinhada com o código**
- **Problema no documento:** elementos citados como implementados quando são parciais/futuros (ex.: “motor em Python/FastAPI”, “Histórico Financeiro”, “Painel Financeiro” como objetos de domínio).
- **Status no código atual:** pendente (alinhamento e revisão textual/diagramas).
- **Evidências:**
- README menciona “FastAPI (Python)”/“motor em Python”, mas o repositório atual não mostra implementação Python junto do projeto Next/TS: [README.md](README.md#L8-L40)
- README usa o termo “Handlers” em pontos da descrição, enquanto o código atual está organizado principalmente por **Use Cases** e **Ports** na Application: [README.md](README.md#L45-L54)

- **Serviço de domínio para recorrência (geração/expansão de transações repetidas)**
- **Problema no documento:** regras como recorrência tendem a crescer e não pertencem sempre a uma única entidade.
- **Status no código atual:** pendente (há validações e campos, mas não há serviço que gere/expanda recorrências).
- **Evidências:**
- A entidade valida recorrência, mas não gera instâncias/agenda recorrente: [Transaction](src/domain/entities/transaction/transaction.ts#L89-L97)

- **Reorganização futura por domínio (módulos por “bounded context”/feature)**
- **Problema no documento:** organização por camadas técnicas funciona, mas a sugestão foi evoluir para organização por domínio se o projeto crescer.
- **Status no código atual:** não aplicado (estrutura segue por camadas: domain/application/infrastructure/presentation/app).
- **Evidência:** árvore do `src/` segue o padrão em camadas.

- **Validação de execução local (checklist de entrega)**
- **Problema:** garantir que tudo compila e roda em ambiente local com dependências instaladas.
- **Status no código atual:** pendente (etapa de execução local).
- **Evidência:** checklist registrado em: [MELHORIAS_DDD.md](MELHORIAS_DDD.md#L5-L18)

## Resumo (status geral vs. FINANCE_APP_REPORT)

- **Foi corrigido:** fortalecimento do domínio (Transaction/Account/Category), VOs (`Amount`, `MonthYear`, `TransactionSummary`), portas na Application (auth), inversão de dependência em use cases, contratos/implementações de repositório e testes.
- **Ainda falta:** alinhar documentação externa/README ao que existe de fato, e decidir/implementar (se necessário) um Domain Service para recorrência conforme a complexidade do negócio evoluir.

Loading
Loading