Skip to content

MuriloDias03/design-patterns-java-dio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 Task Manager API

Desafio de Projeto — Bootcamp Santander | DIO

API REST para gerenciamento de tarefas, desenvolvida com foco em Design Patterns e Clean Architecture.


💡 Sobre o Projeto

Este projeto foi construído como entrega do desafio de Design Patterns do Bootcamp Santander na DIO. A proposta foi reproduzir e evoluir o projeto apresentado em aula, aplicando boas práticas de arquitetura e padrões de projeto em uma API REST completa.

A API permite criar, listar, buscar, atualizar e deletar tarefas (CRUD), com validação de dados, tratamento de exceções e documentação automática.


🏗️ Arquitetura

O projeto segue os princípios da Clean Architecture, separando o código em três camadas independentes:

┌──────────────────────────────────────┐
│         Infrastructure               │  ← Controllers, Repository, DTOs HTTP
│  ┌──────────────────────────────┐    │
│  │        Application           │    │  ← Use Cases, DTOs de entrada/saída
│  │  ┌──────────────────────┐    │    │
│  │  │       Domain         │    │    │  ← Entidades, Value Objects, Interfaces
│  │  └──────────────────────┘    │    │
│  └──────────────────────────────┘    │
└──────────────────────────────────────┘
Camada Responsabilidade
Domain Regras de negócio puras: Task, TaskId, TaskStatus, TaskRepository
Application Casos de uso independentes (um por operação CRUD)
Infrastructure Adaptadores: REST Controller, repositório in-memory, DTOs HTTP

O domínio não depende de nenhum framework — pode ser reutilizado em qualquer contexto.


🧩 Design Patterns Utilizados

Padrão Onde foi aplicado
Repository TaskRepository (interface) + InMemoryTaskRepository (implementação)
Use Case / Command Cada operação CRUD é uma classe isolada (CreateTaskUseCase, etc.)
DTO (Data Transfer Object) CreateTaskInput, TaskOutput, CreateTaskRequest, TaskResponse
Value Object TaskId — encapsula o UUID com validação e igualdade por valor
Factory Method TaskOutput.from(Task), TaskResponse.from(TaskOutput)

🛠️ Tecnologias

Tecnologia Versão
Java 25
Spring Boot 4.0.6
Gradle 9.5
JUnit 5
Mockito
Spring REST Docs
Bean Validation (Jakarta)

🔌 Endpoints

Método Endpoint Descrição
POST /tasks Criar uma nova task
GET /tasks Listar todas as tasks
GET /tasks/{id} Buscar task por ID
PATCH /tasks/{id} Atualizar task (parcial)
DELETE /tasks/{id} Deletar task

Exemplos

Criar task:

POST /tasks
{
  "title": "Estudar Java",
  "description": "Revisar Design Patterns"
}

Resposta (201 Created):

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "title": "Estudar Java",
  "description": "Revisar Design Patterns",
  "status": "PENDING"
}

Atualizar status:

PATCH /tasks/{id}
{
  "status": "COMPLETED"
}

📂 Estrutura do Projeto

src/main/java/com/murilocdias/taskmanager/
├── domain/
│   ├── Task.java                 # Entidade principal
│   ├── TaskId.java               # Value Object (UUID)
│   ├── TaskStatus.java           # Enum: PENDING, IN_PROGRESS, COMPLETED
│   ├── TaskRepository.java       # Interface do repositório
│   └── TaskNotFoundException.java
├── application/
│   ├── CreateTaskUseCase.java
│   ├── GetTaskUseCase.java
│   ├── GetByIdTaskUseCase.java
│   ├── UpdateTaskUseCase.java
│   ├── DeleteTaskUseCase.java
│   ├── input/                    # DTOs de entrada
│   └── output/                   # DTOs de saída
└── infrastructure/
    ├── http/
    │   ├── TaskController.java
    │   ├── GlobalExceptionHandler.java
    │   ├── request/              # DTOs de request HTTP
    │   └── response/             # DTOs de response HTTP
    └── repository/
        └── InMemoryTaskRepository.java

🧪 Testes

O projeto possui 31 testes cobrindo todas as camadas:

Arquivo Tipo Testes
TaskControllerTest Integração (MockMvc + REST Docs) 13
InMemoryTaskRepositoryTest Unitário 7
CreateTaskUseCaseTest Unitário (Mockito) 2
GetTaskUseCaseTest Unitário (Mockito) 2
GetByIdTaskUseCaseTest Unitário (Mockito) 2
UpdateTaskUseCaseTest Unitário (Mockito) 2
DeleteTaskUseCaseTest Unitário (Mockito) 2
TaskManagerApplicationTests Smoke test 1
# Rodar testes
./gradlew test

🚀 Como Executar

Pré-requisitos: Java 25+

# Clonar o repositório
git clone https://github.com/MuriloDias03/design-patterns-java-dio.git

# Entrar no diretório
cd design-patterns-java-dio

# Rodar a aplicação
./gradlew bootRun

# A API estará disponível em http://localhost:8080

Gerar Documentação da API

./gradlew asciidoctor
# HTML gerado em: build/docs/asciidoc/index.html

Feito com ☕ por Murilo C. Dias — Bootcamp Santander 2026 | DIO

LinkedIn

About

Desafio de projeto do bootcamp Santander Java IA na plataforma DIO sobre Designer Patterns em Java

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages