enum DayOfWeek { MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY } enum CourtBookingStatus { CONFIRMED CANCELLED COMPLETED } 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") }