İçeriğe atla
ÖzelliklerFiyatlandırmaİş OrtaklığıBlogYardımHakkımızdaİletişim
BaşlaGiriş Yap
Bloga Dön
guides2026-09-257 dk okuma

Multi-Modal Sipariş: Bir Müşteri QR'dan, Diğeri Garson, Üçüncüsü Telefon

Eskişehir'de 5 kişilik grup: 2 QR, 2 garson POS, 1 telefon. Aylık 2.300 sipariş tek session'da temiz toplandı. Atomic write ve race condition mimarisi.

th

thMenu Team

thmenu.com

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_price sadece 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.