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]) }