17 lines
797 B
SQL
17 lines
797 B
SQL
-- 0057_booking_slot_unique.sql
|
|
--
|
|
-- Schutz gegen Doppelbuchung desselben Slots (Race zwischen zwei
|
|
-- gleichzeitigen Gaesten). createBooking prueft die Verfuegbarkeit per
|
|
-- Check-then-Insert — zwei parallele Requests sehen beide den Slot als frei
|
|
-- und inserten beide. Ein partieller Unique-Index auf (employee_id,
|
|
-- start_at) fuer bestaetigte Buchungen laesst die DB das Rennen atomar
|
|
-- entscheiden; die App faengt den Unique-Violation-Fehler (23505) ab und
|
|
-- meldet dem zweiten Gast "Termin nicht mehr verfuegbar".
|
|
--
|
|
-- Nur 'confirmed' zaehlt — stornierte/abgesagte Buchungen (status !=
|
|
-- 'confirmed') duerfen denselben Slot wieder freigeben.
|
|
|
|
create unique index if not exists bookings_slot_confirmed_uniq
|
|
on public.bookings (employee_id, start_at)
|
|
where status = 'confirmed';
|