Esta é uma API RESTful de tarefas (to-do) desenvolvida com Spring Boot 4, Java 21 e arquitetura em camadas. O projeto serve como exemplo de backend que gerencia tarefas pendentes, com persistência em PostgreSQL, cache Redis e integração de métricas via Micrometer/Datadog.
O objetivo é oferecer uma API de gerenciamento de tarefas simples e extensível, com foco em:
- Camadas separadas de domínio, aplicação e infraestrutura
- Boas práticas de DDD e Clean Architecture
- Integração com JPA/Hibernate e PostgreSQL
- Métricas e telemetria com Micrometer e Datadog
- Testes com JUnit 5, Testcontainers e Instancio
- Suporte a devcontainer para desenvolvimento isolado
A estrutura de pacotes reflete a divisão lógica do projeto:
application: casos de uso, portas de entrada e saída, exceções de negóciodomain: modelos de domínio e serviços de regras de negócioinfrastructure: adaptadores de entrada/saída, mapeadores e configurações do framework
Fluxo de chamada principal:
TaskControllerrecebe a requisição HTTP- Converte DTO para domínio via
TaskMapper - Chama
ManageTaskUseCasepara executar regras de negócio TaskPersistenceAdapterpersiste dados usandoSpringDataTaskRepository- A resposta é convertida de volta em
TaskResponse
TaskController: API REST em/api/v1/tasksManageTaskUseCase: lógica de criação, atualização, conclusão, reabertura, listagem e estatísticasTaskPersistenceAdapter: adaptador JPA para persistência de tarefasTaskMapper: mapstruct para conversão entre domínio, entidade e DTOapplication.yaml: configuração de banco, Redis, métricas e actuator
A API expõe operações CRUD para tarefas e endpoints de estatísticas. O controlador também aplica cache para listagem e métricas de contagem.
Principais endpoints:
POST /api/v1/tasks— cria uma tarefaGET /api/v1/tasks— lista todas as tarefasGET /api/v1/tasks?completed=true|false— filtra tarefas por statusPUT /api/v1/tasks/{id}— atualiza título e descriçãoPATCH /api/v1/tasks/{id}/complete— marca como concluídaPATCH /api/v1/tasks/{id}/reopen— reabre tarefaDELETE /api/v1/tasks/{id}— remove tarefaGET /api/v1/tasks/stats— retorna estatísticas de tarefas
A configuração de banco de dados e cache é baseada em variáveis de ambiente, definidas no arquivo .env.
- Java 21
- Docker (para serviços e testes com Testcontainers)
- Maven (ou use o wrapper
./mvnw)
- Copie ou verifique o arquivo
.envna raiz do projeto - Inicie os serviços necessários:
docker compose up -d postgres redis datadog-agent- Execute a aplicação:
./mvnw spring-boot:run- A API ficará disponível em
http://localhost:8080
./mvnw clean package./mvnw test./mvnw -Dtest=TaskPersistenceAdapterTest testObservação: os testes de integração usam Testcontainers e requerem Docker para criar um PostgreSQL temporário.
O projeto já possui configuração de devcontainer em .devcontainer/devcontainer.json.
- Abra o projeto no VS Code
- Use o comando
Remote-Containers: Reopen in ContainerouDev Containers: Reopen in Container - O devcontainer usa o serviço
appdefinido emdocker-compose.yamle a imagem Docker criada a partir de.devcontainer/Dockerfile - No terminal do container, execute:
./mvnw spring-boot:runO ambiente preconfigurado inclui:
- Java 21
- Maven 3.9
- Datadog Java agent
- Extensões recomendadas para Java, Spring Boot, Lombok e SonarLint
- A configuração do
docker-compose.yamltambém inclui serviçospostgres,redisedatadog-agent. - Use a porta padrão
8080para a aplicação e5432para o PostgreSQL local. - Ajuste as variáveis de ambiente no
.envconforme necessário para seu ambiente de desenvolvimento.