API REST construída em .NET 9 seguindo os princípios de Clean Architecture, com separação clara de responsabilidades entre Domain, Application, Infrastructure e Presentation.
O projeto tem como objetivo servir como base de referência arquitetural para aplicações backend modernas, utilizando boas práticas de design, validação, mapeamento e testes automatizados.
- .NET 9
- ASP.NET Core Web API
- MongoDB
- AutoMapper
- FluentValidation
- xUnit
- Moq
- AutoFixture
- FluentAssertions
O projeto segue o modelo de Clean Architecture, organizado em camadas:
src/
├── Api -> Camada de apresentação (Controllers, Startup)
├── Application -> DTOs, Services, AutoMapper, Interfaces de Application
├── Domain -> Entidades, Agregados, Validações, Interfaces
├── Data -> Repositórios e acesso ao MongoDB
├── CrossCutting -> Dependency Injection
Tests/
└── Testes unitários
- Entidades
- Agregados
- Validadores
- Interfaces de serviços e repositórios
- DTOs
- Profiles do AutoMapper
- Application Services
- Orquestração dos casos de uso
- Implementação dos repositórios
- Integração com MongoDB
- Controllers
- Configuração do pipeline HTTP
- Versionamento de API
- Swagger
- Registro de dependências (Dependency Injection)
Pré-requisitos
- .NET SDK 9
- MongoDB rodando localmente
Restaurar dependências
dotnet restore src/Api.slnBuild
dotnet build src/Api.slnExecutar
dotnet run --project src/ApiA API ficará disponível em: https://localhost:5001
Swagger: https://localhost:5001/swagger
dotnet test src/Api.slnAtualmente o projeto possui testes para:
- Services
- Validators
- AutoMapper
Tests/
├── Domain
│ ├── Service
│ └── Validator
└── Application
└── Mapping
- Cadastro de cargos (EmployeeRole)
- Cadastro de funcionários (Employee)
- Validação de domínio com FluentValidation
- Mapeamento DTO ↔ Entidade com AutoMapper
- Testes unitários completos
- Configuração centralizada de DI
- Versionamento de API
- Base para novos projetos .NET
- Referência de Clean Architecture
- Exemplo de testes automatizados
- Laboratório de boas práticas backend
Este projeto está licenciado sob a GNU General Public License v3.0 (GPL-3.0).
Consulte o arquivo LICENSE para mais detalhes.