Uma API RESTful construída com ASP.NET 8 seguindo os princípios da Clean Architecture.
CleanArchitectureApi/
├── API/ # Camada de apresentação
├── Application/ # Camada de aplicação
├── Domain/ # Camada de domínio
├── Infra/ # Camada de infraestrutura
├── CrossCutting/ # Injeção de dependências
├── Tests/ # Testes automatizados
- Clean Architecture
- SOLID Principles
- Injeção de Dependência
- Entity Framework Core
- Global Exception Handling
- DTOs e Auto Mapping
- Repository Pattern
- Docker Support
- Testes automatizados (xUnit, Moq)
- .NET 8.0
- Entity Framework Core 8 (
Microsoft.EntityFrameworkCore.Design,Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.Tools) - SQL Server (banco de dados relacional)
- Swagger/OpenAPI (
Swashbuckle.AspNetCore) - Mapster e Mapster.DependencyInjection (mapeamento e DI)
- Microsoft.Extensions.DependencyInjection.Abstractions (injeção de dependência)
- Docker (containerização)
- xUnit (testes unitários)
- Moq (mocks para testes)
- coverlet.collector (cobertura de testes)
- Microsoft.NET.Test.Sdk (infraestrutura de testes)
- Microsoft.Data.SqlClient (acesso a dados em testes)
- .NET 8.0 SDK
- Docker
- SQL Server ou Docker Compose
- Execute o docker-compose:
docker-compose up -d- Acesse o Swagger para testar a API:
http://localhost:8080/swagger
- Clone o repositório
- Restaure os pacotes:
dotnet restore- Execute as migrações:
dotnet ef database update --project Infra --startup-project API- Execute a API:
dotnet run --project APIcurl http://localhost:8080/api/bookscurl -X POST http://localhost:8080/api/books \
-H "Content-Type: application/json" \
-d '{"title":"Livro Teste","authorId":1,"genreId":1}'Os testes estão no diretório Tests/ e usam xUnit, Moq e coverlet para cobertura.
Para rodar os testes:
dotnet test- GET
/api/books- Lista todos os livros - GET
/api/books/{id}- Obtém um livro específico - POST
/api/books- Cria um novo livro - PUT
/api/books/{id}- Atualiza um livro - DELETE
/api/books/{id}- Remove um livro
- GET
/api/authors- Lista todos os autores - GET
/api/authors/{id}- Obtém um autor específico - POST
/api/authors- Cria um novo autor - PUT
/api/authors/{id}- Atualiza um autor - DELETE
/api/authors/{id}- Remove um autor
- GET
/api/genres- Lista todos os gêneros - GET
/api/genres/{id}- Obtém um gênero específico - POST
/api/genres- Cria um novo gênero - PUT
/api/genres/{id}- Atualiza um gênero - DELETE
/api/genres/{id}- Remove um gênero
A aplicação usa as seguintes variáveis de ambiente (podem ser configuradas no appsettings.json ou via Docker Compose):
ConnectionStrings:DefaultConnection: String de conexão com o banco de dadosLogging:LogLevel:Default: Nível de log padrãoASPNETCORE_ENVIRONMENT: Ambiente de execução (Development, Production)