Skip to content

fysabelah/order-management-system

Repository files navigation

Sistema de Gestão de Pedidos

Desafio Tech Challenge - Fase 4 - FIAP

O sistema consiste em 4 serviços, separados em: produto, clientes, pedidos e logística. Este respositório os agrupa.

  1. Cliente
  2. Gateway
  3. Logística
  4. Pedido
  5. Produto
  6. Registro e descoberta de serviços

Tecnologias

  • Spring Boot para a estrutura do serviço
  • Spring Data JPA para manipulação de dados dos pedidos
  • Spring Cloud para comunicação baseada em eventos com outros microsserviços
  • PostgreSQL para persistência
  • RabbitMQ para mensageria

Desenvolvedores

Esquema de funionamento entre os serviços

  • Cadastro do cliente, onde mesmo pode está desabilitado ou habilitado.

  • Cadastro dos produtos, onde um produto pode ter desconto ou não.

    • Para o pedido será necessário criar uma reserva
  • Cadastro das tarifas para gestão de logística.

  • Após ambiente configurado, é possível partir para criação de pedido. O payload do pedido considera que a reserva dos sku já foi criada. Conforme o pedido avança de status, a reserva será confirmada.

    • Para simulação do pagamento, será validado pelo último número do cartão, conforme mencionado aqui.
    • Um pedido pode ser cancelado a qualquer momento, contato que não esteja entregue.
      • Ele tentará cancelar entrega e atualizar o estoque dependendo do status atual.
    • O mapa de status segue conforme imagem abaixo.

    Mapa de Status

Acesso a documentação

Foi feito uso de um Gateway para comunicação dos serviços, para que apenas o mesmo fosse exposto. No entanto, por não ter sido possível centralizar o swagger-ui de todos os projetos no gateway, optamos por adicionar os dois servidores.

Portanto, no compose deixaremos aberto a requisição, mas também permitiremos a configuração pelo gateway.

É possível ver todos serviços registrados em http://localhost:7070

Como executar

Crie o arquivo .env no diretório root to projeto com as chaves abaixo. Os valores podem se preechidos como preferir, com exceção do PROFILE, DATABASE_HOST e EUREKA_SERVER devido ao application.propeties de alguns serviços.

PROFILE=prod

# Eureka
EUREKA_SERVER=http://server-discovery:7070/eureka

# RabbitMQ
RABBITMQ_USER=coloque_aqui_usuario_mensageria
RABBITMQ_PASS=coloque_aqui_senha_mensageria

# PostgreSQL
DATABASE_USERNAME=coloque_aqui_usuario_banco
DATABASE_PASSWORD=coloque_aqui_senha_banco
DATABASE_HOST=postgres

#PgAdmin
PGADMIN_DEFAULT_EMAIL=coloque_aqui_email_pgadmin
PGADMIN_DEFAULT_PASSWORD=coloque_aqui_senha_pgadmin

O projeto pode ser executado clonando este repositório e digitando o comando abaixo.

docker compose up