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

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages