A Finance API é uma solução de back-end robusta, segura e de alta performance para controle e gestão de transações financeiras. Desenvolvida em .NET 8, aplica rigorosamente os princípios da Clean Architecture, garantindo baixo acoplamento, alta testabilidade e escalabilidade.
O projeto vai além do CRUD tradicional, focando em Performance (Cache Distribuído), Segurança (JWT & Data Protection) e Observabilidade (Logs Estruturados), simulando um ambiente real de produção pronto para crescer.
A aplicação foi desenhada para suportar alta concorrência de leitura, mantendo consistência de dados e simplicidade operacional, utilizando uma arquitetura containerizada e orquestrada.
graph TD
Client[Cliente / Swagger] -->|HTTP Request| API[Finance API]
subgraph "Camada de Dados"
API <-->|Estratégia Cache-Aside| Redis[Redis Cache]
API <-->|EF Core| SQL[SQL Server 2022]
end
subgraph "Camada de Observabilidade"
API -.->|Logs Estruturados| Seq[Seq Dashboard]
end
-
Implementação estratégica do padrão Cache-Aside (Lazy Loading)
-
Leitura Otimizada (
GetById): Respostas em sub-milissegundos para entidades acessadas com frequência. -
Consistência em Escritas (Invalidação Cirúrgica): As chaves de cache são invalidadas em operações de Update e Delete, garantindo que nenhum dado obsoleto seja retornado.
-
Listagens (
GetAll): Decisão arquitetural consciente de manter listagens paginadas direto no banco, evitando complexidade desnecessária de cache.
- Centralização de logs estruturados com Serilog + Seq
- Permite rastreio de falhas, auditoria de operações e análise de performance em tempo real
- Autenticação via JWT (JSON Web Tokens)
- Persistência segura de chaves criptográficas utilizando ASP.NET Data Protection API
- Chaves armazenadas em volumes Docker compartilhados, garantindo resiliência entre containers
-
Ambiente plug-and-play via Docker Compose
-
Toda a infraestrutura sobe com um único comando:
- API
- SQL Server
- Redis
- Seq
| Categoria | Tecnologias |
|---|---|
| Core | .NET 8, C# 12 |
| Arquitetura | Clean Architecture, Repository Pattern, Handlers estilo Mediator |
| Banco de Dados | SQL Server 2022, Entity Framework Core 8 |
| Performance | Redis, StackExchange.Redis, IDistributedCache |
| Observabilidade | Serilog, Seq |
| Documentação | Swagger / OpenAPI (com suporte a Auth) |
| Qualidade | xUnit, Moq, FluentAssertions, FluentValidation |
| DevOps | Docker, Docker Compose |
A forma mais simples e profissional de executar o projeto é utilizando Docker. Não é necessário instalar o .NET SDK nem compilar manualmente.
- Docker Desktop instalado
git clone https://github.com/alysonsz/Finance-API.git
cd Finance-APIdocker-compose up -d⏳ Aguarde 30 a 60 segundos para o SQL Server inicializar e aplicar as migrações automaticamente.
| Serviço | URL | Credenciais (Dev) |
|---|---|---|
| API (Swagger) | http://localhost:5000/swagger | — |
| Seq Logs | http://localhost:5341 | User: admin Pass: MyStrongPassword123! |
| SQL Server | localhost:1433 |
User: sa Pass: MyStrongPassword123! |
Para validar a eficiência da arquitetura:
- Acesse o Swagger → http://localhost:5000/swagger
- Crie uma transação (
POST v1/transactions) - Busque a transação com
GET v1/transactions/{id}
- Primeira chamada: SQL Server → grava no Redis (Cache Miss) ~50ms+
- Segunda chamada: retorno direto do Redis (Cache Hit) < 5ms
- Execute um UPDATE ou DELETE na mesma transação
✅ A chave é invalidada automaticamente e a próxima leitura reflete os dados atualizados.
A solução segue rigorosamente os princípios da Clean Architecture, com responsabilidades bem definidas e uma camada dedicada para contratos compartilhados, evitando acoplamentos indevidos entre API, Application e clientes.
Finance API
├── 📁 Finance.Domain # Entidades, Enums, Interfaces e Regras de Negócio
├── 📁 Finance.Application # Casos de Uso (Handlers), Validações, Mapeamentos
├── 📁 Finance.Contracts # DTOs, Requests, Responses e Interfaces Compartilhadas
├── 📁 Finance.Infrastructure # EF Core, Redis, Repositórios, Migrations
├── 📁 Finance.Api # Controllers, Docker, DI, Middlewares
└── 📁 Finance.Tests # Testes (organizados por camada: Domain, Application, Api)
💡 Observação: a camada de testes é organizada por contexto/camada para refletir a arquitetura da solução, facilitando manutenção, leitura e evolução dos testes.
A API utiliza JWT para proteger os endpoints.
- Registre um usuário:
POST v1/auth/register - Faça login:
POST v1/auth/login - Copie o
accessTokenretornado - No Swagger, clique em Authorize e informe:
Bearer SEU_TOKEN
Desenvolvido por Alyson Souza Carregosa Focado em Engenharia de Software de Alta Performance e Arquitetura de Soluções.
Este projeto está licenciado sob a MIT License.