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:
- Mapear atores (cliente, restaurante, entregador, admin).
- Listar fluxos críticos (ex: pedido → pagamento → preparo → entrega).
- Definir SLA/latência aceitável para endpoints críticos.
Entidades centrais: Cliente, Restaurante, Produto, Pedido, ItemPedido, Entregador, Pagamento, Avaliação.
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 : "é"
Dicas práticas de modelagem:
- Normalize "Produto" ligado a "Restaurante".
- Mantenha
ItemPedidocomo 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
statusdo pedido (CREATED, CONFIRMED, PREPARING, READY, DELIVERING, DELIVERED, CANCELED).
Passos-chave (resumido):
- Cliente busca restaurantes/produtos → adiciona ao carrinho.
- Cliente finaliza pedido → envia para pagamento.
- Pagamento aprovado → pedido criado e notificado ao restaurante.
- Restaurante aceita → preparo → marca pronto.
- Entregador pega → entrega ao cliente → pedido entregue.
- Pós-venda: avaliação, histórico, reembolso quando necessário.
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]
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).
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