mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
691 lines
22 KiB
SQL
691 lines
22 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "UserRole" AS ENUM ('PASSENGER', 'ADMIN', 'STAFF');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "TripStatus" AS ENUM ('SCHEDULED', 'BOARDING', 'EN_ROUTE', 'ARRIVED', 'CANCELLED', 'DELAYED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SeatKind" AS ENUM ('STANDARD', 'PREMIUM', 'ACCESSIBLE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SeatStatus" AS ENUM ('AVAILABLE', 'HELD', 'BOOKED', 'BLOCKED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ServiceClass" AS ENUM ('ECONOMY', 'BUSINESS', 'FIRST');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BookingStatus" AS ENUM ('DRAFT', 'PENDING_PAYMENT', 'CONFIRMED', 'CANCELLED', 'COMPLETED', 'NO_SHOW');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentMethodType" AS ENUM ('TELEBIRR', 'CBE_BIRR', 'EBIRR', 'CARD', 'WALLET');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentIntentStatus" AS ENUM ('REQUIRES_ACTION', 'PROCESSING', 'SUCCEEDED', 'FAILED', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "WalletLedgerType" AS ENUM ('CREDIT', 'DEBIT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "NotificationCategory" AS ENUM ('BOOKING', 'PAYMENT', 'DISRUPTION', 'PROMOTION', 'SYSTEM');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "StopStatus" AS ENUM ('COMPLETED', 'APPROACHING', 'CURRENT', 'UPCOMING');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SupportConversationStatus" AS ENUM ('OPEN', 'RESOLVED', 'CLOSED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SupportSender" AS ENUM ('USER', 'BOT', 'AGENT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "LoyaltyTier" AS ENUM ('BRONZE', 'SILVER', 'GOLD', 'PLATINUM');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "LoyaltyLedgerReason" AS ENUM ('TRIP_COMPLETED', 'REWARD_REDEEMED', 'PROMO_BONUS', 'MANUAL_ADJUSTMENT', 'EXPIRY');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "FoodOrderStatus" AS ENUM ('PENDING', 'PREPARING', 'READY', 'DELIVERED', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "DevicePlatform" AS ENUM ('IOS', 'ANDROID', 'WEB');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"phone" TEXT NOT NULL,
|
|
"fullName" TEXT NOT NULL,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"role" "UserRole" NOT NULL DEFAULT 'PASSENGER',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Session" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Passenger" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Passenger_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TravelerProfile" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"fullName" TEXT NOT NULL,
|
|
"relationship" TEXT NOT NULL,
|
|
"dateOfBirth" TIMESTAMP(3),
|
|
"nationalId" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "TravelerProfile_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Station" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"city" TEXT NOT NULL,
|
|
"timezone" TEXT NOT NULL DEFAULT 'Africa/Addis_Ababa',
|
|
"lat" DECIMAL(9,6) NOT NULL,
|
|
"lng" DECIMAL(9,6) NOT NULL,
|
|
|
|
CONSTRAINT "Station_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TrainService" (
|
|
"id" TEXT NOT NULL,
|
|
"number" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"operatorId" TEXT NOT NULL DEFAULT 'op_edr',
|
|
|
|
CONSTRAINT "TrainService_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Trip" (
|
|
"id" TEXT NOT NULL,
|
|
"serviceId" TEXT NOT NULL,
|
|
"originStationId" TEXT NOT NULL,
|
|
"destinationStationId" TEXT NOT NULL,
|
|
"departureAt" TIMESTAMP(3) NOT NULL,
|
|
"arrivalAt" TIMESTAMP(3) NOT NULL,
|
|
"durationMinutes" INTEGER NOT NULL,
|
|
"status" "TripStatus" NOT NULL DEFAULT 'SCHEDULED',
|
|
"stopsCount" INTEGER NOT NULL DEFAULT 0,
|
|
"onTimePercent" INTEGER NOT NULL DEFAULT 100,
|
|
"carbonRating" TEXT NOT NULL DEFAULT 'A',
|
|
|
|
CONSTRAINT "Trip_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TripStopTime" (
|
|
"id" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"stationId" TEXT NOT NULL,
|
|
"sequence" INTEGER NOT NULL,
|
|
"plannedArrivalAt" TIMESTAMP(3),
|
|
"plannedDepartureAt" TIMESTAMP(3),
|
|
"actualArrivalAt" TIMESTAMP(3),
|
|
"status" "StopStatus" NOT NULL DEFAULT 'UPCOMING',
|
|
|
|
CONSTRAINT "TripStopTime_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TripLiveStatus" (
|
|
"id" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"state" TEXT NOT NULL,
|
|
"currentLocationLabel" TEXT,
|
|
"progressPercent" INTEGER NOT NULL DEFAULT 0,
|
|
"delayMinutes" INTEGER NOT NULL DEFAULT 0,
|
|
"currentSpeedKph" INTEGER,
|
|
"platformLabel" TEXT,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "TripLiveStatus_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Coach" (
|
|
"id" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"serviceClass" "ServiceClass" NOT NULL,
|
|
|
|
CONSTRAINT "Coach_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Seat" (
|
|
"id" TEXT NOT NULL,
|
|
"coachId" TEXT NOT NULL,
|
|
"row" INTEGER NOT NULL,
|
|
"col" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"kind" "SeatKind" NOT NULL DEFAULT 'STANDARD',
|
|
"status" "SeatStatus" NOT NULL DEFAULT 'AVAILABLE',
|
|
"heldUntil" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "Seat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SeatHold" (
|
|
"id" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"seatIds" TEXT[],
|
|
"fareQuoteId" TEXT,
|
|
"passengerId" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SeatHold_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FareRule" (
|
|
"id" TEXT NOT NULL,
|
|
"tripId" TEXT,
|
|
"route" TEXT,
|
|
"serviceClass" "ServiceClass" NOT NULL,
|
|
"baseFareMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"refundable" BOOLEAN NOT NULL DEFAULT true,
|
|
"validFrom" TIMESTAMP(3) NOT NULL,
|
|
"validUntil" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "FareRule_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Booking" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingRef" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"status" "BookingStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"totalMinor" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Booking_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BookingSeat" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"seatId" TEXT NOT NULL,
|
|
"passengerName" TEXT NOT NULL,
|
|
"idDocumentType" TEXT,
|
|
"idDocumentNumber" TEXT,
|
|
|
|
CONSTRAINT "BookingSeat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PaymentMethod" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"type" "PaymentMethodType" NOT NULL,
|
|
"displayName" TEXT NOT NULL,
|
|
"maskedHint" TEXT,
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "PaymentMethod_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PaymentIntent" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"amountMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"method" "PaymentMethodType" NOT NULL,
|
|
"status" "PaymentIntentStatus" NOT NULL DEFAULT 'REQUIRES_ACTION',
|
|
"providerRef" TEXT,
|
|
"clientAction" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PaymentIntent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Ticket" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"bookingRef" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'CONFIRMED',
|
|
"qrPayload" TEXT NOT NULL,
|
|
"issuedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"validatedAt" TIMESTAMP(3),
|
|
"validatorId" TEXT,
|
|
|
|
CONSTRAINT "Ticket_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LoyaltyAccount" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"pointsBalance" INTEGER NOT NULL DEFAULT 0,
|
|
"tier" "LoyaltyTier" NOT NULL DEFAULT 'BRONZE',
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "LoyaltyAccount_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LoyaltyLedgerEntry" (
|
|
"id" TEXT NOT NULL,
|
|
"accountId" TEXT NOT NULL,
|
|
"delta" INTEGER NOT NULL,
|
|
"reason" "LoyaltyLedgerReason" NOT NULL,
|
|
"bookingId" TEXT,
|
|
"balanceAfter" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "LoyaltyLedgerEntry_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LoyaltyReward" (
|
|
"id" TEXT NOT NULL,
|
|
"accountId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"costPoints" INTEGER NOT NULL,
|
|
"available" BOOLEAN NOT NULL DEFAULT true,
|
|
"description" TEXT,
|
|
|
|
CONSTRAINT "LoyaltyReward_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "WalletAccount" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"balanceMinor" INTEGER NOT NULL DEFAULT 0,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "WalletAccount_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "WalletLedgerEntry" (
|
|
"id" TEXT NOT NULL,
|
|
"walletId" TEXT NOT NULL,
|
|
"type" "WalletLedgerType" NOT NULL,
|
|
"amountMinor" INTEGER NOT NULL,
|
|
"balanceAfterMinor" INTEGER NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"relatedBookingId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "WalletLedgerEntry_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Notification" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"category" "NotificationCategory" NOT NULL,
|
|
"read" BOOLEAN NOT NULL DEFAULT false,
|
|
"deepLink" TEXT,
|
|
"metadata" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Notification_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Promotion" (
|
|
"id" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"subtitle" TEXT,
|
|
"code" TEXT NOT NULL,
|
|
"percentOff" INTEGER,
|
|
"amountOffMinor" INTEGER,
|
|
"validUntil" TIMESTAMP(3) NOT NULL,
|
|
"ctaLabel" TEXT,
|
|
"deepLink" TEXT,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Promotion_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "StationCrowdSignal" (
|
|
"id" TEXT NOT NULL,
|
|
"stationId" TEXT NOT NULL,
|
|
"level" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"statusLabel" TEXT NOT NULL,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "StationCrowdSignal_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "WeatherAlert" (
|
|
"id" TEXT NOT NULL,
|
|
"region" TEXT NOT NULL,
|
|
"severity" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"validUntil" TIMESTAMP(3) NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "WeatherAlert_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MenuCategory" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "MenuCategory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MenuItem" (
|
|
"id" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"categoryId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"priceMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"available" BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
CONSTRAINT "MenuItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FoodOrder" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"status" "FoodOrderStatus" NOT NULL DEFAULT 'PENDING',
|
|
"totalMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "FoodOrder_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FoodOrderItem" (
|
|
"id" TEXT NOT NULL,
|
|
"orderId" TEXT NOT NULL,
|
|
"menuItemId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"quantity" INTEGER NOT NULL,
|
|
"lineTotalMinor" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "FoodOrderItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FaqCategory" (
|
|
"id" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"iconKey" TEXT,
|
|
|
|
CONSTRAINT "FaqCategory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FaqArticle" (
|
|
"id" TEXT NOT NULL,
|
|
"categoryId" TEXT NOT NULL,
|
|
"question" TEXT NOT NULL,
|
|
"answerMarkdown" TEXT NOT NULL,
|
|
"rank" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "FaqArticle_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SupportConversation" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"status" "SupportConversationStatus" NOT NULL DEFAULT 'OPEN',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SupportConversation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SupportMessage" (
|
|
"id" TEXT NOT NULL,
|
|
"conversationId" TEXT NOT NULL,
|
|
"sender" "SupportSender" NOT NULL,
|
|
"text" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SupportMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "UserPreferences" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"pushEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"emailEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"smsEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"promosEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"biometricEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"twoFactorEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"defaultPaymentMethodId" TEXT,
|
|
"autoDownloadTickets" BOOLEAN NOT NULL DEFAULT true,
|
|
"dataSharing" BOOLEAN NOT NULL DEFAULT false,
|
|
"locale" TEXT NOT NULL DEFAULT 'en',
|
|
"darkMode" BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT "UserPreferences_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Device" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"platform" "DevicePlatform" NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"pushToken" TEXT,
|
|
"trusted" BOOLEAN NOT NULL DEFAULT false,
|
|
"lastSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Device_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SavedRoute" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"fromStationId" TEXT NOT NULL,
|
|
"toStationId" TEXT NOT NULL,
|
|
"fromName" TEXT NOT NULL,
|
|
"toName" TEXT NOT NULL,
|
|
"tripCount" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SavedRoute_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_phone_key" ON "User"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Session_token_key" ON "Session"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Passenger_userId_key" ON "Passenger"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Station_code_key" ON "Station"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TrainService_number_key" ON "TrainService"("number");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TripStopTime_tripId_sequence_key" ON "TripStopTime"("tripId", "sequence");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TripLiveStatus_tripId_key" ON "TripLiveStatus"("tripId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Coach_tripId_label_key" ON "Coach"("tripId", "label");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Seat_coachId_row_col_key" ON "Seat"("coachId", "row", "col");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Booking_bookingRef_key" ON "Booking"("bookingRef");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PaymentIntent_bookingId_key" ON "PaymentIntent"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Ticket_bookingId_key" ON "Ticket"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "LoyaltyAccount_passengerId_key" ON "LoyaltyAccount"("passengerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "WalletAccount_passengerId_key" ON "WalletAccount"("passengerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Promotion_code_key" ON "Promotion"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "UserPreferences_userId_key" ON "UserPreferences"("userId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Passenger" ADD CONSTRAINT "Passenger_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TravelerProfile" ADD CONSTRAINT "TravelerProfile_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Trip" ADD CONSTRAINT "Trip_serviceId_fkey" FOREIGN KEY ("serviceId") REFERENCES "TrainService"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Trip" ADD CONSTRAINT "Trip_originStationId_fkey" FOREIGN KEY ("originStationId") REFERENCES "Station"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Trip" ADD CONSTRAINT "Trip_destinationStationId_fkey" FOREIGN KEY ("destinationStationId") REFERENCES "Station"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TripStopTime" ADD CONSTRAINT "TripStopTime_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TripStopTime" ADD CONSTRAINT "TripStopTime_stationId_fkey" FOREIGN KEY ("stationId") REFERENCES "Station"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TripLiveStatus" ADD CONSTRAINT "TripLiveStatus_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Coach" ADD CONSTRAINT "Coach_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Seat" ADD CONSTRAINT "Seat_coachId_fkey" FOREIGN KEY ("coachId") REFERENCES "Coach"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Booking" ADD CONSTRAINT "Booking_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Booking" ADD CONSTRAINT "Booking_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BookingSeat" ADD CONSTRAINT "BookingSeat_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BookingSeat" ADD CONSTRAINT "BookingSeat_seatId_fkey" FOREIGN KEY ("seatId") REFERENCES "Seat"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PaymentIntent" ADD CONSTRAINT "PaymentIntent_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "LoyaltyAccount" ADD CONSTRAINT "LoyaltyAccount_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "LoyaltyLedgerEntry" ADD CONSTRAINT "LoyaltyLedgerEntry_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "LoyaltyAccount"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "LoyaltyReward" ADD CONSTRAINT "LoyaltyReward_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "LoyaltyAccount"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "WalletAccount" ADD CONSTRAINT "WalletAccount_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "WalletLedgerEntry" ADD CONSTRAINT "WalletLedgerEntry_walletId_fkey" FOREIGN KEY ("walletId") REFERENCES "WalletAccount"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Notification" ADD CONSTRAINT "Notification_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "StationCrowdSignal" ADD CONSTRAINT "StationCrowdSignal_stationId_fkey" FOREIGN KEY ("stationId") REFERENCES "Station"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MenuItem" ADD CONSTRAINT "MenuItem_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MenuItem" ADD CONSTRAINT "MenuItem_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "MenuCategory"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FoodOrder" ADD CONSTRAINT "FoodOrder_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FoodOrderItem" ADD CONSTRAINT "FoodOrderItem_orderId_fkey" FOREIGN KEY ("orderId") REFERENCES "FoodOrder"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FaqArticle" ADD CONSTRAINT "FaqArticle_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "FaqCategory"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SupportMessage" ADD CONSTRAINT "SupportMessage_conversationId_fkey" FOREIGN KEY ("conversationId") REFERENCES "SupportConversation"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "UserPreferences" ADD CONSTRAINT "UserPreferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Device" ADD CONSTRAINT "Device_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SavedRoute" ADD CONSTRAINT "SavedRoute_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|