diff --git a/apps/edr-passenger-api/prisma/migrations/20240101000000_individual_tickets_no_timezone/migration.sql b/apps/edr-passenger-api/prisma/migrations/20240101000000_individual_tickets_no_timezone/migration.sql index a3a9b7445..44d778635 100644 --- a/apps/edr-passenger-api/prisma/migrations/20240101000000_individual_tickets_no_timezone/migration.sql +++ b/apps/edr-passenger-api/prisma/migrations/20240101000000_individual_tickets_no_timezone/migration.sql @@ -1,8 +1,15 @@ --- DropForeignKey -ALTER TABLE "passenger"."TicketSeat" DROP CONSTRAINT IF EXISTS "TicketSeat_seatId_fkey"; - --- DropForeignKey -ALTER TABLE "passenger"."TicketSeat" DROP CONSTRAINT IF EXISTS "TicketSeat_ticketId_fkey"; +-- DropForeignKey (only if table exists) +DO $$ +BEGIN + IF EXISTS ( + SELECT FROM information_schema.tables + WHERE table_schema = 'passenger' + AND table_name = 'TicketSeat' + ) THEN + ALTER TABLE "passenger"."TicketSeat" DROP CONSTRAINT IF EXISTS "TicketSeat_seatId_fkey"; + ALTER TABLE "passenger"."TicketSeat" DROP CONSTRAINT IF EXISTS "TicketSeat_ticketId_fkey"; + END IF; +END $$; -- DropIndex DROP INDEX IF EXISTS "passenger"."Ticket_bookingId_key"; @@ -20,18 +27,28 @@ ALTER TABLE "passenger"."Ticket" -- DropTable DROP TABLE IF EXISTS "passenger"."TicketSeat"; --- Remove GateValidationLog rows referencing orphan tickets first -DELETE FROM "passenger"."GateValidationLog" -WHERE "ticketId" IN ( - SELECT "id" FROM "passenger"."Ticket" - WHERE "seatId" = '' - OR "seatId" NOT IN (SELECT "id" FROM "passenger"."Seat") -); +-- Remove GateValidationLog rows referencing orphan tickets first (only if tickets have seatId column) +DO $$ +BEGIN + IF EXISTS ( + SELECT FROM information_schema.columns + WHERE table_schema = 'passenger' + AND table_name = 'Ticket' + AND column_name = 'seatId' + ) THEN + DELETE FROM "passenger"."GateValidationLog" + WHERE "ticketId" IN ( + SELECT "id" FROM "passenger"."Ticket" + WHERE "seatId" = '' + OR "seatId" NOT IN (SELECT "id" FROM "passenger"."Seat") + ); --- Remove orphan ticket rows -DELETE FROM "passenger"."Ticket" -WHERE "seatId" = '' - OR "seatId" NOT IN (SELECT "id" FROM "passenger"."Seat"); + -- Remove orphan ticket rows + DELETE FROM "passenger"."Ticket" + WHERE "seatId" = '' + OR "seatId" NOT IN (SELECT "id" FROM "passenger"."Seat"); + END IF; +END $$; -- CreateIndex CREATE INDEX IF NOT EXISTS "Ticket_bookingId_idx" ON "passenger"."Ticket"("bookingId"); @@ -39,8 +56,22 @@ CREATE INDEX IF NOT EXISTS "Ticket_bookingId_idx" ON "passenger"."Ticket"("booki -- CreateIndex CREATE INDEX IF NOT EXISTS "Ticket_seatId_idx" ON "passenger"."Ticket"("seatId"); --- AddForeignKey -ALTER TABLE "passenger"."Ticket" - ADD CONSTRAINT "Ticket_seatId_fkey" - FOREIGN KEY ("seatId") REFERENCES "passenger"."Seat"("id") - ON DELETE RESTRICT ON UPDATE CASCADE; +-- AddForeignKey (only if not already exists) +DO $$ +BEGIN + IF EXISTS ( + SELECT FROM information_schema.columns + WHERE table_schema = 'passenger' + AND table_name = 'Ticket' + AND column_name = 'seatId' + ) AND NOT EXISTS ( + SELECT FROM information_schema.table_constraints + WHERE constraint_schema = 'passenger' + AND constraint_name = 'Ticket_seatId_fkey' + ) THEN + ALTER TABLE "passenger"."Ticket" + ADD CONSTRAINT "Ticket_seatId_fkey" + FOREIGN KEY ("seatId") REFERENCES "passenger"."Seat"("id") + ON DELETE RESTRICT ON UPDATE CASCADE; + END IF; +END $$;