generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url = env("DATABASE_URL") relationMode = "prisma" } model Profile{ id String @id @default(uuid()) userId String @unique name String imageUrl String @db.Text email String @db.Text servers Server[] members Member[] channels Channel[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Server{ id String @id @default(uuid()) name String imageUrl String @db.Text inviteCode String @unique profileId String profile Profile @relation(fields: [profileId], references: [id], onDelete: Cascade) members Member[] channels Channel[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([profileId]) } enum MemberRole{ ADMIN MODERATOR GUEST } model Member{ id String @id @default(uuid()) role MemberRole @default(GUEST) profileId String profile Profile @relation(fields: [profileId], references: [id], onDelete: Cascade) serverId String server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) messages Message[] directMessages DirectMessage[] conversationsInitiated Conversation[] @relation("MemberOne") conversationsReceived Conversation[] @relation("MemberTwo") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([profileId]) @@index([serverId]) } enum ChannelType{ TEXT AUDIO VIDEO } model Channel{ id String @id @default(uuid()) name String type ChannelType @default(TEXT) profileId String profile Profile @relation(fields: [profileId], references: [id], onDelete: Cascade) serverId String server Server @relation(fields: [serverId], references: [id], onDelete: Cascade) messages Message[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([profileId]) @@index([serverId]) } model Message{ id String @id @default(uuid()) content String @db.Text fileUrl String? @db.Text memberId String member Member @relation(fields: [memberId], references: [id], onDelete: Cascade) channelId String channel Channel @relation(fields: [channelId], references: [id], onDelete: Cascade) deleted Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([channelId]) @@index([memberId]) } model Conversation{ id String @id @default(uuid()) memberOneId String memberOne Member @relation("MemberOne", fields: [memberOneId], references: [id], onDelete: Cascade) memberTwoId String memberTwo Member @relation("MemberTwo", fields: [memberTwoId], references: [id], onDelete: Cascade) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt directmessages DirectMessage[] @@index([memberTwoId]) @@unique([memberOneId, memberTwoId]) } model DirectMessage{ id String @id @default(uuid()) content String @db.Text fileUrl String? @db.Text memberId String member Member @relation(fields: [memberId], references: [id], onDelete: Cascade) conversationId String conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade) deleted Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([memberId]) @@index([conversationId]) }