package chats.data.local.database import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey import chats.domain.model.MessageStatus /** * Entity для хранения сообщений в локальной БД Room * Используется для офлайн-режима и Single Source of Truth паттерна */ @Entity( tableName = "messages", indices = [ Index(value = ["chatId", "sequenceId"]), Index(value = ["localId"], unique = true), Index(value = ["serverId"]), Index(value = ["status"]) ] ) data class MessageEntity( @PrimaryKey(autoGenerate = false) val localId: String, // UUID генерируется на клиенте при создании val serverId: String?, // null для неотправленных сообщений val idempotencyKey: String, // UUID v4 для идемпотентности val chatId: String, val senderId: String, val senderName: String, val senderAvatar: String? = null, val content: String?, val sequenceId: Long, val createdAt: String, // ISO-8601 формат val mediaType: String, val mediaJson: String, // JSON список медиа (для Room) val reactionsJson: String = "{}", // JSON map эмодзи -> count val status: MessageStatus, val isPinned: Boolean = false, val isForwarded: Boolean = false, val forwardedFromName: String? = null, val replyToServerId: String? = null, val errorMessage: String? = null, val retryCount: Int = 0, val createdAtMillis: Long = 0, val updatedAtMillis: Long = 0 )