96 lines
3.4 KiB
Plaintext
96 lines
3.4 KiB
Plaintext
enum DayOfWeek {
|
|
MONDAY
|
|
TUESDAY
|
|
WEDNESDAY
|
|
THURSDAY
|
|
FRIDAY
|
|
SATURDAY
|
|
SUNDAY
|
|
}
|
|
|
|
enum CourtBookingStatus {
|
|
CONFIRMED
|
|
CANCELLED
|
|
}
|
|
|
|
model Sport {
|
|
id String @id @db.Uuid
|
|
name String @unique
|
|
slug String @unique
|
|
isActive Boolean @default(true) @map("is_active")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
courts Court[]
|
|
|
|
@@map("sports")
|
|
}
|
|
|
|
model Court {
|
|
id String @id @db.Uuid
|
|
complexId String @map("complex_id") @db.Uuid
|
|
sportId String @map("sport_id") @db.Uuid
|
|
name String
|
|
slotDurationMinutes Int @map("slot_duration_minutes")
|
|
basePrice Decimal @map("base_price") @db.Decimal(19, 2)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)
|
|
sport Sport @relation(fields: [sportId], references: [id])
|
|
availabilities CourtAvailability[]
|
|
priceRules CourtPriceRule[]
|
|
bookings CourtBooking[]
|
|
|
|
@@index([complexId])
|
|
@@index([sportId])
|
|
@@map("courts")
|
|
}
|
|
|
|
model CourtAvailability {
|
|
id String @id @db.Uuid
|
|
courtId String @map("court_id") @db.Uuid
|
|
dayOfWeek DayOfWeek @map("day_of_week")
|
|
startTime String @map("start_time") @db.VarChar(5)
|
|
endTime String @map("end_time") @db.VarChar(5)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([courtId, dayOfWeek])
|
|
@@map("court_availabilities")
|
|
}
|
|
|
|
model CourtPriceRule {
|
|
id String @id @db.Uuid
|
|
courtId String @map("court_id") @db.Uuid
|
|
dayOfWeek DayOfWeek? @map("day_of_week")
|
|
startTime String? @map("start_time") @db.VarChar(5)
|
|
endTime String? @map("end_time") @db.VarChar(5)
|
|
price Decimal @db.Decimal(19, 2)
|
|
isActive Boolean @default(true) @map("is_active")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([courtId, isActive])
|
|
@@map("court_price_rules")
|
|
}
|
|
|
|
model CourtBooking {
|
|
id String @id @db.Uuid
|
|
bookingCode String @unique @map("booking_code") @db.VarChar(8)
|
|
courtId String @map("court_id") @db.Uuid
|
|
bookingDate DateTime @map("booking_date") @db.Date
|
|
startTime String @map("start_time") @db.VarChar(5)
|
|
endTime String @map("end_time") @db.VarChar(5)
|
|
customerName String @map("customer_name") @db.VarChar(120)
|
|
customerPhone String @map("customer_phone") @db.VarChar(30)
|
|
status CourtBookingStatus @default(CONFIRMED)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([courtId, bookingDate, startTime])
|
|
@@index([courtId, bookingDate])
|
|
@@index([bookingDate])
|
|
@@map("court_bookings")
|
|
}
|