mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
1146 lines
36 KiB
SQL
1146 lines
36 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "UserRole" AS ENUM ('PASSENGER', 'AGENT', 'SUPERVISOR', '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_REGULAR', 'ECONOMY_BED_LOWER', 'ECONOMY_BED_MIDDLE', 'ECONOMY_BED_UPPER', 'VIP_BED_LOWER', 'VIP_BED_UPPER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BookingStatus" AS ENUM ('DRAFT', 'PENDING_PAYMENT', 'CONFIRMED', 'CANCELLED', 'COMPLETED', 'NO_SHOW', 'REFUNDED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentMethodType" AS ENUM ('TELEBIRR', 'CBE_BIRR', 'EBIRR', 'CARD', 'WALLET');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentIntentStatus" AS ENUM ('REQUIRES_ACTION', 'PROCESSING', 'SUCCEEDED', 'FAILED', 'CANCELLED', 'REFUNDED');
|
|
|
|
-- 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',
|
|
"nationality" TEXT,
|
|
"passportNumber" TEXT,
|
|
"nationalId" TEXT,
|
|
"failedLoginAttempts" INTEGER NOT NULL DEFAULT 0,
|
|
"lockedUntil" TIMESTAMP(3),
|
|
"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,
|
|
"ipAddress" TEXT,
|
|
"userAgent" TEXT,
|
|
"lastActivityAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"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),
|
|
"premiumFeeMinor" INTEGER NOT NULL DEFAULT 0,
|
|
"eligibility" TEXT,
|
|
|
|
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,
|
|
"bookingType" TEXT NOT NULL DEFAULT 'ONE_WAY',
|
|
"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,
|
|
"merchantOrderId" TEXT,
|
|
"providerOrderId" TEXT,
|
|
"providerTxnId" TEXT,
|
|
"rawInitiation" JSONB,
|
|
"paidAt" TIMESTAMP(3),
|
|
"failureCode" TEXT,
|
|
"failureMessage" TEXT,
|
|
"expiresAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PaymentIntent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PaymentWebhookEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"provider" "PaymentMethodType" NOT NULL,
|
|
"externalEventId" TEXT NOT NULL,
|
|
"merchantOrderId" TEXT,
|
|
"providerTxnId" TEXT,
|
|
"signatureValid" BOOLEAN NOT NULL,
|
|
"status" TEXT NOT NULL,
|
|
"payload" JSONB NOT NULL,
|
|
"receivedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"processedAt" TIMESTAMP(3),
|
|
"processingError" TEXT,
|
|
|
|
CONSTRAINT "PaymentWebhookEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PaymentRefund" (
|
|
"id" TEXT NOT NULL,
|
|
"paymentIntentId" TEXT NOT NULL,
|
|
"amountMinor" INTEGER NOT NULL,
|
|
"reason" TEXT,
|
|
"providerRefundId" TEXT,
|
|
"status" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "PaymentRefund_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,
|
|
"barcodePayload" TEXT,
|
|
"pdfUrl" TEXT,
|
|
"deliveryChannel" TEXT NOT NULL DEFAULT 'EMAIL',
|
|
"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,
|
|
"language" TEXT NOT NULL DEFAULT 'en',
|
|
|
|
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")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Journey" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL,
|
|
"totalMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Journey_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "JourneySegment" (
|
|
"id" TEXT NOT NULL,
|
|
"journeyId" TEXT NOT NULL,
|
|
"tripId" TEXT NOT NULL,
|
|
"segmentOrder" INTEGER NOT NULL,
|
|
"seatId" TEXT,
|
|
"coachId" TEXT,
|
|
"departureStationId" TEXT NOT NULL,
|
|
"arrivalStationId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "JourneySegment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OtpCode" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"code" TEXT NOT NULL,
|
|
"purpose" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"verified" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "OtpCode_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PasswordResetToken" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"used" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "PasswordResetToken_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Route" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"effectiveFrom" TIMESTAMP(3) NOT NULL,
|
|
"effectiveUntil" TIMESTAMP(3),
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Route_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RouteStop" (
|
|
"id" TEXT NOT NULL,
|
|
"routeId" TEXT NOT NULL,
|
|
"stationId" TEXT NOT NULL,
|
|
"sequence" INTEGER NOT NULL,
|
|
"distanceKm" INTEGER,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "RouteStop_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RouteFareRule" (
|
|
"id" TEXT NOT NULL,
|
|
"routeId" TEXT NOT NULL,
|
|
"serviceClass" "ServiceClass" NOT NULL,
|
|
"passengerCategory" TEXT NOT NULL DEFAULT 'ADULT',
|
|
"baseFareMinor" INTEGER NOT NULL,
|
|
"discountPercent" INTEGER,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"validFrom" TIMESTAMP(3) NOT NULL,
|
|
"validUntil" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "RouteFareRule_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Agent" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"agentCode" TEXT NOT NULL,
|
|
"stationId" TEXT,
|
|
"commissionRate" INTEGER NOT NULL DEFAULT 5,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Agent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AgentBooking" (
|
|
"id" TEXT NOT NULL,
|
|
"agentId" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"paymentMethod" TEXT NOT NULL,
|
|
"cashReceived" INTEGER,
|
|
"changeGiven" INTEGER,
|
|
"paperTicket" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "AgentBooking_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AgentShift" (
|
|
"id" TEXT NOT NULL,
|
|
"agentId" TEXT NOT NULL,
|
|
"openedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"closedAt" TIMESTAMP(3),
|
|
"openingBalance" INTEGER NOT NULL DEFAULT 0,
|
|
"closingBalance" INTEGER,
|
|
"reconciled" BOOLEAN NOT NULL DEFAULT false,
|
|
"notes" TEXT,
|
|
|
|
CONSTRAINT "AgentShift_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AgentCommission" (
|
|
"id" TEXT NOT NULL,
|
|
"agentId" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"amountMinor" INTEGER NOT NULL,
|
|
"rate" INTEGER NOT NULL,
|
|
"paidAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "AgentCommission_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BookingModification" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"modifiedBy" TEXT NOT NULL,
|
|
"modificationType" TEXT NOT NULL,
|
|
"oldData" JSONB NOT NULL,
|
|
"newData" JSONB NOT NULL,
|
|
"fareAdjustment" INTEGER NOT NULL DEFAULT 0,
|
|
"reason" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "BookingModification_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BookingCancellation" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"cancelledBy" TEXT NOT NULL,
|
|
"reason" TEXT,
|
|
"refundAmount" INTEGER NOT NULL,
|
|
"refundMethod" TEXT NOT NULL,
|
|
"refundStatus" TEXT NOT NULL,
|
|
"processedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "BookingCancellation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GateValidationLog" (
|
|
"id" TEXT NOT NULL,
|
|
"ticketId" TEXT NOT NULL,
|
|
"validatorId" TEXT NOT NULL,
|
|
"gateId" TEXT,
|
|
"status" TEXT NOT NULL,
|
|
"reason" TEXT,
|
|
"validatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "GateValidationLog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BaggageAllowance" (
|
|
"id" TEXT NOT NULL,
|
|
"serviceClass" "ServiceClass" NOT NULL,
|
|
"maxWeightKg" INTEGER NOT NULL,
|
|
"maxPiecesCount" INTEGER NOT NULL,
|
|
"excessFeePerKg" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "BaggageAllowance_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BaggageBooking" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"weightKg" INTEGER NOT NULL,
|
|
"piecesCount" INTEGER NOT NULL,
|
|
"excessFeeMinor" INTEGER NOT NULL DEFAULT 0,
|
|
"paid" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "BaggageBooking_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuditLog" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"action" TEXT NOT NULL,
|
|
"entityType" TEXT NOT NULL,
|
|
"entityId" TEXT,
|
|
"oldData" JSONB,
|
|
"newData" JSONB,
|
|
"ipAddress" TEXT,
|
|
"userAgent" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "AuditLog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "NotificationTemplate" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"channel" TEXT NOT NULL,
|
|
"subject" TEXT,
|
|
"bodyTemplate" TEXT NOT NULL,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "NotificationTemplate_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SeatBlock" (
|
|
"id" TEXT NOT NULL,
|
|
"seatId" TEXT NOT NULL,
|
|
"reason" TEXT NOT NULL,
|
|
"blockedBy" TEXT NOT NULL,
|
|
"approvedBy" TEXT,
|
|
"blockedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"unblockAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "SeatBlock_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OperationalReport" (
|
|
"id" TEXT NOT NULL,
|
|
"reportType" TEXT NOT NULL,
|
|
"dateFrom" TIMESTAMP(3) NOT NULL,
|
|
"dateTo" TIMESTAMP(3) NOT NULL,
|
|
"data" JSONB NOT NULL,
|
|
"generatedBy" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "OperationalReport_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 "PaymentIntent_merchantOrderId_key" ON "PaymentIntent"("merchantOrderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "PaymentIntent_providerOrderId_idx" ON "PaymentIntent"("providerOrderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "PaymentIntent_providerTxnId_idx" ON "PaymentIntent"("providerTxnId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "PaymentWebhookEvent_merchantOrderId_idx" ON "PaymentWebhookEvent"("merchantOrderId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PaymentWebhookEvent_provider_externalEventId_key" ON "PaymentWebhookEvent"("provider", "externalEventId");
|
|
|
|
-- 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");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OtpCode_email_phone_idx" ON "OtpCode"("email", "phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PasswordResetToken_token_key" ON "PasswordResetToken"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "PasswordResetToken_userId_idx" ON "PasswordResetToken"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Route_code_key" ON "Route"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RouteStop_routeId_stationId_idx" ON "RouteStop"("routeId", "stationId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RouteStop_routeId_sequence_key" ON "RouteStop"("routeId", "sequence");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RouteFareRule_routeId_serviceClass_idx" ON "RouteFareRule"("routeId", "serviceClass");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Agent_userId_key" ON "Agent"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Agent_agentCode_key" ON "Agent"("agentCode");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AgentBooking_bookingId_key" ON "AgentBooking"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AgentShift_agentId_openedAt_idx" ON "AgentShift"("agentId", "openedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AgentCommission_agentId_paidAt_idx" ON "AgentCommission"("agentId", "paidAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BookingModification_bookingId_idx" ON "BookingModification"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "BookingCancellation_bookingId_key" ON "BookingCancellation"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "GateValidationLog_ticketId_idx" ON "GateValidationLog"("ticketId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "GateValidationLog_validatorId_idx" ON "GateValidationLog"("validatorId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BaggageBooking_bookingId_idx" ON "BaggageBooking"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_userId_createdAt_idx" ON "AuditLog"("userId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_entityType_entityId_idx" ON "AuditLog"("entityType", "entityId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "NotificationTemplate_code_key" ON "NotificationTemplate"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "SeatBlock_seatId_idx" ON "SeatBlock"("seatId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OperationalReport_reportType_dateFrom_idx" ON "OperationalReport"("reportType", "dateFrom");
|
|
|
|
-- 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 "PaymentRefund" ADD CONSTRAINT "PaymentRefund_paymentIntentId_fkey" FOREIGN KEY ("paymentIntentId") REFERENCES "PaymentIntent"("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;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "JourneySegment" ADD CONSTRAINT "JourneySegment_journeyId_fkey" FOREIGN KEY ("journeyId") REFERENCES "Journey"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "JourneySegment" ADD CONSTRAINT "JourneySegment_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RouteStop" ADD CONSTRAINT "RouteStop_routeId_fkey" FOREIGN KEY ("routeId") REFERENCES "Route"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RouteFareRule" ADD CONSTRAINT "RouteFareRule_routeId_fkey" FOREIGN KEY ("routeId") REFERENCES "Route"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Agent" ADD CONSTRAINT "Agent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AgentBooking" ADD CONSTRAINT "AgentBooking_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AgentBooking" ADD CONSTRAINT "AgentBooking_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AgentShift" ADD CONSTRAINT "AgentShift_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AgentCommission" ADD CONSTRAINT "AgentCommission_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BookingModification" ADD CONSTRAINT "BookingModification_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BookingCancellation" ADD CONSTRAINT "BookingCancellation_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "GateValidationLog" ADD CONSTRAINT "GateValidationLog_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "Ticket"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BaggageBooking" ADD CONSTRAINT "BaggageBooking_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AuditLog" ADD CONSTRAINT "AuditLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SeatBlock" ADD CONSTRAINT "SeatBlock_seatId_fkey" FOREIGN KEY ("seatId") REFERENCES "Seat"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|