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 }