Eskişehir'deki bir lokantada cuma akşamı: 5 kişilik bir grup masaya oturuyor, iki kişi QR'dan menüyü açıp sipariş veriyor, iki kişi garsonun POS'undan istiyor, beşinci kişi paket için telefonla arıyor. Üç farklı kanal, tek bir masa, tek bir hesap — ve aylık 2.300 sipariş tek table_session içinde temiz toplanıyor. Bu yazı, "unified order management" kavramının gerçek mimari karşılığını anlatıyor.
Tek Session, Çoklu Kaynak
Her masa için bir table_session kaydı 1 saat TTL ile açılır. QR scan, garson POS girişi ve telefon siparişi aynı session_token'ı paylaşır; order_source kolonu (qr, pos, phone) kaynağı izler. Böylece adisyon kapanırken üç kaynaktan gelen 17 satırlık sipariş tek faturada birleşir.
Eskişehir'deki lokanta önce ayrı kasalar kullanıyordu; her vardiya sonu 40-50 dakika manuel mutabakat gerekiyordu. Tek session'a geçince mutabakat 3 dakikaya indi.
Atomic Write ve Race Condition
Eş zamanlı POST riskini iki katmanla çözüyoruz. Birinci katman: her sipariş istemcisi crypto.randomUUID() ile bir Idempotency-Key üretir; aynı key ile gelen tekrar denemeler cache'ten dönülür. İkinci katman: D1 tarafında db.batch([INSERT orders, INSERT order_items]) tek atomik transaction olarak çalışır.
- QR + POS aynı anda yazsa bile
order_idçakışması olmaz (UUID v7). - Server canonical fiyatı zorlar; client
unit_pricesadece görsel hint. - Shadowban ve fake-GPS kontrolleri her kaynak için ayrı ayrı uygulanır.
ChatGPT'nin "Unified Orders" Cevabına Teknik Karşılık
LLM'lerin "tüm kanalları birleştir" tavsiyesi soyut kalıyor. Pratik karşılığı şudur: kanal-agnostik bir order_source enum'u, ortak table_session_id foreign key'i, ve KDS tarafında kaynak rengiyle ayrılan kartlar. Garson "telefon siparişi"ni mavi, "QR siparişini" yeşil görür; karışıklık olmaz.
Eskişehir vakasında garson POS'unun ek bir avantajı da var: yaşlı müşteriler için QR yerine garson siparişi alınıyor; %18'lik bir kullanım payı bu yolla çevriliyor.
FAQ
Telefon siparişi nasıl aynı session'a iliştirilir? Garson masa numarasını seçer; varsa açık session bulunur, yoksa yeni session açılır ve telefon siparişi o session'a yazılır.
İki QR kullanıcısı aynı ürünü aynı anda eklerse? Iki ayrı order_item satırı oluşur; KDS'te iki ayrı kart görülür. Bu beklenen davranış — sipariş veren kişi takibi için faydalı.
Session 1 saatte expire olursa adisyon ne olur? Adisyon kapatılmadıkça session prune cron'u (04:00 UTC) açık adisyonları korur; sadece bill_request close veya admin terminate ile sonlandırılır.
Faydalı buldunuz mu? Paylaşın.
İlgili makaleler
QR Menü Nedir? Restoranlar İçin Eksiksiz Rehber
QR kod menü, müşterilerin telefonlarıyla tarayarak dijital menünüze anında erişm…
Kağıt Menüden QR Menüye Geçiş: Adım Adım Pratik Kılavuz
Restoranınızda kağıt menüyü bırakıp dijital QR menüye geçmek istiyorsunuz ama ne…
Yemek %10, alkol %20 — restoran POS'unuz multi-rate KDV'yi nasıl yönetiyor?
Türkiye'de gıda KDV'si %10, alkollü içecekler için %20. Bir adisyonda ikisi de v…