Files
forkmessager/client-mobile/chats/data/repository/ChatRepositoryImpl.kt
Халимов Рустам 1fb1be47dd Приложение
2026-04-14 01:15:54 +03:00

69 lines
1.9 KiB
Kotlin

package chats.data.repository
import chats.data.remote.api.ChatApi
import chats.data.remote.dto.ChatDto
import chats.data.remote.dto.MessageDto
import chats.domain.model.Chat
import chats.domain.model.Message
import chats.domain.model.MediaType
import chats.domain.repository.ChatRepository
import javax.inject.Inject
class ChatRepositoryImpl @Inject constructor(
private val api: ChatApi
) : ChatRepository {
override suspend fun getChats(): List<Chat> {
return api.getChats().map { it.toDomain() }
}
override suspend fun getMessages(chatId: String): List<Message> {
return api.getMessages(chatId).map { it.toDomain() }
}
override suspend fun sendMessage(chatId: String, content: String): Message {
return api.sendMessage(chatId, content).toDomain()
}
override suspend fun addReaction(messageId: String, emoji: String) {
api.addReaction(messageId, emoji)
}
override suspend fun sendTypingStatus(chatId: String) {
api.sendTypingStatus(chatId)
}
override suspend fun markMessagesAsRead(chatId: String, lastMessageId: String) {
api.markMessagesAsRead(chatId, lastMessageId)
}
}
// Mappers
fun ChatDto.toDomain(): Chat = Chat(
id = id,
type = type,
name = name ?: "Unknown Chat",
avatar = null, // Update if avatar is added to ChatDto
unreadCount = unreadCount,
lastMessage = messages.firstOrNull()?.toDomain()
)
fun MessageDto.toDomain(): Message = Message(
id = id,
chatId = chatId,
senderId = senderId,
senderName = sender.displayName,
content = content,
sequenceId = sequenceId,
createdAt = createdAt,
media = media.map { it.url },
mediaUrl = media.firstOrNull()?.url,
mediaType = when (media.firstOrNull()?.type) {
"image" -> MediaType.IMAGE
"video" -> MediaType.VIDEO
"audio" -> MediaType.AUDIO
"file" -> MediaType.FILE
else -> MediaType.TEXT
}
)