134 lines
2.7 KiB
Plaintext
134 lines
2.7 KiB
Plaintext
generator client_msg {
|
|
provider = "prisma-client-js"
|
|
output = "clients/msg"
|
|
}
|
|
|
|
datasource db_msg {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL_MSG")
|
|
}
|
|
|
|
model Conversations {
|
|
id String @id @default(uuid())
|
|
subject String? @default("New Conversation")
|
|
status ConversationStatus @default(active)
|
|
priority Priority @default(normal)
|
|
category String?
|
|
userId String
|
|
adminId String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
lastMessageAt DateTime?
|
|
metadata Json? @default("{}")
|
|
messages Messages[]
|
|
|
|
@@map("conversations")
|
|
}
|
|
|
|
model Messages {
|
|
id String @id @default(uuid())
|
|
conversationId String
|
|
content String
|
|
messageType MessageType @default(text)
|
|
senderId String
|
|
senderType SenderType
|
|
senderName String?
|
|
status MessageStatus @default(sent)
|
|
readAt DateTime?
|
|
deliveredAt DateTime?
|
|
metadata Json? @default("{}")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
conversation Conversations @relation(fields: [conversationId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([conversationId])
|
|
@@index([senderId])
|
|
@@index([createdAt])
|
|
@@index([status])
|
|
@@map("messages")
|
|
}
|
|
|
|
model MessageAttachments {
|
|
id String @id @default(uuid())
|
|
messageId String
|
|
fileName String
|
|
fileSize Int
|
|
mimeType String
|
|
fileUrl String
|
|
thumbnailUrl String?
|
|
metadata Json? @default("{}")
|
|
createdAt DateTime @default(now())
|
|
|
|
@@index([messageId])
|
|
@@map("message_attachments")
|
|
}
|
|
|
|
model TypingIndicators {
|
|
id String @id @default(uuid())
|
|
conversationId String
|
|
userId String
|
|
userType SenderType
|
|
startedAt DateTime @default(now())
|
|
|
|
@@unique([conversationId, userId])
|
|
@@index([conversationId])
|
|
@@map("typing_indicators")
|
|
}
|
|
|
|
model ConversationParticipants {
|
|
id String @id @default(uuid())
|
|
conversationId String
|
|
userId String
|
|
userType SenderType
|
|
role ParticipantRole @default(member)
|
|
joinedAt DateTime @default(now())
|
|
leftAt DateTime?
|
|
|
|
@@unique([conversationId, userId])
|
|
@@index([conversationId])
|
|
@@index([userId])
|
|
@@map("conversation_participants")
|
|
}
|
|
|
|
enum ConversationStatus {
|
|
active
|
|
closed
|
|
archived
|
|
}
|
|
|
|
enum Priority {
|
|
low
|
|
normal
|
|
high
|
|
urgent
|
|
}
|
|
|
|
enum MessageType {
|
|
text
|
|
image
|
|
file
|
|
audio
|
|
video
|
|
location
|
|
contact
|
|
}
|
|
|
|
enum SenderType {
|
|
admin
|
|
user
|
|
system
|
|
}
|
|
|
|
enum MessageStatus {
|
|
sent
|
|
delivered
|
|
read
|
|
failed
|
|
}
|
|
|
|
enum ParticipantRole {
|
|
admin
|
|
member
|
|
observer
|
|
}
|