mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-28 09:00:57 +00:00
Add unique constraint to JourneySegment for seat bookings per schedule
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
-- Remove duplicate JourneySegment rows, keeping the one with the lowest id
|
||||
-- (earliest created) per (scheduleId, seatId, departureStationId) group.
|
||||
-- This cleans up any existing double-bookings before the unique index is applied.
|
||||
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;
|
||||
|
||||
-- Prevents two confirmed bookings from occupying the same seat on the same
|
||||
-- schedule hop — the hard DB backstop against application-level race conditions.
|
||||
-- Partial index: seatId IS NOT NULL excludes free-child rows that have no seat.
|
||||
CREATE UNIQUE INDEX "JourneySegment_scheduleId_seatId_departureStationId_key"
|
||||
ON passenger."JourneySegment" ("scheduleId", "seatId", "departureStationId")
|
||||
WHERE "seatId" IS NOT NULL;
|
||||
@@ -991,6 +991,10 @@ model JourneySegment {
|
||||
arrivalStationId String
|
||||
journey Journey @relation(fields: [journeyId], references: [id])
|
||||
schedule TrainSchedule @relation(fields: [scheduleId], references: [id])
|
||||
|
||||
// Prevents two confirmed bookings from occupying the same seat on the same
|
||||
// schedule hop — the hard DB backstop against application-level race conditions.
|
||||
@@unique([scheduleId, seatId, departureStationId])
|
||||
@@schema("passenger")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user