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