datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model User { id String @id @default(cuid()) email String @unique username String @unique passwordhash String servers Server[] messages Message[] session Session[] channels Channel[] roles Role[] createdAt DateTime @default(now()) Reaction Reaction? @relation(fields: [reactionId], references: [id]) reactionId String? } model Server { id String @id @default(cuid()) name String participants User[] channels Channel[] roles Role[] InviteCode InviteCode[] createdAt DateTime @default(now()) } model Role { id String @id @default(cuid()) name String administrator Boolean @default(false) owner Boolean @default(false) users User[] server Server? @relation(fields: [serverId], references: [id]) serverId String? } model Channel { id String @id @default(cuid()) name String server Server? @relation(fields: [serverId], references: [id]) serverId String? messages Message[] DM Boolean @default(false) dmParticipants User[] } model Message { id String @id @default(cuid()) body String channel Channel @relation(fields: [channelId], references: [id]) creator User @relation(fields: [userId], references: [id]) userId String channelId String invites InviteCode[] reactions Reaction[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model InviteCode { id String @id @default(cuid()) server Server @relation(fields: [serverId], references: [id]) expires Boolean @default(false) expiryDate DateTime? maxUses Int @default(0) serverId String message Message? @relation(fields: [messageId], references: [id]) messageId String? } model Session { id String @id @default(cuid()) token String @unique userId String user User @relation(fields: [userId], references: [id]) } model ExpiredSession { id String @id @default(cuid()) token String } model Reaction { id String @id @default(cuid()) emoji Json count Int users User[] Message Message? @relation(fields: [messageId], references: [id]) messageId String? }