discord-clone/prisma/schema.prisma

158 lines
3.3 KiB
Plaintext

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