/*
  Warnings:

  - A unique constraint covering the columns `[scheduleId,seatId,departureStationId]` on the table `JourneySegment` will be added. If there are existing duplicate values, this will fail.

*/
-- Deduplicate before applying the unique index.
-- Keeps the row with the lowest id per (scheduleId, seatId, departureStationId) group.
DELETE FROM passenger."JourneySegment"
WHERE id NOT IN (
  SELECT MIN(id)
  FROM passenger."JourneySegment"
  WHERE "seatId" IS NOT NULL
  GROUP BY "scheduleId", "seatId", "departureStationId"
)
AND "seatId" IS NOT NULL;

-- CreateIndex (partial: only index rows where seatId is not null so NULL rows never collide)
CREATE UNIQUE INDEX IF NOT EXISTS "JourneySegment_scheduleId_seatId_departureStationId_key"
  ON passenger."JourneySegment"("scheduleId", "seatId", "departureStationId")
  WHERE ("seatId" IS NOT NULL);
