discord-clone/prisma/schema.prisma

154 lines
3.2 KiB
Plaintext
Raw Normal View History

generator client {
provider = "prisma-client-js"
}
datasource db {
2023-11-12 21:15:07 -08:00
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
2023-11-12 21:15:07 -08:00
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
}
2023-11-12 21:15:07 -08:00
model Server {
id String @id @default(uuid())
name String
imageUrl String @db.Text
2023-10-14 00:04:30 -07:00
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])
}
2023-11-12 21:15:07 -08:00
enum MemberRole {
ADMIN
MODERATOR
GUEST
}
2023-11-12 21:15:07 -08:00
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])
}
2023-11-12 21:15:07 -08:00
enum ChannelType {
TEXT
AUDIO
VIDEO
}
2023-11-12 21:15:07 -08:00
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])
}
2023-11-12 21:15:07 -08:00
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])
}
2023-11-12 21:15:07 -08:00
model Conversation {
id String @id @default(uuid())
memberOneId String
2023-11-12 17:31:24 -08:00
memberOne Member @relation("MemberOne", fields: [memberOneId], references: [id], onDelete: Cascade)
memberTwoId String
2023-11-12 17:31:24 -08:00
memberTwo Member @relation("MemberTwo", fields: [memberTwoId], references: [id], onDelete: Cascade)
2023-11-12 21:15:07 -08:00
directMessages DirectMessage[]
@@index([memberTwoId])
@@unique([memberOneId, memberTwoId])
}
2023-11-12 21:15:07 -08:00
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)
2023-11-12 21:15:07 -08:00
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([memberId])
@@index([conversationId])
2023-11-12 21:15:07 -08:00
}