dm-28
This commit is contained in:
parent
637306b744
commit
68c025da5c
3 changed files with 54 additions and 1 deletions
|
|
@ -96,4 +96,11 @@ interface TecnologiaApi {
|
|||
@Path("room_id") roomId: String
|
||||
): Response<Unit>
|
||||
|
||||
//send DM message
|
||||
@POST("api/dm/{room_id}/messages")
|
||||
suspend fun sendMessage(
|
||||
@Path("room_id") roomId: String,
|
||||
@Body request: SendMessageRequest
|
||||
): Response<Message>
|
||||
|
||||
}
|
||||
|
|
@ -114,4 +114,14 @@ data class Message(
|
|||
@Json(name = "count") val count: Int,
|
||||
@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
|
||||
)
|
||||
|
|
@ -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<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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue