Files
teamvis-selfhost/supabase/migrations/0057_booking_slot_unique.sql
T

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';