feat: schema for logistics hotels + flight tracking
Adds 2 new models for grand-finale logistics PR 2: - Hotel: 1:1 with Program (one per edition); name + address + link + notes - FlightDetail: 1:1 with AttendingMember; arrival + departure datetimes, flight numbers, airports, admin status (PENDING/CONFIRMED), admin notes Migration is purely additive: no DROP/ALTER COLUMN/RENAME. FKs point FROM new tables TO existing tables (Program, AttendingMember) with ON DELETE CASCADE only firing on parent deletion.
This commit is contained in:
@@ -505,6 +505,7 @@ model Program {
|
||||
// Grand-finale logistics
|
||||
finalistSlotQuotas FinalistSlotQuota[]
|
||||
waitlistEntries WaitlistEntry[]
|
||||
hotel Hotel?
|
||||
|
||||
@@unique([name, year])
|
||||
@@index([status])
|
||||
@@ -2722,7 +2723,49 @@ model AttendingMember {
|
||||
|
||||
confirmation FinalistConfirmation @relation(fields: [confirmationId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
flightDetail FlightDetail?
|
||||
|
||||
@@unique([confirmationId, userId])
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Grand-finale logistics (PR 2: hotels + flight tracking)
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
enum FlightDetailStatus {
|
||||
PENDING // team submitted details, admin not yet reviewed
|
||||
CONFIRMED // admin verified booking
|
||||
}
|
||||
|
||||
model Hotel {
|
||||
id String @id @default(cuid())
|
||||
programId String @unique // 1:1 — one hotel per edition
|
||||
name String
|
||||
address String? @db.Text
|
||||
link String? // external URL to hotel page / booking confirmation
|
||||
notes String? @db.Text
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
program Program @relation(fields: [programId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model FlightDetail {
|
||||
id String @id @default(cuid())
|
||||
attendingMemberId String @unique // 1:1
|
||||
arrivalAt DateTime?
|
||||
arrivalFlightNumber String?
|
||||
arrivalAirport String?
|
||||
departureAt DateTime?
|
||||
departureFlightNumber String?
|
||||
departureAirport String?
|
||||
status FlightDetailStatus @default(PENDING)
|
||||
adminNotes String? @db.Text
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
attendingMember AttendingMember @relation(fields: [attendingMemberId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user