This commit is contained in:
Eric85710 2026-05-24 15:53:35 +08:00
parent 637306b744
commit 68c025da5c
3 changed files with 54 additions and 1 deletions

View file

@ -96,4 +96,11 @@ interface TecnologiaApi {
@Path("room_id") roomId: String @Path("room_id") roomId: String
): Response<Unit> ): Response<Unit>
//send DM message
@POST("api/dm/{room_id}/messages")
suspend fun sendMessage(
@Path("room_id") roomId: String,
@Body request: SendMessageRequest
): Response<Message>
} }

View file

@ -114,4 +114,14 @@ data class Message(
@Json(name = "count") val count: Int, @Json(name = "count") val count: Int,
@Json(name = "me_reacted") val meReacted: Boolean @Json(name = "me_reacted") val meReacted: Boolean
) )
} }
//send message
@JsonClass(generateAdapter = true)
data class SendMessageRequest(
@Json(name = "content") val content: String,
@Json(name = "reply_to_id") val replyToId: String? = null
)

View file

@ -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.TecnologiaApi
import com.example.login_v3.data.api.api_class.ChatRoom 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.MessageResponse
import com.example.login_v3.data.api.api_class.RoomListResponse 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.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -81,4 +83,38 @@ class ChatRoomsRepository @Inject constructor(
Result.failure(e) Result.failure(e)
} }
} }
//send message
suspend fun sendMessage(
roomId: String,
content: String,
replyToId: String? = null
): Result<Message> {
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)
}
}
} }