Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OrderFlow API

Java Spring Boot CI Docker

API REST em Java e Spring Boot para criação e processamento de pedidos, aplicando padrões de projeto em um fluxo simples de domínio.

Este projeto foi desenvolvido para o desafio de Design Patterns da DIO e também como material de portfólio para demonstrar organização de código, testes automatizados, documentação de API, CI e preparação para deploy.

Links

Recurso URL
Repositório https://github.com/PedroseleT/orderflow-api
API em produção https://orderflow-api-yu0r.onrender.com
Swagger em produção https://orderflow-api-yu0r.onrender.com/swagger-ui.html
Swagger local http://localhost:8080/swagger-ui.html
Health check local http://localhost:8080/actuator/health

Tecnologias

Tecnologia Uso
Java 21 Linguagem principal
Spring Boot Base da aplicação
Spring Web Endpoints REST
Spring Data JPA Persistência com Repository
Bean Validation Validação de entrada
H2 Database Banco em memória para execução local
SpringDoc OpenAPI Swagger e contrato da API
Actuator Health check
JUnit 5 Testes automatizados
Mockito Teste unitário do fluxo de serviço
Maven Build e dependências
Docker Empacotamento para deploy
GitHub Actions CI com teste e build

Padrões de projeto aplicados

Padrão Onde aparece Responsabilidade
Strategy ShippingStrategy, StandardShippingStrategy, ExpressShippingStrategy, PickupShippingStrategy Calcula o frete conforme o tipo escolhido
Factory ShippingStrategyFactory Seleciona a estratégia correta de frete
Chain of Responsibility OrderValidationChain e handlers de validação Executa validações de regra de negócio em sequência
Facade OrderFacade Orquestra validação, cálculo de frete, montagem e persistência do pedido
Repository OrderRepository Abstrai o acesso ao banco de dados via Spring Data JPA

O escopo não inclui implementação manual de Singleton. Os componentes gerenciados pelo Spring usam o ciclo de vida padrão do container, que por padrão trabalha com beans singleton.

Fluxo da criação de pedido

flowchart TD
    A[POST /orders] --> B[OrderController]
    B --> C[OrderFacade]
    C --> D[OrderValidationChain]
    D --> E[ShippingStrategyFactory]
    E --> F[ShippingStrategy]
    F --> G[OrderService]
    G --> H[OrderRepository]
    H --> I[(H2 Database)]
    G --> J[OrderResponse]
Loading

Entidade principal

Campo Tipo Descrição
id Long Identificador do pedido
customerName String Nome do cliente
customerEmail String E-mail do cliente
subtotal BigDecimal Valor dos itens sem frete
shippingCost BigDecimal Valor calculado do frete
total BigDecimal Subtotal somado ao frete
shippingType STANDARD, EXPRESS, PICKUP Tipo de frete
status CREATED, PAID, SHIPPED, CANCELED Status do pedido
createdAt LocalDateTime Data e hora de criação

Regras de negócio

Regra Comportamento
Pedido novo Sempre inicia com status CREATED
Nome do cliente Deve ter pelo menos 3 caracteres
E-mail Deve ter formato válido
Subtotal Deve ser maior que zero e no mínimo 10.00
Frete STANDARD 5% do subtotal mais 8.00
Frete EXPRESS 12% do subtotal mais 15.00
Frete PICKUP 0.00
Frete EXPRESS Exige subtotal mínimo de 50.00

Endpoints

Método Rota Descrição
POST /orders Cria um pedido
GET /orders Lista pedidos
GET /orders/{id} Busca pedido por id
DELETE /orders/{id} Remove pedido por id
PATCH /orders/{id}/status Atualiza status do pedido

Exemplo de criação

{
  "customerName": "Pedro Teles",
  "customerEmail": "[email protected]",
  "subtotal": 100.00,
  "shippingType": "STANDARD"
}

Resposta esperada:

{
  "id": 1,
  "customerName": "Pedro Teles",
  "customerEmail": "[email protected]",
  "subtotal": 100.00,
  "shippingCost": 13.00,
  "total": 113.00,
  "shippingType": "STANDARD",
  "status": "CREATED",
  "createdAt": "2026-08-15T16:00:00"
}

Exemplo de atualização de status

{
  "status": "PAID"
}

Como executar localmente

Pré-requisitos:

Ferramenta Versão
Java 21
Maven Wrapper incluído no projeto

Comandos:

./mvnw test
./mvnw clean package
./mvnw spring-boot:run

No Windows:

.\mvnw.cmd test
.\mvnw.cmd clean package
.\mvnw.cmd spring-boot:run

Depois de iniciar:

Recurso URL
API http://localhost:8080
Swagger http://localhost:8080/swagger-ui.html
Health check http://localhost:8080/actuator/health

Docker

Build:

docker build -t orderflow-api .

Execução:

docker run -p 8080:8080 -e PORT=8080 orderflow-api

Banco de dados

A aplicação usa H2 em memória. Os dados são criados apenas para demonstração e não persistem após reiniciar a aplicação.

O console web do H2 permanece desabilitado.

Testes

A suíte cobre:

Camada Cobertura
Strategy Cálculo dos três tipos de frete
Factory Seleção da estratégia por tipo de frete
Chain of Responsibility Validações de regras de negócio
Facade Orquestração do fluxo de criação
API Fluxo integrado de criar, buscar, atualizar status e remover pedido

Comando:

./mvnw test

CI

O workflow do GitHub Actions executa:

Etapa Comando
Testes ./mvnw test
Build ./mvnw clean package

O pipeline roda em pushes e pull requests para a branch main.

Autor

Pedro Teles de Brito

GitHub: https://github.com/PedroseleT

LinkedIn: http://www.linkedin.com/in/pedro-teless

About

API REST em Java e Spring Boot aplicando Design Patterns em um fluxo de processamento de pedidos.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages