161 lines
6.7 KiB
Markdown
161 lines
6.7 KiB
Markdown
# Context Prompt — Central de Pedidos (Cursor)
|
||
|
||
> Cole o bloco **PROMPT** abaixo num chat Cursor (Agent) no repo `pizza-digital`.
|
||
> Spec: `SPEC.md` §5.5 · `docs/SPEC-CANAIS-DIGITAIS.md` · RF-PED / RF-CAN
|
||
> Código base: `apps/web/src/PedidosPage.tsx` · rota `/pedidos`
|
||
|
||
---
|
||
|
||
## PROMPT (copiar daqui)
|
||
|
||
```text
|
||
# Missão
|
||
Construir / evoluir o módulo **Central de Pedidos** do produto **Pizza Digital**
|
||
(rota `/pedidos`) — o quadro operacional único da loja, estilo CityFoods.
|
||
|
||
PT-BR em toda UI e comentários de produto. Código TS em inglês.
|
||
|
||
# Contexto do produto
|
||
Pizza Digital = SO da cozinha + delivery próprio (não é marketplace).
|
||
Referência UX: CityFoods — Cozinha Digital + quadro Pedidos (`@cityfoods_app`).
|
||
|
||
A Central de Pedidos é o **hub pós-login**:
|
||
- Staff entra → `/pedidos` (não /pdv)
|
||
- CTA **+ Novo** → PDV (`/pdv`) para digitar pedido
|
||
- Pedidos de **qualquer canal** (PDV, cardápio digital, WhatsApp, iFood, telefone)
|
||
caem no **mesmo Order** e aparecem neste quadro
|
||
- Daqui a loja vai para KDS, etiqueta e despacho
|
||
|
||
Regra de ouro (SPEC §5.5):
|
||
> Nenhum canal tem UI de cozinha própria — tudo passa pelo Order bus e pelo `/pedidos`.
|
||
|
||
# Dimensões de pedido (alvo — migrar do `channel` legado)
|
||
|
||
origin: "pdv" | "cardapio" | "ifood" | "whatsapp" | "telefone"
|
||
fulfillment: "entrega" | "retirada" | "mesa"
|
||
|
||
Legado atual (Prisma `OrderChannel`):
|
||
delivery → origin=pdv, fulfillment=entrega
|
||
balcao → origin=pdv, fulfillment=retirada
|
||
pdv → origin=pdv, fulfillment=mesa
|
||
|
||
UI do card:
|
||
- Faixa colorida = fulfillment (ENTREGA / RETIRADA / MESA) + código curto
|
||
- Badge secundário = origin (CARDÁPIO / IFOOD / WHATSAPP / PDV / TELEFONE)
|
||
|
||
# Stack (não trocar)
|
||
- Monorepo: apps/api (NestJS + Prisma + Socket.io) · apps/web (React + Vite + TS)
|
||
- DB: PostgreSQL · Redis · Docker na VM 125
|
||
- Auth: JWT via `useAuth` / `authFetch`
|
||
- Realtime: Socket.io eventos `order.created` | `order.updated` | `order.ready` | `ticket.bumped`
|
||
- Host: https://pizza.itecnologys.com · path /pedidos
|
||
|
||
# Arquivos-chave (ler antes de editar)
|
||
- SPEC.md (§5.5, §6.1, §7.1 RF-PED, §7.8 RF-CAN, §10)
|
||
- docs/SPEC-CANAIS-DIGITAIS.md
|
||
- apps/web/src/PedidosPage.tsx ← tela Central
|
||
- apps/web/src/PdvPage.tsx ← + Novo
|
||
- apps/web/src/App.tsx ← login → /pedidos
|
||
- apps/web/src/styles.css ← classes .pedidos-*
|
||
- apps/web/src/channelLabel.ts
|
||
- apps/api/prisma/schema.prisma ← Order ainda tem `channel`
|
||
- apps/api (módulo orders + gateway WS)
|
||
|
||
# Estado atual (já no ar)
|
||
- Skin CityFoods: header Pedidos / + Novo, chips de tags, grid de cards, aside Histórico
|
||
- WS refresh no board
|
||
- Filtro ACTIVE = confirmado | em_producao | pronto
|
||
- channelTag mapeia delivery/balcao/pdv → ENTREGA/RETIRADA/MESA (ainda via `channel`)
|
||
- Marcar pronto, link etiqueta, link KDS
|
||
- Ainda NÃO há: origin/fulfillment no schema, badge de origem, som de novo pedido digital,
|
||
filtros por fulfillment/origin, cancelar/editar no card, som + highlight de pedido novo
|
||
|
||
# O que construir nesta sessão (Central de Pedidos — pacote board)
|
||
|
||
## P0 — modelo + API
|
||
1. Migrar Order: adicionar `origin` + `fulfillment` (manter `channel` deprecated ou mapear na leitura)
|
||
2. Create/list orders aceitam e devolvem origin/fulfillment
|
||
3. Compat: PDV continua mandando channel legado → API normaliza para origin+fulfillment
|
||
4. WS payload inclui origin + fulfillment
|
||
|
||
## P1 — UI Central `/pedidos`
|
||
1. Card: faixa = fulfillment; badge = origin (CARDÁPIO / IFOOD / …)
|
||
2. Som + flash no card quando `order.created` (especialmente origin digital)
|
||
3. Filtros: Todos | Entrega | Retirada | Mesa + opcional por origin
|
||
4. Ordenação: horário (default) | nº pedido | urgente primeiro
|
||
5. Histórico lateral: últimos prontos/em_rota/entregue com origin
|
||
6. Ações no card: ✓ pronto (se em_producao) · etiqueta · abrir KDS · (depois) cancelar
|
||
7. Empty state: “Nenhum pedido” + CTA + Novo
|
||
8. Touch-first, legível a 1 m; pt-BR; R$ via money.ts
|
||
|
||
## P2 — ponte canais (não implementar cardápio inteiro aqui)
|
||
- Garantir que POST /api/orders com origin=cardapio|ifood|whatsapp aparece no board ≤ 500 ms
|
||
- Badge correto; fulfillment escolhido pelo cliente
|
||
- Stub: endpoint/fixture que simula pedido digital para testar o board sem PWA
|
||
|
||
# UX CityFoods a preservar
|
||
- Faixa ENTREGA/RETIRADA no topo do card
|
||
- Tags de sabor/components sob o item
|
||
- “Preparo tardio” se em_producao > 20 min
|
||
- Histórico com check à direita
|
||
- + Novo em destaque no header
|
||
- Sem dashboard genérico; um quadro operacional
|
||
|
||
# Critérios de aceite
|
||
1. Login → /pedidos abre o quadro
|
||
2. + Novo → /pdv → criar pedido → volta a aparecer no quadro via WS sem F5
|
||
3. Pedido simulado origin=cardapio mostra badge CARDÁPIO + faixa ENTREGA/RETIRADA
|
||
4. Latência visual ≤ 500 ms após order.created
|
||
5. KDS e etiqueta continuam funcionando a partir do mesmo Order
|
||
6. Mobile/tablet: cards usáveis com dedo; sem regressão no PDV
|
||
|
||
# Fora de escopo nesta sessão
|
||
- PWA cardápio /c/:slug completo (Track C1.1–C1.3 — sessão separada)
|
||
- Webhook iFood real (C2)
|
||
- Rotas / ORS / motoboy
|
||
- Redesign do KDS
|
||
- Multi-tenant SaaS
|
||
|
||
# Como trabalhar
|
||
1. Ler SPEC §5.5 + PedidosPage + schema Order
|
||
2. Mudar uma fatia por vez (schema → API → UI → fixture digital)
|
||
3. Não inventar libs novas; seguir padrões Nest/React do repo
|
||
4. Depois de UI: rebuild web se deploy Docker; validar /pedidos
|
||
5. Atualizar docs/SPEC-CANAIS-DIGITAIS.md se fechar um critério C1.x
|
||
|
||
Comece pelo gap origin/fulfillment (API + badges no PedidosPage). Mostre o plano curto e implemente.
|
||
```
|
||
|
||
---
|
||
|
||
## Prompt curto (follow-up / hillclimb)
|
||
|
||
```text
|
||
Continua a Central de Pedidos (/pedidos) no Pizza Digital.
|
||
SPEC §5.5 · origin×fulfillment · badge origem · WS ≤500ms · CityFoods skin.
|
||
Não faça o cardápio PWA agora — só o board + normalização do Order.
|
||
Arquivo principal: apps/web/src/PedidosPage.tsx + orders API + prisma Order.
|
||
```
|
||
|
||
---
|
||
|
||
## Mapa mental (1 tela)
|
||
|
||
```text
|
||
┌─────────────────────────────────────────┐
|
||
Canais → │ CENTRAL DE PEDIDOS /pedidos │ → KDS
|
||
│ + Novo → PDV │ → Etiqueta
|
||
│ cards: fulfillment + badge origin │ → Despacho
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
## Checklist de sessão
|
||
|
||
| # | Item | Done |
|
||
|---|------|------|
|
||
| 1 | `origin` + `fulfillment` no Prisma/API | ☐ |
|
||
| 2 | Badges no card PedidosPage | ☐ |
|
||
| 3 | Som/flash `order.created` | ☐ |
|
||
| 4 | Filtros fulfillment | ☐ |
|
||
| 5 | Fixture pedido digital | ☐ |
|
||
| 6 | Aceite WS ≤ 500 ms | ☐ |
|