156 lines
4.3 KiB
Plaintext
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])
|
|
}
|