API REST para cadastro e gerenciamento de livros.
- Listar livros com paginação (
page,size). - Buscar livro por ID.
- Criar livro com validação de dados.
- Atualizar livro existente.
- Excluir livro por ID.
- Java 25 — uso da versão mais recente para aproveitar recursos de performance: JEP 491 (Virtual Threads sem pinning) e JEP 450 (Compact Object Headers com menor uso de memória).
- Spring Boot 3.5 — estabilidade e suporte moderno para APIs REST.
- Gradle 9 — build rápido, configuração declarativa e compatibilidade com cache.
- Spring Data JPA + H2 — persistência leve para protótipo com SQL acessível e testes rápidos.
- MapStruct — mapeamento de DTOs com código gerado, evitando boilerplate.
- SpringDoc OpenAPI 2.8.x — documentação automática das rotas e contratos.
- JUnit 5 + Mockito — testes unitários e mocks para camada de serviço/controller.
- Docker com multi-stage build e Layered JAR — imagem enxuta e build otimizado.
- GitHub Actions — pipeline com etapa de testes obrigatória antes do build e push da imagem Docker.
git clone https://github.com/seu-usuario/java-challenge.git
cd java-challengedocker compose up -d./gradlew bootRun./gradlew testDisponível em http://localhost:8080/swagger-ui/index.html após subir a aplicação.
| Método | Endpoint | Descrição | Status de sucesso |
|---|---|---|---|
| GET | /v1/books |
Lista paginada | 200 |
| GET | /v1/books/{id} |
Busca por ID | 200 |
| POST | /v1/books |
Cria livro | 201 |
| PUT | /v1/books/{id} |
Atualiza livro | 200 |
| DELETE | /v1/books/{id} |
Remove livro | 204 |
Todas as respostas de erro seguem o formato:
{
"status": 400,
"message": "Descrição do erro"
}Erros de validação (400 Bad Request) retornam os campos que falharam:
{
"timestamp": "2026-04-24T00:11:42.019+00:00",
"status": 400,
"error": "Bad Request",
"path": "/v1/books"
}