Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save andersonbuenos/ed2bbecaab6f1c78075338a5c71850c0 to your computer and use it in GitHub Desktop.

Select an option

Save andersonbuenos/ed2bbecaab6f1c78075338a5c71850c0 to your computer and use it in GitHub Desktop.
Encontro 03 - Tema 1

Tema 1 — Visão geral do sistema de delivery (teoria)

1. Visão geral do sistema

O que é: plataforma que conecta clientes → restaurantes → entregadores para compra e entrega de produtos alimentares. Requisitos funcionais (exemplos práticos):

  • Registro/login de usuários (clientes, restaurantes, entregadores, admin).
  • Listagem / busca de restaurantes e produtos.
  • Carrinho, checkout e pagamento.
  • Criação e acompanhamento do pedido (status).
  • Notificações (restaurante, entregador, cliente).
  • Painel administrativo (relatórios, gestão de restaurantes/produtos).

Requisitos não-funcionais (essenciais):

  • Escalabilidade (picos em horários de refeições).
  • Disponibilidade (falhas mínimas).
  • Performance (latência da API, resposta de busca).
  • Segurança (autenticação, proteção de dados, segurança no pagamento).
  • Observabilidade (logs, métricas, tracing).

Checklist rápido — para avaliar a aplicação:

  1. Mapear atores (cliente, restaurante, entregador, admin).
  2. Listar fluxos críticos (ex: pedido → pagamento → preparo → entrega).
  3. Definir SLA/latência aceitável para endpoints críticos.

2. Modelagem de domínio (objetos principais)

Entidades centrais: Cliente, Restaurante, Produto, Pedido, ItemPedido, Entregador, Pagamento, Avaliação.

ER simplificado (Mermaid)

erDiagram
    CLIENTE {
        LONG id PK
        string nome
        string email
        string telefone
    }
    RESTAURANTE {
        LONG id PK
        string nome
        string endereco
        string telefone
    }
    PRODUTO {
        LONG id PK
        string nome
        decimal preco
        LONG restaurante_id FK
    }
    PEDIDO {
        LONG id PK
        datetime criadoEm
        string status
        LONG cliente_id FK
        LONG restaurante_id FK
        decimal total
    }
    ITEM_PEDIDO {
        LONG id PK
        LONG pedido_id FK
        LONG produto_id FK
        int quantidade
        decimal precoUnitario
    }
    CLIENTE ||--o{ PEDIDO : "faz"
    RESTAURANTE ||--o{ PRODUTO : "oferece"
    RESTAURANTE ||--o{ PEDIDO : "recebe"
    PEDIDO ||--o{ ITEM_PEDIDO : "contém"
    PRODUTO ||--o{ ITEM_PEDIDO : "é"
Loading

Dicas práticas de modelagem:

  • Normalize "Produto" ligado a "Restaurante".
  • Mantenha ItemPedido como entitade separada (quantidade, preço na hora do pedido).
  • Conserve histórico: não referenciar só o objeto atual (armazenar snapshot de nome/preço no ItemPedido).
  • Enum para status do pedido (CREATED, CONFIRMED, PREPARING, READY, DELIVERING, DELIVERED, CANCELED).

3. Fluxos principais de negócio (ordem típica)

Passos-chave (resumido):

  1. Cliente busca restaurantes/produtos → adiciona ao carrinho.
  2. Cliente finaliza pedido → envia para pagamento.
  3. Pagamento aprovado → pedido criado e notificado ao restaurante.
  4. Restaurante aceita → preparo → marca pronto.
  5. Entregador pega → entrega ao cliente → pedido entregue.
  6. Pós-venda: avaliação, histórico, reembolso quando necessário.

Fluxo (Mermaid — flowchart)

flowchart TD
    Browse[Cliente navega produtos] --> Add[Adiciona ao carrinho]
    Add --> Checkout[Checkout / Pagamento]
    Checkout --> Payment[Gateway de pagamento]
    Payment --> |Pago| OrderCreated[Pedido criado]
    OrderCreated --> RestaurantNotify[Notificar restaurante]
    RestaurantNotify --> |Aceita| InPreparation[Em preparação]
    InPreparation --> Ready[Pronto para envio/retirada]
    Ready --> Delivery[Em entrega / Retirada]
    Delivery --> Delivered[Entregue]
    Payment --> |Falha| PaymentFailed[Pagamento falhou]
    OrderCreated --> |Recusado| Cancelled[Pedido cancelado]
Loading

4. Casos de uso identificados na aplicação delivery-tech

Use-cases principais (para priorizar no desenvolvimento/testes):

  • Autenticação e autorização (CRUD usuário / roles).
  • CRUD de restaurantes e cardápios (restaurante cria/edita produtos).
  • Busca e filtragem de restaurantes/produtos.
  • CRUD de cliente (perfil, endereços).
  • Fluxo de pedido (criar, atualizar status, cancelar).
  • Integração com gateway de pagamento (simulado ou real).
  • Notificações (e-mail / push / websocket).
  • Relatórios básicos (pedidos por dia, tempos médios).

Use-case — visão simples (Mermaid)

graph LR
    Cliente -->|Registrar/Login| Sistema
    Cliente -->|Pesquisar| Sistema
    Cliente -->|Fazer pedido| Sistema
    Restaurante -->|Gerir cardápio| Sistema
    Restaurante -->|Atualizar status pedido| Sistema
    Entregador -->|Aceitar entrega| Sistema
    Sistema -->|Notificar| Cliente
Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment