Files
harats-booking/server/prisma/schema.prisma
T
2026-06-08 14:36:51 +07:00

156 lines
4.3 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum Role {
USER
ADMIN
}
enum ReservationStatus {
PENDING
CONFIRMED
CANCELLED
COMPLETED
}
enum DishAvailability {
AVAILABLE
STOPPED
}
model User {
id Int @id @default(autoincrement())
phone String @unique @db.VarChar(20)
password String @db.VarChar(255)
name String @db.VarChar(100)
surname String? @db.VarChar(100)
email String? @db.VarChar(255)
role Role @default(USER)
cardToken String? @db.VarChar(255)
cardLastFour String? @db.VarChar(4)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
reservations Reservation[]
}
model Pub {
id Int @id @default(autoincrement())
address String @unique @db.VarChar(255)
phone String @db.VarChar(20)
name String @db.VarChar(100)
createdAt DateTime @default(now())
tables Table[]
menus Menu[]
lunchMenus LunchMenu[]
billboards Billboard[]
reservations Reservation[]
}
model Table {
id Int @id @default(autoincrement())
pubId Int
number Int
capacity Int
posX Float
posY Float
width Float @default(60)
height Float @default(60)
shape String @default("rect") @db.VarChar(20)
zone String? @db.VarChar(50)
pub Pub @relation(fields: [pubId], references: [id])
reservations Reservation[]
@@unique([pubId, number])
}
model Category {
id Int @id @default(autoincrement())
title String @unique @db.VarChar(100)
dishes Dish[]
}
model Dish {
id Int @id @default(autoincrement())
title String @db.VarChar(100)
description String? @db.Text
categoryId Int
grams Int?
price Decimal @db.Decimal(10, 2)
photo String? @db.VarChar(255)
availability DishAvailability @default(AVAILABLE)
category Category @relation(fields: [categoryId], references: [id])
menus Menu[]
lunchMenus LunchMenu[]
orderItems ReservationDish[]
}
model Menu {
id Int @id @default(autoincrement())
pubId Int
dishId Int
pub Pub @relation(fields: [pubId], references: [id])
dish Dish @relation(fields: [dishId], references: [id])
@@unique([pubId, dishId])
}
model LunchMenu {
id Int @id @default(autoincrement())
pubId Int
dishId Int
weekStart DateTime @db.Date
weekEnd DateTime @db.Date
pub Pub @relation(fields: [pubId], references: [id])
dish Dish @relation(fields: [dishId], references: [id])
@@unique([pubId, dishId, weekStart])
}
model Billboard {
id Int @id @default(autoincrement())
title String @db.VarChar(200)
artist String @db.VarChar(100)
pubId Int
datetime DateTime
poster String? @db.VarChar(255)
pub Pub @relation(fields: [pubId], references: [id])
}
model Reservation {
id Int @id @default(autoincrement())
userId Int
pubId Int
tableId Int
date DateTime @db.Date
time DateTime @db.Time()
numPeople Int
status ReservationStatus @default(PENDING)
totalCost Decimal? @db.Decimal(10, 2)
prepaid Decimal? @db.Decimal(10, 2)
paymentId String? @db.VarChar(255)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
pub Pub @relation(fields: [pubId], references: [id])
table Table @relation(fields: [tableId], references: [id])
dishes ReservationDish[]
}
model ReservationDish {
id Int @id @default(autoincrement())
reservationId Int
dishId Int
quantity Int @default(1)
priceAtOrder Decimal @db.Decimal(10, 2)
reservation Reservation @relation(fields: [reservationId], references: [id], onDelete: Cascade)
dish Dish @relation(fields: [dishId], references: [id])
@@unique([reservationId, dishId])
}