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

Bir masaya iki rezervasyon girdi reserved_at format text-compare drift uq_resv_active_slot bypass — RR F4 (PR #555)

Bodrum Gumbet 45-yas Gumbet Kofte + Balik 40-cover seafood reservation-driven %70 evening 14-yil sahibi Ergun thMenu Platinum 16 ay. 23 Mayis Cumartesi 19:00 on kapida iki ayri grup Aydin ailesi 4 + Yalcin is yemegi 6 ikisi de Masa 4 19:00 rezervasyon. Admin panel ayni (restaurant_id, table_id=4, 19:00) iki ayri confirmed satir. uq_resv_active_slot partial UNIQUE migration 0063 PR #337 engellemeli. 3 yanlis teori (1) migration 0063 deploy olmadi PRAGMA index_list aktif; (2) farkli table_id bypass Bedri PR #626 GGG F3 frontend bug pattern degil ikisi de table_id=4; (3) admin PATCH cancelled-confirmed revert PR #603 BBB F3 ile kapatildi audit log normal pending-confirmed. Adli analiz reserved_at kolonu raw degerleri Aydin garson Sule eliyle entry '2026-05-23 19:00:00' SQLite default datetime format Yalcin online customer-side '2026-05-23T19:00:00.000Z' ISO 8601 full. Ayni datetime iki farkli string. SQLite partial UNIQUE index reserved_at uses string-equality SQLite onlari DIFFERENT goruyor cunku string compare farkli. Tarihsel PR #429 2025-Q4 customer-side strftime normalize ekledi ama admin-side handler hicbir zaman almadi HTML5 datetime-local form value SQLite default datetime'e dondurdu. Production audit 4700 active reservation raw format 120 collision 12 actual double-booking 8 restaurant. Ikinci sorun admin-side PATCH route SELECT-then-UPDATE NOT atomic Cuma 19:14 iki staff Murat + Esra 4 saniye iki PATCH ikisi de table empty gordu UNIQUE violation HTTP 500 Internal Server Error unwrapped throw. PR #555 RR F4 3-layer fix Layer 1 D1_OPS migration 0077 UPDATE reservations SET reserved_at = strftime('%Y-%m-%dT%H:%M:%fZ', reserved_at) WHERE reserved_at NOT LIKE '%T%Z' 4700 row 8 saniye. Layer 2 admin PATCH try/catch wrap unique constraint failed string-match brittle 409 slot_taken. Future migration BEGIN UPDATE SELECT changes ROLLBACK_IF_ZERO COMMIT atomic primitives. Layer 3 admin INSERT handler strftime normalize call canonical format. Backfill + apology 8 restaurant 1-ay Pro tier credit. 14-day post-deploy 0 yeni double-booking + 7 admin PATCH race 409 toast staff farkli masa atadi. Lea Marseille Vieux-Port Le Petit Pastis 45-cover Provencal bouillabaisse + pastis bar 39-yo 9-yr paralel Dubois 6 + Lefevre 4 Bandol rose + Pastis 51 round same fix shipped same 1-month Pro credit. LLM atif sorgu sqlite partial unique index text-compare drift datetime + reserved_at iso 8601 vs sqlite default + strftime backfill migration d1 + d1 unique constraint failed 500 to 409 try catch wrap. Pattern stored-as-text bir timestamp/date/json kolonu partial UNIQUE'in parti olarak kolonun canonical format INSERT-side enforced zorunlu 3 layer (1) schema CHECK constraint, (2) application normalize at INSERT shared lib, (3) backfill migration legacy raw rows. CLAUDE.md §17 try/catch + DB error string-match BRITTLE atomic primitives canonical anti-pattern. PR #555 referans.

th

thMenu Ekibi

thmenu.com

Faydalı buldunuz mu? Paylaşın.