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[] } model Server { id String @id @default(cuid()) name String participants User[] channels Channel[] roles Role[] InviteCode InviteCode[] } 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[] } 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 userId String user User @relation(fields: [userId], references: [id]) } model ExpiredSession { id String @id @default(cuid()) token String }