142 lines
3.6 KiB
Plaintext
142 lines
3.6 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
password String? // hashed password
|
|
name String?
|
|
username String @unique
|
|
role Role @default(GUEST)
|
|
events Event[] @relation("EventCreator")
|
|
createdAt DateTime @default(now())
|
|
|
|
FileUpload FileUpload[]
|
|
}
|
|
|
|
enum Role {
|
|
COUPLE
|
|
PLANNER
|
|
GUEST
|
|
}
|
|
|
|
model Event {
|
|
id String @id @default(cuid())
|
|
name String
|
|
date DateTime?
|
|
location Location? @relation(fields: [locationid], references: [id])
|
|
locationid String?
|
|
creator User @relation("EventCreator", fields: [creatorId], references: [id])
|
|
creatorId String
|
|
guests Guest[]
|
|
eventGuests EventGuest[]
|
|
notes String?
|
|
todos EventTodo[]
|
|
createdAt DateTime @default(now())
|
|
|
|
FileUpload FileUpload[]
|
|
}
|
|
|
|
model Location {
|
|
id String @id @default(cuid())
|
|
name String
|
|
address String
|
|
city String
|
|
state String
|
|
postalCode String
|
|
country String @default("United States")
|
|
phone String?
|
|
email String?
|
|
|
|
Event Event[]
|
|
}
|
|
|
|
model Guest {
|
|
id String @id @default(cuid())
|
|
event Event @relation(fields: [eventId], references: [id])
|
|
eventId String
|
|
name String
|
|
email String?
|
|
rsvp RsvpStatus @default(PENDING)
|
|
}
|
|
|
|
enum RsvpStatus {
|
|
YES
|
|
NO
|
|
PENDING
|
|
}
|
|
|
|
model InviteToken {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
role Role
|
|
token String @unique
|
|
eventId String?
|
|
expiresAt DateTime
|
|
accepted Boolean @default(false)
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model GuestBookEntry {
|
|
id String @id @default(cuid())
|
|
fName String
|
|
lName String
|
|
email String?
|
|
phone String?
|
|
address String?
|
|
notes String?
|
|
side String
|
|
congratulated Boolean?
|
|
eventGuests EventGuest[]
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model EventGuest {
|
|
id String @id @default(cuid())
|
|
event Event @relation(fields: [eventId], references: [id])
|
|
eventId String
|
|
guestBookEntry GuestBookEntry @relation(fields: [guestBookEntryId], references: [id])
|
|
guestBookEntryId String
|
|
rsvp RsvpStatus @default(PENDING)
|
|
createdAt DateTime @default(now())
|
|
|
|
@@unique([eventId, guestBookEntryId])
|
|
}
|
|
|
|
model EventTodo {
|
|
id String @id @default(cuid())
|
|
name String
|
|
complete Boolean @default(false)
|
|
dueDate DateTime?
|
|
notes String?
|
|
event Event @relation(fields: [eventId], references: [id])
|
|
eventId String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
// Optional for future extensibility
|
|
// category String?
|
|
// assignedTo String? // could link to User in future
|
|
}
|
|
|
|
model FileUpload {
|
|
id String @id @default(cuid())
|
|
filepath String
|
|
filename String
|
|
filetype String
|
|
filesize Int //in bytes
|
|
uploadedAt DateTime @default(now())
|
|
uploadedBy User @relation(fields: [uploadedById], references: [id])
|
|
uploadedById String
|
|
event Event? @relation(fields: [eventId], references: [id])
|
|
eventId String?
|
|
|
|
@@unique([filename, uploadedById])
|
|
}
|