Подгрузка старых сообщений

This commit is contained in:
Халимов Рустам
2026-04-15 01:55:23 +03:00
parent 5b0133d55e
commit 5a71e5bbfa
11 changed files with 22 additions and 20 deletions
@@ -27,6 +27,7 @@ interface ChatApi {
suspend fun getMessages(
@Path("chatId") chatId: String,
@Query("cursor") cursor: String? = null,
@Query("pivot") pivot: Long? = null,
@Query("limit") limit: Int? = 50
): List<MessageDto>
@@ -41,27 +41,24 @@ class ChatRepositoryImpl @Inject constructor(
}
}
override suspend fun getMessages(chatId: String, cursor: String?, limit: Int?): List<Message> {
override suspend fun getMessages(chatId: String, cursor: String?, pivot: Long?, limit: Int?): List<Message> {
val baseUrl = serverConfig.getBaseUrl().removeSuffix("/api/")
val currentUserId = tokenManager.getUserId() ?: ""
return try {
val chats = api.getChats()
val chatDto = chats.find { it.id == chatId }
val unreadCount = chatDto?.unreadCount ?: 0
android.util.Log.d("ChatRepo", "Fetching messages from network for chat: $chatId, cursor: $cursor")
android.util.Log.d("ChatRepo", "FETCH: chatId=$chatId, cursor=$cursor, limit=$limit")
val messages = api.getMessages(chatId, cursor = cursor, limit = limit)
if (messages.isNotEmpty()) {
android.util.Log.d("ChatRepo", "Received ${messages.size} messages. First: ${messages.first().createdAt}, Last: ${messages.last().createdAt}")
android.util.Log.d("ChatRepo", "Received ${messages.size} messages. TopSeq: ${messages.first().sequenceId}, BottomSeq: ${messages.last().sequenceId}")
}
// Определяем, какие сообщения считаются прочитанными
val mappedMessages = messages.mapIndexed { index, msg ->
val isUnread = (messages.size - index) <= unreadCount && msg.senderId != currentUserId
msg.toDomain(currentUserId, baseUrl).copy(isRead = !isUnread)
// Мапим в доменные модели. По умолчанию считаем прочитанными,
// так как unreadCount нам тут не критичен для истории.
messages.map { msg ->
msg.toDomain(currentUserId, baseUrl).copy(isRead = true)
}
mappedMessages
} catch (e: Exception) {
android.util.Log.e("ChatRepo", "Fetch messages failed", e)
emptyList()
}
}