Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧩 Design Patterns com Spring Boot – Sistema de Pagamentos

Este projeto é uma aplicação Spring Boot simples, criada com o objetivo de estudar e demonstrar o uso de padrões de projeto amplamente utilizados no mercado, especificamente:

  • Strategy
  • Factory Method

A aplicação simula o processamento de pedidos com diferentes formas de pagamento, permitindo que o comportamento de pagamento seja alterado dinamicamente, sem modificar o código principal da aplicação.


🎯 Objetivo do Projeto

Demonstrar, de forma prática e didática:

  • Como aplicar padrões de projeto em um projeto Spring Boot
  • Como utilizar Injeção de Dependência do Spring
  • Como manter o código desacoplado, extensível e aderente aos princípios SOLID

🛠️ Tecnologias Utilizadas

  • Java 20
  • Spring Boot
  • Spring Web
  • Spring Data JPA
  • Maven

📐 Padrões de Projeto Utilizados

✅ Strategy

O padrão Strategy é utilizado para encapsular as diferentes formas de pagamento.

Cada forma de pagamento implementa a interface PagamentoStrategy, permitindo que o comportamento seja trocado em tempo de execução.

Exemplos de estratégias:

  • Pagamento via PIX
  • Pagamento via Cartão de Crédito
  • Pagamento via Boleto

✅ Factory Method

O padrão Factory Method é aplicado na classe PagamentoFactory.

Ela é responsável por:

  • Centralizar a criação/seleção da estratégia de pagamento
  • Retornar automaticamente a implementação correta com base no tipo informado

Com o apoio do Spring, todas as estratégias são injetadas automaticamente, tornando a factory simples, limpa e escalável.


✅ Repository (Spring Data JPA)

A aplicação passou a utilizar o Spring Data JPA para persistência dos pedidos.

A interface PedidoRepository é responsável por salvar os pedidos processados, desacoplando a lógica de negócio do acesso a dados.

Esse uso reforça boas práticas de arquitetura em camadas e facilita futuras evoluções, como consultas e relatórios.


✅ Factory Method

O padrão Factory Method é aplicado na classe PagamentoFactory.

Ela é responsável por:

  • Centralizar a criação/seleção da estratégia de pagamento
  • Retornar automaticamente a implementação correta com base no tipo informado

Com o apoio do Spring, todas as estratégias são injetadas automaticamente, tornando a factory simples, limpa e escalável.


📁 Estrutura do Projeto

com.fvss.designerpatterns
│
├── controller
│   └── PedidoController.java
│
├── model
│   ├── Pedido.java
│   └── ItemPedido.java
│
├── repository
│   └── PedidoRepository.java
│
├── service
│   ├── PedidoService.java
│   └── pagamento
│       ├── PagamentoStrategy.java
│       ├── PagamentoFactory.java
│       ├── PixPagamento.java
│       ├── CartaoPagamento.java
│       └── BoletoPagamento.java
│

---

## 🔄 Fluxo da Aplicação

1. O cliente faz uma requisição para o endpoint `/pedidos/pagar`
2. Envia:
   - O tipo de pagamento (`pix`, `cartao` ou `boleto`)
   - Uma lista de itens do pedido no corpo da requisição
3. O `PedidoController` delega o processamento ao `PedidoService`
4. O `PedidoService`:
   - Cria/processa o pedido
   - Adiciona os itens recebidos
   - Calcula o valor total
   - Solicita à `PagamentoFactory` a estratégia de pagamento adequada
   - Executa o pagamento
   - Retorna o pedido processado
5. O `PedidoController` salva o pedido utilizando o `PedidoRepository`

---

## 🌐 Endpoint Disponível

### ▶️ Processar pagamento

**POST** `/pedidos/pagar`

#### Parâmetros de Query

| Parâmetro | Tipo   | Descrição                  |
|----------|--------|----------------------------|
| tipoPagamento | String | Tipo do pagamento (`pix`, `cartao`, `boleto`) |

#### Corpo da Requisição (JSON)

```json
[
  {
    "nome": "Notebook",
    "quantidade": 1,
    "precoUnitario": 3500.00
  },
  {
    "nome": "Mouse",
    "quantidade": 2,
    "precoUnitario": 150.00
  }
]

Resposta

Pedido processado com sucesso!

🧪 Exemplos de Teste (Postman / Insomnia)

POST http://localhost:8080/pedidos/pagar?tipoPagamento=pix
POST http://localhost:8080/pedidos/pagar?tipoPagamento=cartao
POST http://localhost:8080/pedidos/pagar?tipoPagamento=boleto

👨‍💻 Autor

Projeto desenvolvido para fins de estudo e prática de Design Patterns com Spring Boot.

Autor: FVSSANTOS


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages