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

Telefon siparişini yazdım, mutfak tableti boş sipariş gösterdi — D1 batch atomicity ve admin order POST'unda parent+child split bug

Trabzon Ortahisar'da 50 yaşında pide salonu sahibi Mehmet, Cuma akşamı telefondan gelen 3 kuymak + 2 hamsi tava + 4 ayran siparişini admin tablet'ten girdi — Order #4892 yeşil onay. İki dakika sonra şefi Mustafa: "Sipariş 4892'de ürün yok ne yapacağım?" KDS tabletinde sipariş başlığı var (280 TL), item listesi BOŞ. Mehmet üç kez denedi, üç kez boş. thMenu support forensik açtı: 3 yanlış teori (session expire, FK violation, request body items missing) çürüdü. D1 query log'unda iki ayrı transaction göründü: `db.prepare(INSERT orders).run()` committed → `db.batch(itemStmts)` transient "database is locked" hatası ile fail → outer try/catch handler 500 döndü ama parent order row D1'in per-statement atomic model'inde zaten committed olmuştu (rollback YOK). Customer-side order POST PR #619 FFF-prelim ile zaten unified `db.batch([orderStmt, ...itemStmts])` pattern'ına geçmişti — admin-side sibling endpoint hardening parity gap'iydi. **PR #660 batch X F1** fix: `apps/web-admin/src/app/api/orders/route.ts:348-380` tek `db.batch([orderInsertStmt, ...itemStmts])` çağrısına unified + items.length ≤ 100 cap (customer + kiosk endpoint parity). Pattern: parent+child write'lar D1'de TEK bir batch çağrısı içinde olmalı — cross-statement transaction yok; iki ayrı round-trip = partial-write intermediate state mümkün.

th

thMenu Ekibi

thmenu.com

Faydalı buldunuz mu? Paylaşın.