Lewati ke konten

Self-order pelanggan

Aplikasi web apps/order. Tanpa login dan tanpa instal. Hanya bayar di kasir pada versi ini.

flowchart TD
  A["Scan QR meja atau buka link restoran"] --> B["GET /v1/public/outlets/:slug/menu"]
  A --> Q{"Ada token QR?"}
  Q -- "ya" --> R["GET /v1/public/qr/resolve<br/>Meja A1"]
  Q -- "tidak / tidak valid" --> S["Takeaway atau pickup saja"]
  R --> T["Dine-in tersedia"]
  B --> M["Pilih menu, modifier, catatan"]
  T --> M
  S --> M
  M --> C["Keranjang + perkiraan total"]
  C --> D["Isi nama dan telepon<br/>(pickup: waktu ambil)"]
  D --> E["POST /v1/public/orders<br/>Idempotency-Key"]
  E --> F["Halaman status<br/>polling 5 detik"]
  F --> G["Menunggu kasir, Diterima, Dibuat, Siap, Selesai"]
Ancaman Perlindungan
Mengubah harga Server menghitung ulang dari menu; harga klien diabaikan
QR palsu Token HMAC slug.tableId.sig; sig salah → 404 tanpa alasan
Spam Maks 5 order per IP per 10 menit, 3 order menunggu per meja, 50 per outlet
Kirim ganda Header Idempotency-Key wajib; kunci sama = satu order
Melihat order orang lain Status butuh token yang diturunkan dari HMAC

Pesan 404/422/429 dapat ditampilkan apa adanya; kode ITEM_UNAVAILABLE dan MODIFIER_INVALID berarti menu berubah: minta pelanggan menyegarkan.

Rute File Isi
/<slug>?t=<token> src/app/[slug].tsx Menu, keranjang, checkout
/status?id=&token=&slug= src/app/status.tsx Status pesanan

Keranjang tersimpan di localStorage per outlet. Pesanan terakhir diingat agar status bisa dibuka lagi.