Skip to content
@FIAP-PosTech-Grupo-23

FIAP-PosTech-Grupo-23

🛒 Sistema de Pedidos FIAP - Microserviços com Spring Boot, RabbitMQ e PostgreSQL

Este projeto é um sistema de pedidos distribuído, construído com arquitetura de microserviços utilizando Spring Boot, RabbitMQ para mensageria e PostgreSQL como base de dados. Cada serviço tem uma responsabilidade única no fluxo de criação e processamento de pedidos.


⚙️ Arquitetura do Sistema

A [Cliente Frontend ou API] -->|POST /pedidos| B[ms-fiap-receiver]
B -->|Publica mensagem| C[RabbitMQ]
C --> D[ms-pedido-service]
D -->|GET SKU| E[ms-produto-service]
D -->|GET Cliente| F[ms-cliente-service]
D -->|POST Estoque| G[ms-estoque-service]
D -->|POST Pagamento| H[ms-pagamento-service]
H -->|Webhook| D

🧪 Fluxo de Pedido

  1. Requisição Inicial: Envia um POST para o ms-fiap-receiver.
  2. RabbitMQ: Mensagem é publicada em um tópico.
  3. Processamento:
    • Recupera informações do produto (ms-produto-service).
      • Caso não encontre ➝ FECHADO_SEM_PRODUTO
    • Recupera cliente (ms-cliente-service).
      • Caso não encontre ➝ FECHADO_SEM_CLIENTE
    • Valida estoque (ms-estoque-service).
      • Caso não tenha ➝ FECHADO_SEM_ESTOQUE
    • Efetua o pagamento (ms-pagamento-service)
      • Caso válido ➝ ABERTO
  4. Webhook de Pagamento:
    • Se aprovado ➝ FECHADO_COM_SUCESSO
    • Se recusado ➝ devolve estoque e ➝ FECHADO_SEM_CREDITO

🚀 Como Rodar o Projeto

Pré-requisitos

Subir os serviços

docker compose -p fiap-pedido up --build

🌐 Endpoints e Portas

Serviço Porta App Banco Porta DB Porta AMQP
ms-fiap-receiver 8080
ms-pedido-service 8081 pedido 5432
ms-produto-service 8082 produto 5433
ms-cliente-service 8083 cliente 5434
ms-estoque-service 8084 estoque 5435
ms-pagamento-service 8085 pagamento 5436
RabbitMQ 15672 5672

📥 Exemplo de Requisições

1. Criar Cliente

POST http://localhost:8083/clientes
Content-Type: application/json

{
  "nome": "Diego",
  "email": "diego.cruz@fiap.com.br",
  "endereco": "Rua jose, numero 10",
  "telefone": "11911111111",
  "dataNascimento": "1990-05-12",
  "cpf": "123.123.123-84"
}

2. Criar Produto

POST http://localhost:8082/produtos
Content-Type: application/json

{
  "nome": "TV 26",
  "descricao": "TV vermelha",
  "preco": 1000.00
}

3. Criar Estoque

POST http://localhost:8084/estoques
Content-Type: application/json

{
  "idProduto": 1,
  "quantidade": 100
}

4. Criar Pedido

POST http://localhost:8080/pedidos
Content-Type: application/json

{
  "idCliente": "c7c39150-58d1-4a9d-bbe6-0e9f6442775a",
  "produtos": [
    {
      "sku": "PROD-643ROR",
      "quantidade": 2
    }
  ],
  "pagamento": {
    "numeroCartao": "123",
    "cvv": "123",
    "dataVencimento": "05/2030"
  }
}

5. Webhook de Pagamento

PUT http://localhost:8085/pagamentos/{id-pagamento}

Esse endpoint é chamado por um sistema externo para informar que o status do pagamento está disponível. O ms-pagamento-service busca o status e informa o ms-pedido-service.


📌 Status Possíveis do Pedido

Status Significado
ABERTO Pedido criado, aguardando pagamento
FECHADO_COM_SUCESSO Pedido finalizado com sucesso
FECHADO_SEM_PRODUTO SKU(s) não encontrados
FECHADO_SEM_CLIENTE Cliente não encontrado
FECHADO_SEM_ESTOQUE Estoque insuficiente
FECHADO_SEM_CREDITO Pagamento recusado, estoque devolvido

🧰 Tecnologias Utilizadas

  • Java 21 + Spring Boot
  • RabbitMQ (mensageria)
  • PostgreSQL (banco de dados por microserviço)
  • Docker e Docker Compose

📊 Dashboard RabbitMQ


👨‍💻 Autor

Projeto desenvolvido como parte de estudos da disciplina de arquitetura de sistemas da FIAP.
Desenvolvido por Alan Araújo, Diego Cruz, Guilherme Reis e João Victor.

Popular repositories Loading

  1. .github .github Public

  2. fiap-pedido-receiver fiap-pedido-receiver Public

    Java

  3. fiap-produto-service fiap-produto-service Public

    Java

  4. fiap-cliente-service fiap-cliente-service Public

    Java

  5. fiap-estoque-service fiap-estoque-service Public

    Java

  6. fiap-pagamento-service fiap-pagamento-service Public

    Java

Repositories

Showing 7 of 7 repositories

Top languages

Loading…

Most used topics

Loading…