From b14cd522fef12209de9b2f491be231e7a2b5d644 Mon Sep 17 00:00:00 2001 From: Eric85710 Date: Wed, 27 May 2026 05:46:03 +0800 Subject: [PATCH] dm-51 --- .../data/repository/dm/DM_Basic_Repository.kt | 21 +++++++++++++++++++ .../Detail/Message_Messaging_ViewModel.kt | 19 ++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt b/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt index 431340d..c618382 100644 --- a/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt +++ b/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt @@ -247,4 +247,25 @@ class ChatRoomsRepository @Inject constructor( Result.failure(e) } } + + // 新增訊息的 Emoji 反應 + suspend fun addMessageReaction( + roomId: String, + messageId: String, + emoji: String + ): Result { + return try { + val response = api.addMessageReaction(roomId, messageId, emoji) + + if (response.isSuccessful) { + // 204 成功時沒有 body,直接回傳 Unit + Result.success(Unit) + } else { + val errorMsg = response.errorBody()?.string() ?: "未知錯誤" + Result.failure(Exception("新增反應失敗,錯誤碼: ${response.code()}, 訊息: $errorMsg")) + } + } catch (e: Exception) { + Result.failure(e) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt index daa48d9..d3aa770 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt @@ -193,9 +193,7 @@ class ChatViewModel @Inject constructor( private val _reactionUsersState = MutableStateFlow(ReactionUsersState.Idle) val reactionUsersState: StateFlow = _reactionUsersState.asStateFlow() - /** - * 💡 新增:載入點擊特定 Emoji 的使用者名單 - */ + //get emoji reaction fun loadMessageReactionUsers(roomId: String, messageId: String, emoji: String) { viewModelScope.launch { _reactionUsersState.value = ReactionUsersState.Loading @@ -214,6 +212,21 @@ class ChatViewModel @Inject constructor( } } } + //add emoji reaction + fun addMessageReaction(roomId: String, messageId: String, emoji: String) { + viewModelScope.launch { + val result = repository.addMessageReaction(roomId, messageId, emoji) + + result.onSuccess { + // 😎【超讚體驗優化】:點擊成功後,除了通知後端, + // 也可以選擇直接呼叫 loadMessages(roomId) 來重新拉取最新帶有按讚數量的訊息列表 + loadMessages(roomId) + }.onFailure { error -> + Log.e("ChatViewModel", "Add reaction failed", error) + // 這裡可以依需求決定要不要用 Toast 提示使用者點擊失敗 + } + } + } // 💡 請確保這段程式碼有確實待在 ChatViewModel 裡面 fun resetReactionUsersState() {