csa-backend-test/prisma/schema.msg.prisma

135 lines
2.6 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
}