Esse projeto é uma API que gerencia contratos de financiamento de veículos de uma instituição financeira
fintrack-challenge/
│
├── src/
│ ├── Fintrack.Api/ # Camada de apresentação (endpoints REST)
│ │ ├── Controllers/
│ │ ├── Middleware/
│ │ ├── Properties/
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ ├── Fintrack.Api.csproj
│ │ └── Program.cs
│ │
│ ├── Fintrack.Application/ # Casos de uso e orquestração
│ │ ├── DTOs/
│ │ ├── Interfaces/
│ │ └── Fintrack.Application.csproj
│ │
│ ├── Fintrack.Domain/ # Regras de negócio puras
│ │ ├── Entities/
│ │ ├── Enums/
│ │ ├── ValueObjects/
│ │ └── Fintrack.Domain.csproj
│ │
│ ├── Fintrack.Infrastructure/ # Persistência e integrações técnicas
│ │ ├── Data/
│ │ ├── Service/
│ │ └── Fintrack.Infrastructure.csproj
│ │
│ └── Fintrack.Shared/ # Código cross-cutting
│ ├── Common/
│ ├── Extensions/
│ ├── Utils/
│ └── Fintrack.Shared.csproj/
│
├── tests/
│ ├── Fintrack.UnitTests/ # Testes de regras de domínio (xUnit + FluentAssertions)
│ └── Fintrack.IntegrationTests/ # Testes de integração (API + DB)
│
├── .gitignore
├── coverlet.runsettings
├── Directory.Build.props
├── docker-compose.yml
├── Dockerfile
├── fintrack-challenge.sln
├── README.md
└── test-coverage.ps1
Antes de rodar o projeto, certifique-se de ter instalado:
- Docker
- Docker Compose
- .NET SDK 9+ (caso queira rodar localmente sem Docker)
git clone https://github.com/ialedocarmo/fintrack-challenge.git
cd fintrack-challengedocker-compose up -d dbdotnet ef migrations add InitialCreate `
--project src/Fintrack.Infrastructure `
--startup-project src/Fintrack.Api `
--output-dir Data/Migrations
dotnet ef database update `
--project src/Fintrack.Infrastructure `
--startup-project src/Fintrack.Api🔎 Se já existirem migrations, você pode apenas rodar o
database update.
docker-compose up --buildA aplicação disponível em:
- Swagger UI: http://localhost:5000/swagger/index.html
- API Base URL:
http://localhost:5000
docker psdocker exec -it financial-db psql -U postgres -d financialdb\dtA API utiliza autenticação JWT Bearer.
- Para acessar os endpoints protegidos, é necessário gerar um token pelo endpoint
/auth/logine usá-lo no botão Authorize do Swagger.
{
"clienteCpfCnpj": "82854661087",
"valorTotal": 25000,
"taxaMensal": 2,
"prazoMeses": 36,
"dataVencimentoPrimeiraParcela": "2025-09-20T00:00:00Z",
"tipoVeiculo": "Automovel",
"condicaoVeiculo": "Novo"
}{
"contratoId": "{contratoId}",
"dataPagamento": "2025-10-20T00:00:00Z",
"valor": 1200
}
⚠️ Importante: Sempre envie datas em formato UTC comZno final (yyyy-MM-ddTHH:mm:ssZ), caso contrário o PostgreSQL vai rejeitar o valor.
Na raiz do projeto:
dotnet testEste projeto usa coverlet para coleta e ReportGenerator para relatórios.
Windows (PowerShell)
.\test-coverage.ps1Linux/macOS
make test-cov➡ O relatório será gerado em coveragereport/index.html.
Agora abra o arquivo no navegador:
coveragereport/index.html