mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
1769 lines
58 KiB
SQL
1769 lines
58 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 "PassengerCategory" AS ENUM ('ADULT', 'CHILD');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "IdDocumentType" AS ENUM ('NATIONAL_ID', 'PASSPORT', 'DRIVING_LICENSE', 'OTHER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "Currency" AS ENUM ('ETB', 'DJF', 'USD');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BookingStatus" AS ENUM ('DRAFT', 'PENDING_PAYMENT', 'CONFIRMED', 'CANCELLED', 'BOARDED', 'NO_SHOW', 'REFUNDED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ReturnLegStatus" AS ENUM ('NOT_APPLICABLE', 'BOTH_USED', 'OUTBOUND_ONLY', 'INBOUND_ONLY', 'NEITHER_USED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentRegion" AS ENUM ('ETHIOPIA', 'DJIBOUTI', 'INTERNATIONAL', 'GLOBAL');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentMethodType" AS ENUM ('TELEBIRR', 'CBE_BIRR', 'EBIRR', 'CARD', 'WALLET', 'WAAFI', 'DMONEY');
|
|
|
|
-- 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');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PackageStatus" AS ENUM ('DRAFT', 'ACTIVE', 'SOLD_OUT', 'EXPIRED', 'CANCELLED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CoachType" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'passenger',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "CoachType_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SeatClass" (
|
|
"id" TEXT NOT NULL,
|
|
"coachTypeId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"baseFareMinor" INTEGER NOT NULL DEFAULT 0,
|
|
"premiumMinor" INTEGER NOT NULL DEFAULT 0,
|
|
"insuranceFeeMinor" INTEGER NOT NULL DEFAULT 0,
|
|
"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")
|
|
);
|
|
|
|
-- 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,
|
|
"nationalityCode" TEXT,
|
|
"gender" TEXT,
|
|
"dateOfBirth" TIMESTAMP(3),
|
|
"passportNumber" TEXT,
|
|
"nationalId" TEXT,
|
|
"failedLoginAttempts" INTEGER NOT NULL DEFAULT 0,
|
|
"lockedUntil" TIMESTAMP(3),
|
|
"blockedUntil" TIMESTAMP(3),
|
|
"lastLoginAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"faydaVerified" BOOLEAN NOT NULL DEFAULT false,
|
|
"faydaVerifiedAt" TIMESTAMP(3),
|
|
"faydaSub" TEXT,
|
|
|
|
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,
|
|
"iamUserId" TEXT,
|
|
"defaultTravelerProfileId" TEXT,
|
|
"preferredLanguage" TEXT,
|
|
"blockedUntil" TIMESTAMP(3),
|
|
"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,
|
|
"gender" TEXT,
|
|
"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,
|
|
"countryCode" TEXT,
|
|
"sequence" INTEGER NOT NULL DEFAULT 0,
|
|
"isOperational" BOOLEAN NOT NULL DEFAULT true,
|
|
"lat" DECIMAL(9,6),
|
|
"lng" DECIMAL(9,6),
|
|
|
|
CONSTRAINT "Station_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Train" (
|
|
"id" TEXT NOT NULL,
|
|
"number" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"operatorId" TEXT NOT NULL DEFAULT 'op_edr',
|
|
"operatorName" TEXT,
|
|
"description" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Train_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TrainSchedule" (
|
|
"id" TEXT NOT NULL,
|
|
"trainId" TEXT NOT NULL,
|
|
"routeId" TEXT,
|
|
"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,
|
|
"reservedCount" INTEGER NOT NULL DEFAULT 0,
|
|
"onTimePercent" INTEGER NOT NULL DEFAULT 100,
|
|
"carbonRating" TEXT NOT NULL DEFAULT 'A',
|
|
"notes" TEXT,
|
|
|
|
CONSTRAINT "TrainSchedule_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TripStopTime" (
|
|
"id" TEXT NOT NULL,
|
|
"scheduleId" 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,
|
|
"scheduleId" 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,
|
|
"coachTypeId" TEXT NOT NULL,
|
|
"number" TEXT NOT NULL,
|
|
"arrangement" TEXT NOT NULL DEFAULT '2+2',
|
|
"capacity" INTEGER NOT NULL DEFAULT 0,
|
|
"sequence" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'ACTIVE',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Coach_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CoachAssignment" (
|
|
"id" TEXT NOT NULL,
|
|
"scheduleId" TEXT NOT NULL,
|
|
"coachId" TEXT NOT NULL,
|
|
"positionNumber" INTEGER NOT NULL,
|
|
"isOperational" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "CoachAssignment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Seat" (
|
|
"id" TEXT NOT NULL,
|
|
"coachId" TEXT NOT NULL,
|
|
"seatNumber" TEXT NOT NULL,
|
|
"row" INTEGER NOT NULL,
|
|
"col" TEXT NOT NULL,
|
|
"kind" "SeatKind" NOT NULL DEFAULT 'STANDARD',
|
|
"status" "SeatStatus" NOT NULL DEFAULT 'AVAILABLE',
|
|
"heldUntil" TIMESTAMP(3),
|
|
"isWindow" BOOLEAN NOT NULL DEFAULT false,
|
|
"isAisle" BOOLEAN NOT NULL DEFAULT false,
|
|
"bedPosition" TEXT,
|
|
"premiumFeeMinor" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "Seat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SeatHold" (
|
|
"id" TEXT NOT NULL,
|
|
"scheduleId" TEXT NOT NULL,
|
|
"seatIds" TEXT[],
|
|
"fareQuoteId" TEXT,
|
|
"passengerId" TEXT NOT NULL,
|
|
"createdBy" TEXT,
|
|
"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,
|
|
"nationality" TEXT,
|
|
"seatClassId" TEXT 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,
|
|
"scheduleId" TEXT NOT NULL,
|
|
"bookingType" TEXT NOT NULL DEFAULT 'ONE_WAY',
|
|
"status" "BookingStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"totalMinor" INTEGER NOT NULL,
|
|
"adultCount" INTEGER NOT NULL DEFAULT 1,
|
|
"childCount" INTEGER NOT NULL DEFAULT 0,
|
|
"displayCurrency" "Currency",
|
|
"displayTotalMinor" INTEGER,
|
|
"returnScheduleId" TEXT,
|
|
"returnOriginStationId" TEXT,
|
|
"returnDestinationStationId" TEXT,
|
|
"returnHoldId" TEXT,
|
|
"returnSeatClassId" TEXT,
|
|
"returnLegStatus" "ReturnLegStatus" NOT NULL DEFAULT 'NOT_APPLICABLE',
|
|
"leg2ScheduleId" TEXT,
|
|
"leg2OriginStationId" TEXT,
|
|
"leg2DestinationStationId" TEXT,
|
|
"leg2SeatClassId" TEXT,
|
|
"returnLeg2ScheduleId" TEXT,
|
|
"returnLeg2OriginStationId" TEXT,
|
|
"returnLeg2DestStationId" TEXT,
|
|
"returnLeg2SeatClassId" TEXT,
|
|
"outboundBoardedAt" TIMESTAMP(3),
|
|
"returnBoardedAt" TIMESTAMP(3),
|
|
"contactEmail" TEXT,
|
|
"contactPhone" TEXT,
|
|
"userAgent" TEXT,
|
|
"source" TEXT NOT NULL DEFAULT 'WEB',
|
|
"promoCode" TEXT,
|
|
"paidAt" TIMESTAMP(3),
|
|
"paymentReminderSentAt" TIMESTAMP(3),
|
|
"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,
|
|
"leg" INTEGER NOT NULL DEFAULT 1,
|
|
"scheduleId" TEXT,
|
|
"passengerName" TEXT NOT NULL,
|
|
"dateOfBirth" TIMESTAMP(3),
|
|
"passengerCategory" "PassengerCategory" NOT NULL DEFAULT 'ADULT',
|
|
"idDocumentType" "IdDocumentType",
|
|
"idDocumentNumber" TEXT,
|
|
"passportNumber" TEXT,
|
|
"passportCountry" TEXT,
|
|
"verifaydaVerified" BOOLEAN NOT NULL DEFAULT false,
|
|
"verifaydaData" JSONB,
|
|
"faydaVerifiedAt" TIMESTAMP(3),
|
|
"faydaSub" TEXT,
|
|
"faydaVerifiedName" TEXT,
|
|
"seatLabelSnapshot" TEXT,
|
|
"fareMinor" INTEGER,
|
|
"displayCurrency" "Currency",
|
|
"displayFareMinor" INTEGER,
|
|
|
|
CONSTRAINT "BookingSeat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PaymentMethod" (
|
|
"id" TEXT NOT NULL,
|
|
"type" "PaymentMethodType" NOT NULL,
|
|
"displayName" TEXT NOT NULL,
|
|
"region" "PaymentRegion" NOT NULL DEFAULT 'GLOBAL',
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"providerId" TEXT,
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
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,
|
|
"provider" TEXT,
|
|
"status" "PaymentIntentStatus" NOT NULL DEFAULT 'REQUIRES_ACTION',
|
|
"providerRef" TEXT,
|
|
"clientAction" JSONB,
|
|
"merchantOrderId" TEXT,
|
|
"providerOrderId" TEXT,
|
|
"providerTxnId" TEXT,
|
|
"rawInitiation" JSONB,
|
|
"paidAt" TIMESTAMP(3),
|
|
"refundedAt" TIMESTAMP(3),
|
|
"captureMethod" TEXT,
|
|
"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,
|
|
"passengerName" TEXT NOT NULL,
|
|
"seatId" TEXT NOT NULL,
|
|
"leg" INTEGER NOT NULL DEFAULT 1,
|
|
"scheduleId" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'ACTIVE',
|
|
"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,
|
|
"boardedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "Ticket_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LoyaltyAccount" (
|
|
"id" TEXT NOT NULL,
|
|
"passengerId" TEXT NOT NULL,
|
|
"pointsBalance" INTEGER NOT NULL DEFAULT 0,
|
|
"lifetimePoints" INTEGER NOT NULL DEFAULT 0,
|
|
"tier" "LoyaltyTier" NOT NULL DEFAULT 'BRONZE',
|
|
"tierUpdatedAt" TIMESTAMP(3),
|
|
"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,
|
|
"status" TEXT NOT NULL DEFAULT 'ACTIVE',
|
|
"holdMinor" 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,
|
|
"confidence" INTEGER,
|
|
"observedAt" TIMESTAMP(3),
|
|
"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,
|
|
"scheduleId" 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,
|
|
"availableUntil" TIMESTAMP(3),
|
|
|
|
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',
|
|
"specialInstructions" TEXT,
|
|
"estimatedReadyAt" TIMESTAMP(3),
|
|
"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,
|
|
"unitPriceMinor" INTEGER,
|
|
"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,
|
|
"assignedAgentId" TEXT,
|
|
"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,
|
|
"attachments" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SupportMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "UserPreferences" (
|
|
"id" TEXT NOT NULL,
|
|
"iamUserId" 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,
|
|
"iamUserId" 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,
|
|
"bookingId" TEXT,
|
|
"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,
|
|
"scheduleId" 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" DOUBLE PRECISION,
|
|
"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,
|
|
"seatClassId" TEXT NOT NULL,
|
|
"passengerCategory" "PassengerCategory" NOT NULL DEFAULT 'ADULT',
|
|
"baseFareMinor" INTEGER NOT NULL,
|
|
"discountPercent" INTEGER,
|
|
"taxPercent" INTEGER,
|
|
"surchargeMinor" 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 "SegmentFareRule" (
|
|
"id" TEXT NOT NULL,
|
|
"routeId" TEXT NOT NULL,
|
|
"originStopSequence" INTEGER NOT NULL,
|
|
"destinationStopSequence" INTEGER NOT NULL,
|
|
"seatClassId" TEXT NOT NULL,
|
|
"baseFareMinor" INTEGER NOT NULL,
|
|
"nationality" TEXT,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"validFrom" TIMESTAMP(3) NOT NULL,
|
|
"validUntil" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SegmentFareRule_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Agent" (
|
|
"id" TEXT NOT NULL,
|
|
"iamUserId" TEXT,
|
|
"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,
|
|
"leg" 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,
|
|
"seatClassId" TEXT 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 "ExcessBaggageCharge" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"agentId" TEXT NOT NULL,
|
|
"excessWeightKg" INTEGER NOT NULL,
|
|
"feePerKgMinor" INTEGER NOT NULL,
|
|
"totalMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"paymentToken" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"paidAt" TIMESTAMP(3),
|
|
"waivedBy" TEXT,
|
|
"waivedReason" TEXT,
|
|
"contactPhone" TEXT,
|
|
"contactEmail" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "ExcessBaggageCharge_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuditLog" (
|
|
"id" TEXT NOT NULL,
|
|
"iamUserId" 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")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FraudRule" (
|
|
"id" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"threshold" DOUBLE PRECISION NOT NULL,
|
|
"config" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "FraudRule_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FraudAlert" (
|
|
"id" TEXT NOT NULL,
|
|
"iamUserId" TEXT NOT NULL,
|
|
"eventType" TEXT NOT NULL,
|
|
"triggeredRules" TEXT[],
|
|
"context" JSONB NOT NULL,
|
|
"severity" TEXT NOT NULL DEFAULT 'MEDIUM',
|
|
"acknowledged" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "FraudAlert_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CurrencyExchangeRate" (
|
|
"id" TEXT NOT NULL,
|
|
"fromCurrency" "Currency" NOT NULL,
|
|
"toCurrency" "Currency" NOT NULL,
|
|
"rate" DECIMAL(18,6) NOT NULL,
|
|
"effectiveDate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"source" TEXT NOT NULL DEFAULT 'MANUAL',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "CurrencyExchangeRate_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "VerifaydaVerification" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT,
|
|
"nationalId" TEXT NOT NULL,
|
|
"requestPayload" JSONB NOT NULL,
|
|
"responsePayload" JSONB,
|
|
"verified" BOOLEAN NOT NULL DEFAULT false,
|
|
"failureReason" TEXT,
|
|
"verifiedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "VerifaydaVerification_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SavedPassengerProfile" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"deviceId" TEXT,
|
|
"passengerName" TEXT NOT NULL,
|
|
"dateOfBirth" TIMESTAMP(3) NOT NULL,
|
|
"idDocumentType" "IdDocumentType" NOT NULL,
|
|
"passportNumber" TEXT,
|
|
"passportCountry" TEXT,
|
|
"nationality" TEXT,
|
|
"phone" TEXT,
|
|
"email" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SavedPassengerProfile_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FaydaVerificationSession" (
|
|
"id" TEXT NOT NULL,
|
|
"state" TEXT NOT NULL,
|
|
"codeVerifier" TEXT NOT NULL,
|
|
"purpose" TEXT NOT NULL DEFAULT 'VERIFY',
|
|
"platform" TEXT NOT NULL DEFAULT 'WEB',
|
|
"saveToAccount" BOOLEAN NOT NULL DEFAULT false,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"errorCode" TEXT,
|
|
"errorDescription" TEXT,
|
|
"authCode" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"completedAt" TIMESTAMP(3),
|
|
"iamUserId" TEXT,
|
|
"bookingId" TEXT,
|
|
|
|
CONSTRAINT "FaydaVerificationSession_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SystemConfig" (
|
|
"id" TEXT NOT NULL,
|
|
"key" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SystemConfig_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TravelPackage" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"status" "PackageStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"outboundScheduleId" TEXT NOT NULL,
|
|
"returnScheduleId" TEXT NOT NULL,
|
|
"originStationId" TEXT NOT NULL,
|
|
"destinationStationId" TEXT NOT NULL,
|
|
"boardingTime" TIMESTAMP(3) NOT NULL,
|
|
"departureTime" TIMESTAMP(3) NOT NULL,
|
|
"arrivalTime" TIMESTAMP(3) NOT NULL,
|
|
"totalCapacity" INTEGER NOT NULL,
|
|
"bookedCount" INTEGER NOT NULL DEFAULT 0,
|
|
"includedServices" JSONB NOT NULL,
|
|
"coachConfiguration" TEXT,
|
|
"busTransferIncluded" BOOLEAN NOT NULL DEFAULT false,
|
|
"busTransferRoute" TEXT,
|
|
"validFrom" TIMESTAMP(3) NOT NULL,
|
|
"validUntil" TIMESTAMP(3) NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "TravelPackage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PackagePriceTier" (
|
|
"id" TEXT NOT NULL,
|
|
"packageId" TEXT NOT NULL,
|
|
"seatType" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"priceMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"availableSeats" INTEGER NOT NULL DEFAULT 0,
|
|
"bookedSeats" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "PackagePriceTier_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PackageBooking" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingRef" TEXT NOT NULL,
|
|
"packageId" TEXT NOT NULL,
|
|
"priceTierId" TEXT NOT NULL,
|
|
"passengerId" TEXT,
|
|
"contactEmail" TEXT,
|
|
"contactPhone" TEXT,
|
|
"status" "BookingStatus" NOT NULL DEFAULT 'PENDING_PAYMENT',
|
|
"passengerCount" INTEGER NOT NULL DEFAULT 1,
|
|
"totalMinor" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'ETB',
|
|
"displayCurrency" "Currency",
|
|
"displayTotalMinor" INTEGER,
|
|
"promoCode" TEXT,
|
|
"source" TEXT NOT NULL DEFAULT 'WEB',
|
|
"paidAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PackageBooking_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PackageBookingPassenger" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"passengerName" TEXT NOT NULL,
|
|
"dateOfBirth" TIMESTAMP(3),
|
|
"idDocumentType" "IdDocumentType",
|
|
"idDocumentNumber" TEXT,
|
|
"passportNumber" TEXT,
|
|
"passportCountry" TEXT,
|
|
"seatLabel" TEXT,
|
|
|
|
CONSTRAINT "PackageBookingPassenger_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PackagePaymentIntent" (
|
|
"id" TEXT NOT NULL,
|
|
"packageBookingId" 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,
|
|
"paidAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PackagePaymentIntent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PackageInquiry" (
|
|
"id" TEXT NOT NULL,
|
|
"packageId" TEXT NOT NULL,
|
|
"priceTierId" TEXT,
|
|
"travelerCount" INTEGER NOT NULL,
|
|
"contactName" TEXT NOT NULL,
|
|
"contactEmail" TEXT,
|
|
"contactPhone" TEXT,
|
|
"notes" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'NEW',
|
|
"enquiredAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PackageInquiry_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "SeatClass_coachTypeId_idx" ON "SeatClass"("coachTypeId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "SeatClass_coachTypeId_name_key" ON "SeatClass"("coachTypeId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_phone_key" ON "User"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_faydaSub_key" ON "User"("faydaSub");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Session_token_key" ON "Session"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Passenger_userId_key" ON "Passenger"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Passenger_iamUserId_key" ON "Passenger"("iamUserId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Passenger_userId_idx" ON "Passenger"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Passenger_iamUserId_idx" ON "Passenger"("iamUserId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Station_code_key" ON "Station"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Station_city_countryCode_idx" ON "Station"("city", "countryCode");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Station_sequence_idx" ON "Station"("sequence");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Train_number_key" ON "Train"("number");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TrainSchedule_departureAt_originStationId_idx" ON "TrainSchedule"("departureAt", "originStationId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TripStopTime_scheduleId_sequence_key" ON "TripStopTime"("scheduleId", "sequence");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TripLiveStatus_scheduleId_key" ON "TripLiveStatus"("scheduleId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Coach_number_key" ON "Coach"("number");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Coach_coachTypeId_idx" ON "Coach"("coachTypeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Coach_sequence_idx" ON "Coach"("sequence");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CoachAssignment_scheduleId_idx" ON "CoachAssignment"("scheduleId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CoachAssignment_scheduleId_positionNumber_key" ON "CoachAssignment"("scheduleId", "positionNumber");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Seat_coachId_idx" ON "Seat"("coachId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Seat_coachId_seatNumber_key" ON "Seat"("coachId", "seatNumber");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Seat_coachId_row_col_key" ON "Seat"("coachId", "row", "col");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "SeatHold_expiresAt_idx" ON "SeatHold"("expiresAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Booking_bookingRef_key" ON "Booking"("bookingRef");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Booking_passengerId_status_idx" ON "Booking"("passengerId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Booking_bookingType_idx" ON "Booking"("bookingType");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PaymentMethod_type_key" ON "PaymentMethod"("type");
|
|
|
|
-- 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 INDEX "Ticket_bookingId_idx" ON "Ticket"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_seatId_idx" ON "Ticket"("seatId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "LoyaltyAccount_passengerId_key" ON "LoyaltyAccount"("passengerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "WalletAccount_passengerId_key" ON "WalletAccount"("passengerId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "WalletAccount_passengerId_idx" ON "WalletAccount"("passengerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Promotion_code_key" ON "Promotion"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "UserPreferences_iamUserId_key" ON "UserPreferences"("iamUserId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Journey_bookingId_key" ON "Journey"("bookingId");
|
|
|
|
-- 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_seatClassId_idx" ON "RouteFareRule"("routeId", "seatClassId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "SegmentFareRule_routeId_seatClassId_idx" ON "SegmentFareRule"("routeId", "seatClassId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "SegmentFareRule_routeId_originStopSequence_destinationStopS_key" ON "SegmentFareRule"("routeId", "originStopSequence", "destinationStopSequence", "seatClassId", "nationality");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Agent_iamUserId_key" ON "Agent"("iamUserId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Agent_agentCode_key" ON "Agent"("agentCode");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Agent_iamUserId_idx" ON "Agent"("iamUserId");
|
|
|
|
-- 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 UNIQUE INDEX "ExcessBaggageCharge_paymentToken_key" ON "ExcessBaggageCharge"("paymentToken");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ExcessBaggageCharge_bookingId_idx" ON "ExcessBaggageCharge"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ExcessBaggageCharge_paymentToken_idx" ON "ExcessBaggageCharge"("paymentToken");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ExcessBaggageCharge_status_idx" ON "ExcessBaggageCharge"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_iamUserId_createdAt_idx" ON "AuditLog"("iamUserId", "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");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "FraudRule_type_key" ON "FraudRule"("type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FraudAlert_iamUserId_createdAt_idx" ON "FraudAlert"("iamUserId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FraudAlert_acknowledged_idx" ON "FraudAlert"("acknowledged");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CurrencyExchangeRate_fromCurrency_toCurrency_idx" ON "CurrencyExchangeRate"("fromCurrency", "toCurrency");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CurrencyExchangeRate_fromCurrency_toCurrency_effectiveDate_key" ON "CurrencyExchangeRate"("fromCurrency", "toCurrency", "effectiveDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "VerifaydaVerification_nationalId_idx" ON "VerifaydaVerification"("nationalId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "VerifaydaVerification_bookingId_idx" ON "VerifaydaVerification"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "SavedPassengerProfile_userId_idx" ON "SavedPassengerProfile"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "SavedPassengerProfile_deviceId_idx" ON "SavedPassengerProfile"("deviceId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "FaydaVerificationSession_state_key" ON "FaydaVerificationSession"("state");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FaydaVerificationSession_iamUserId_idx" ON "FaydaVerificationSession"("iamUserId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FaydaVerificationSession_bookingId_idx" ON "FaydaVerificationSession"("bookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FaydaVerificationSession_state_idx" ON "FaydaVerificationSession"("state");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FaydaVerificationSession_expiresAt_idx" ON "FaydaVerificationSession"("expiresAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "SystemConfig_key_key" ON "SystemConfig"("key");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TravelPackage_code_key" ON "TravelPackage"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TravelPackage_status_validFrom_idx" ON "TravelPackage"("status", "validFrom");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PackagePriceTier_packageId_seatType_key" ON "PackagePriceTier"("packageId", "seatType");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PackageBooking_bookingRef_key" ON "PackageBooking"("bookingRef");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "PackageBooking_packageId_status_idx" ON "PackageBooking"("packageId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PackagePaymentIntent_packageBookingId_key" ON "PackagePaymentIntent"("packageBookingId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "PackageInquiry_packageId_idx" ON "PackageInquiry"("packageId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SeatClass" ADD CONSTRAINT "SeatClass_coachTypeId_fkey" FOREIGN KEY ("coachTypeId") REFERENCES "CoachType"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- 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 SET NULL 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 "TrainSchedule" ADD CONSTRAINT "TrainSchedule_trainId_fkey" FOREIGN KEY ("trainId") REFERENCES "Train"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TrainSchedule" ADD CONSTRAINT "TrainSchedule_routeId_fkey" FOREIGN KEY ("routeId") REFERENCES "Route"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TrainSchedule" ADD CONSTRAINT "TrainSchedule_originStationId_fkey" FOREIGN KEY ("originStationId") REFERENCES "Station"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TrainSchedule" ADD CONSTRAINT "TrainSchedule_destinationStationId_fkey" FOREIGN KEY ("destinationStationId") REFERENCES "Station"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TripStopTime" ADD CONSTRAINT "TripStopTime_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "TrainSchedule"("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_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "TrainSchedule"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Coach" ADD CONSTRAINT "Coach_coachTypeId_fkey" FOREIGN KEY ("coachTypeId") REFERENCES "CoachType"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CoachAssignment" ADD CONSTRAINT "CoachAssignment_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "TrainSchedule"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CoachAssignment" ADD CONSTRAINT "CoachAssignment_coachId_fkey" FOREIGN KEY ("coachId") REFERENCES "Coach"("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 "FareRule" ADD CONSTRAINT "FareRule_seatClassId_fkey" FOREIGN KEY ("seatClassId") REFERENCES "SeatClass"("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_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "TrainSchedule"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Booking" ADD CONSTRAINT "Booking_returnScheduleId_fkey" FOREIGN KEY ("returnScheduleId") REFERENCES "TrainSchedule"("id") ON DELETE SET NULL 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 "Ticket" ADD CONSTRAINT "Ticket_seatId_fkey" FOREIGN KEY ("seatId") REFERENCES "Seat"("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_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "TrainSchedule"("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 "SavedRoute" ADD CONSTRAINT "SavedRoute_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Journey" ADD CONSTRAINT "Journey_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE SET NULL 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_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "TrainSchedule"("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 "RouteFareRule" ADD CONSTRAINT "RouteFareRule_seatClassId_fkey" FOREIGN KEY ("seatClassId") REFERENCES "SeatClass"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SegmentFareRule" ADD CONSTRAINT "SegmentFareRule_routeId_fkey" FOREIGN KEY ("routeId") REFERENCES "Route"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SegmentFareRule" ADD CONSTRAINT "SegmentFareRule_seatClassId_fkey" FOREIGN KEY ("seatClassId") REFERENCES "SeatClass"("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 "ExcessBaggageCharge" ADD CONSTRAINT "ExcessBaggageCharge_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SeatBlock" ADD CONSTRAINT "SeatBlock_seatId_fkey" FOREIGN KEY ("seatId") REFERENCES "Seat"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TravelPackage" ADD CONSTRAINT "TravelPackage_outboundScheduleId_fkey" FOREIGN KEY ("outboundScheduleId") REFERENCES "TrainSchedule"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TravelPackage" ADD CONSTRAINT "TravelPackage_returnScheduleId_fkey" FOREIGN KEY ("returnScheduleId") REFERENCES "TrainSchedule"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackagePriceTier" ADD CONSTRAINT "PackagePriceTier_packageId_fkey" FOREIGN KEY ("packageId") REFERENCES "TravelPackage"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackageBooking" ADD CONSTRAINT "PackageBooking_packageId_fkey" FOREIGN KEY ("packageId") REFERENCES "TravelPackage"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackageBooking" ADD CONSTRAINT "PackageBooking_priceTierId_fkey" FOREIGN KEY ("priceTierId") REFERENCES "PackagePriceTier"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackageBooking" ADD CONSTRAINT "PackageBooking_passengerId_fkey" FOREIGN KEY ("passengerId") REFERENCES "Passenger"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackageBookingPassenger" ADD CONSTRAINT "PackageBookingPassenger_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "PackageBooking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackagePaymentIntent" ADD CONSTRAINT "PackagePaymentIntent_packageBookingId_fkey" FOREIGN KEY ("packageBookingId") REFERENCES "PackageBooking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackageInquiry" ADD CONSTRAINT "PackageInquiry_packageId_fkey" FOREIGN KEY ("packageId") REFERENCES "TravelPackage"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PackageInquiry" ADD CONSTRAINT "PackageInquiry_priceTierId_fkey" FOREIGN KEY ("priceTierId") REFERENCES "PackagePriceTier"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|