Eşzamanlı Rezervasyon Çakışmaları Nasıl Oluşur?
Kliniklerde, güzellik merkezlerinde ve kuaför salonlarında iki farklı müşteri aynı anda son kalan 14:00 seansına tıkladığında basit bir where('status', 'empty') sorgusu iki rezervasyonu da onaylayabilir (Race Condition). Ranapp randevu sisteminde bu sorunu veritabanı düzeyinde kilit mekanizmasıyla çözdüm.
Pessimistic Locking (lockForUpdate) Kullanımı
DB::transaction(function () use ($staffId, $appointmentTime, $userId) {
// Seçilen saat dilimini işlem bitene kadar diğer isteklere kilitler
$slot = AppointmentSlot::where('staff_id', $staffId)
->where('start_time', $appointmentTime)
->lockForUpdate()
->first();
if (!$slot || $slot->is_booked) {
throw new \Exception('Bu randevu saati az önce başka bir müşteri tarafından rezerve edildi.');
}
$slot->update(['is_booked' => true, 'booked_by' => $userId]);
});
Otomatik SMS Hatırlatma Servisi
Randevuya gelmeme oranını (no-show) %80 azaltan en önemli özellik randevudan 2 saat önce giden SMS bildirimleridir. Laravel Scheduler (Cron) her 15 dakikada bir kuyruğu tarayarak SMS API üzerinden müşteriye konum ve saat hatırlatması gönderir.
Etiketler: