datasource db { provider = "sqlite" } generator client { provider = "prisma-client" output = "./generated-client" } model User { username String @id @unique password String displayName String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt Session Session[] UserPreferences UserPreferences? Messages Message[] Channels Channel[] } model Session { id String @id userId String expiresAt DateTime user User @relation(references: [username], fields: [userId], onDelete: Cascade) } model UserPreferences { username String @id @unique toggleInputHotkey String? @default("") toggleOutputHotkey String? @default("") user User @relation(references: [username], fields: [username], onDelete: Cascade) } model Attachment { id String @id @default(uuid()) name String mimetype String size Int createdAt DateTime @default(now()) message MessageAttachment[] } model Message { id String @id @default(uuid()) text String senderUsername String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt sender User? @relation(references: [username], fields: [senderUsername], onDelete: SetNull) attachments MessageAttachment[] } model MessageAttachment { messageId String attachmentId String message Message @relation(fields: [messageId], references: [id]) attachment Attachment @relation(fields: [attachmentId], references: [id]) @@id([messageId, attachmentId]) } model Channel { id String @id @default(uuid()) ownerUsername String? name String persistent Boolean owner User? @relation(references: [username], fields: [ownerUsername], onDelete: Cascade) }