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