diff --git a/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt b/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt index 9ce0edb..1a75667 100644 --- a/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt +++ b/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt @@ -96,4 +96,11 @@ interface TecnologiaApi { @Path("room_id") roomId: String ): Response + //send DM message + @POST("api/dm/{room_id}/messages") + suspend fun sendMessage( + @Path("room_id") roomId: String, + @Body request: SendMessageRequest + ): Response + } \ No newline at end of file diff --git a/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt b/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt index bc357a7..2b6c04f 100644 --- a/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt +++ b/app/src/main/java/com/example/login_v3/data/api/api_class/DM_Basic.kt @@ -114,4 +114,14 @@ data class Message( @Json(name = "count") val count: Int, @Json(name = "me_reacted") val meReacted: Boolean ) -} \ No newline at end of file +} + + + + +//send message +@JsonClass(generateAdapter = true) +data class SendMessageRequest( + @Json(name = "content") val content: String, + @Json(name = "reply_to_id") val replyToId: String? = null +) \ No newline at end of file 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 a457817..8c1e772 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 @@ -2,8 +2,10 @@ package com.example.login_v3.data.repository.dm import com.example.login_v3.data.api.TecnologiaApi import com.example.login_v3.data.api.api_class.ChatRoom +import com.example.login_v3.data.api.api_class.Message import com.example.login_v3.data.api.api_class.MessageResponse import com.example.login_v3.data.api.api_class.RoomListResponse +import com.example.login_v3.data.api.api_class.SendMessageRequest import javax.inject.Inject import javax.inject.Singleton @@ -81,4 +83,38 @@ class ChatRoomsRepository @Inject constructor( Result.failure(e) } } + + //send message + suspend fun sendMessage( + roomId: String, + content: String, + replyToId: String? = null + ): Result { + return try { + // 打包 Request Body + val requestBody = SendMessageRequest( + content = content, + replyToId = replyToId + ) + + // 呼叫 API + val response = api.sendMessage(roomId, requestBody) + + if (response.isSuccessful) { + val body = response.body() + if (body != null) { + Result.success(body) + } else { + Result.failure(Exception("發送成功但回應身體為空 (Empty response body)")) + } + } else { + // 抓取後端傳回的錯誤訊息 + val errorMsg = response.errorBody()?.string() ?: "未知錯誤" + Result.failure(Exception("發送訊息失敗,錯誤碼: ${response.code()}, 訊息: $errorMsg")) + } + } catch (e: Exception) { + // 捕捉網路斷線或解析 JSON 失敗等狀況 + Result.failure(e) + } + } } \ No newline at end of file