mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 00:38:11 +00:00
Updated seat class and coach mangement
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "SeatClass" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"basePrice" INTEGER NOT NULL,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "SeatClass_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "SeatClass_name_key" ON "SeatClass"("name");
|
||||
|
||||
-- Seed default seat classes so existing coaches can be migrated
|
||||
INSERT INTO "SeatClass" ("id", "name", "description", "basePrice", "isActive", "createdAt", "updatedAt")
|
||||
VALUES
|
||||
('sc_economy', 'Economy Seat', 'Standard economy seating', 45000, true, NOW(), NOW()),
|
||||
('sc_business', 'Business Seat','Comfortable business class', 90000, true, NOW(), NOW()),
|
||||
('sc_first', 'VIP Bed', 'First class VIP bed', 135000, true, NOW(), NOW());
|
||||
|
||||
-- Add seatClassId column to Coach (nullable first for migration safety)
|
||||
ALTER TABLE "Coach" ADD COLUMN "seatClassId" TEXT;
|
||||
|
||||
-- Map existing serviceClass enum values to new SeatClass ids
|
||||
UPDATE "Coach" SET "seatClassId" = 'sc_economy' WHERE "serviceClass" = 'ECONOMY';
|
||||
UPDATE "Coach" SET "seatClassId" = 'sc_business' WHERE "serviceClass" = 'BUSINESS';
|
||||
UPDATE "Coach" SET "seatClassId" = 'sc_first' WHERE "serviceClass" = 'FIRST';
|
||||
|
||||
-- Make seatClassId NOT NULL now that all rows are populated
|
||||
ALTER TABLE "Coach" ALTER COLUMN "seatClassId" SET NOT NULL;
|
||||
|
||||
-- Drop old serviceClass column
|
||||
ALTER TABLE "Coach" DROP COLUMN "serviceClass";
|
||||
|
||||
-- Add seatClassId to FareRule
|
||||
ALTER TABLE "FareRule" ADD COLUMN "seatClassId" TEXT;
|
||||
|
||||
UPDATE "FareRule" SET "seatClassId" = 'sc_economy' WHERE "serviceClass" = 'ECONOMY';
|
||||
UPDATE "FareRule" SET "seatClassId" = 'sc_business' WHERE "serviceClass" = 'BUSINESS';
|
||||
UPDATE "FareRule" SET "seatClassId" = 'sc_first' WHERE "serviceClass" = 'FIRST';
|
||||
|
||||
ALTER TABLE "FareRule" ALTER COLUMN "seatClassId" SET NOT NULL;
|
||||
ALTER TABLE "FareRule" DROP COLUMN "serviceClass";
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Coach" ADD CONSTRAINT "Coach_seatClassId_fkey"
|
||||
FOREIGN KEY ("seatClassId") REFERENCES "SeatClass"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "FareRule" ADD CONSTRAINT "FareRule_seatClassId_fkey"
|
||||
FOREIGN KEY ("seatClassId") REFERENCES "SeatClass"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE "SeatClass" ALTER COLUMN "updatedAt" SET DEFAULT NOW();
|
||||
@@ -35,10 +35,16 @@ enum SeatStatus {
|
||||
BLOCKED
|
||||
}
|
||||
|
||||
enum ServiceClass {
|
||||
ECONOMY
|
||||
BUSINESS
|
||||
FIRST
|
||||
model SeatClass {
|
||||
id String @id @default(uuid())
|
||||
name String @unique
|
||||
description String?
|
||||
basePrice Int
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
coaches Coach[]
|
||||
fareRules FareRule[]
|
||||
}
|
||||
|
||||
enum BookingStatus {
|
||||
@@ -249,12 +255,13 @@ model TripLiveStatus {
|
||||
}
|
||||
|
||||
model Coach {
|
||||
id String @id @default(uuid())
|
||||
id String @id @default(uuid())
|
||||
tripId String
|
||||
label String
|
||||
serviceClass ServiceClass
|
||||
trip Trip @relation(fields: [tripId], references: [id])
|
||||
seats Seat[]
|
||||
seatClassId String
|
||||
trip Trip @relation(fields: [tripId], references: [id])
|
||||
seatClass SeatClass @relation(fields: [seatClassId], references: [id])
|
||||
seats Seat[]
|
||||
@@unique([tripId, label])
|
||||
}
|
||||
|
||||
@@ -283,11 +290,12 @@ model SeatHold {
|
||||
}
|
||||
|
||||
model FareRule {
|
||||
id String @id @default(uuid())
|
||||
id String @id @default(uuid())
|
||||
tripId String?
|
||||
route String?
|
||||
serviceClass ServiceClass
|
||||
seatClassId String
|
||||
baseFareMinor Int
|
||||
seatClass SeatClass @relation(fields: [seatClassId], references: [id])
|
||||
currency String @default("ETB")
|
||||
refundable Boolean @default(true)
|
||||
validFrom DateTime
|
||||
|
||||
Reference in New Issue
Block a user