Авторизация, нерабочий чат

This commit is contained in:
Халимов Рустам
2026-04-14 01:41:51 +03:00
parent 1fb1be47dd
commit dc051fa9ae
22 changed files with 160 additions and 49 deletions
@@ -1,20 +1,27 @@
package chats.data.repository
import chats.data.remote.api.ChatApi
import chats.data.remote.api.SendMessageRequest
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 core.security.TokenManager
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import javax.inject.Inject
class ChatRepositoryImpl @Inject constructor(
private val api: ChatApi
private val api: ChatApi,
private val tokenManager: TokenManager
) : ChatRepository {
override suspend fun getChats(): List<Chat> {
return api.getChats().map { it.toDomain() }
val currentUserId = tokenManager.getUserId() ?: ""
return api.getChats().map { it.toDomain(currentUserId) }
}
override suspend fun getMessages(chatId: String): List<Message> {
@@ -22,7 +29,8 @@ class ChatRepositoryImpl @Inject constructor(
}
override suspend fun sendMessage(chatId: String, content: String): Message {
return api.sendMessage(chatId, content).toDomain()
val request = SendMessageRequest(content = content, type = "text")
return api.sendMessage(chatId, request).toDomain()
}
override suspend fun addReaction(messageId: String, emoji: String) {
@@ -36,17 +44,37 @@ class ChatRepositoryImpl @Inject constructor(
override suspend fun markMessagesAsRead(chatId: String, lastMessageId: String) {
api.markMessagesAsRead(chatId, lastMessageId)
}
override suspend fun uploadMedia(file: java.io.File): String {
val requestFile = file.asRequestBody("image/*".toMediaTypeOrNull())
val body = MultipartBody.Part.createFormData("file", file.name, requestFile)
return api.uploadFile(body).url
}
}
// 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 ChatDto.toDomain(currentUserId: String): Chat {
// Если это личный чат и имя пустое, ищем имя собеседника в списке участников
val chatName = name ?: if (type == "personal") {
members.firstOrNull { it.userId != currentUserId }?.user?.displayName ?: "Unknown Chat"
} else "Group Chat"
val chatAvatar = avatar ?: if (type == "personal") {
members.firstOrNull { it.userId != currentUserId }?.user?.avatarUrl
} else null
return Chat(
id = id,
type = type,
name = chatName,
avatar = chatAvatar,
unreadCount = unreadCount,
lastMessage = messages.firstOrNull()?.toDomain()
)
}
fun MessageDto.toDomain(): Message = Message(
id = id,