-- 005_event_participation_unique_constraints.sql
-- Composite UNIQUE constraints on the event-participation collections.
--
-- Same rationale as 004: Directus's `is_unique` flag is single-column only;
-- composite uniqueness lives in db-init/ because the snapshot YAML format
-- does not capture multi-column unique constraints.
--
-- Owned by: task 1.5 (event-participation collections).

ALTER TABLE events
  ADD CONSTRAINT events_org_slug_unique
  UNIQUE (organization_id, slug);

ALTER TABLE classes
  ADD CONSTRAINT classes_event_code_unique
  UNIQUE (event_id, code);

ALTER TABLE entries
  ADD CONSTRAINT entries_event_race_number_unique
  UNIQUE (event_id, race_number);

ALTER TABLE entry_crew
  ADD CONSTRAINT entry_crew_entry_user_unique
  UNIQUE (entry_id, user_id);

ALTER TABLE entry_devices
  ADD CONSTRAINT entry_devices_entry_device_unique
  UNIQUE (entry_id, device_id);

-- -------------------------------------------------------------------------
-- Assertion block: verify all five constraints landed.
-- -------------------------------------------------------------------------
DO $$ BEGIN

  IF NOT EXISTS (
    SELECT 1 FROM pg_constraint WHERE conname = 'events_org_slug_unique'
  ) THEN
    RAISE EXCEPTION 'events composite unique constraint (org, slug) missing';
  END IF;

  IF NOT EXISTS (
    SELECT 1 FROM pg_constraint WHERE conname = 'classes_event_code_unique'
  ) THEN
    RAISE EXCEPTION 'classes composite unique constraint (event, code) missing';
  END IF;

  IF NOT EXISTS (
    SELECT 1 FROM pg_constraint WHERE conname = 'entries_event_race_number_unique'
  ) THEN
    RAISE EXCEPTION 'entries composite unique constraint (event, race_number) missing';
  END IF;

  IF NOT EXISTS (
    SELECT 1 FROM pg_constraint WHERE conname = 'entry_crew_entry_user_unique'
  ) THEN
    RAISE EXCEPTION 'entry_crew composite unique constraint (entry, user) missing';
  END IF;

  IF NOT EXISTS (
    SELECT 1 FROM pg_constraint WHERE conname = 'entry_devices_entry_device_unique'
  ) THEN
    RAISE EXCEPTION 'entry_devices composite unique constraint (entry, device) missing';
  END IF;

END $$;
