Komponen dan alur data
flowchart TB
subgraph Klien
POS["POS Retail / F&B<br/>Expo"]
CUS["Self-order<br/>web"]
BO["Backoffice<br/>web"]
end
subgraph Cloudflare
API["navv-ci-core<br/>Hono Worker"]
D1[("D1<br/>navv-ci-db")]
R2[("R2<br/>foto lookup")]
AI["Workers AI<br/>Whisper"]
end
POS -- "device token + X-Staff-Token" --> API
CUS -- "publik: QR bertanda tangan" --> API
BO -- "sesi owner/manajer" --> API
API --> D1
API --> R2
API --> AI
Tiga cara mengakses API
Section titled “Tiga cara mengakses API”| Pemanggil | Header | Catatan |
|---|---|---|
| POS (perangkat) | Authorization: Bearer <device token> + X-Staff-Token (opsional) |
Dipasangkan lewat kode dari backoffice |
| Backoffice | Authorization: Bearer <sesi owner/manajer> |
Login email dan password |
| Pelanggan | Tanpa token; QR meja bertanda tangan + Idempotency-Key |
Endpoint /v1/public/* saja |
Semua respons memakai amplop:
{ "data": { }, "requestId": "..." }{ "error": { "code": "TOTAL_MISMATCH", "message": "...", "details": {} }, "requestId": "..." }Dari ketukan sampai database
Section titled “Dari ketukan sampai database”sequenceDiagram participant K as Kasir participant P as POS (pos-core) participant A as API participant D as D1 K->>P: Bayar P->>P: Hitung total (computeTotals) P->>P: Simpan ke outbox lokal P->>A: POST /v1/sales/sync (operationId) A->>A: Hitung ulang total, cek bayar A->>D: batch: receipt, sale, items, payments, stok A-->>P: synced + totals P->>P: Hapus dari outbox, tampilkan struk