refactor(dm): 채팅 저장소를 WebSocket 기준으로 전환한다

This commit is contained in:
2026-06-18 18:25:29 +09:00
parent 3d71def880
commit deba733522
5 changed files with 101 additions and 106 deletions

View File

@@ -30,17 +30,4 @@ interface DmChatApi {
@Query("cursor") cursor: Long?,
@Query("limit") limit: Int = 20
): Single<ApiResponse<DmChatMessagesPageResponse>>
@POST("/api/v2/user-creator-chat/rooms/{roomId}/messages/text")
fun sendDmTextMessage(
@Header("Authorization") authHeader: String,
@Path("roomId") roomId: Long,
@Body request: SendDmTextMessageRequest
): Single<ApiResponse<SendDmChatMessageResponse>>
@POST("/api/v2/user-creator-chat/rooms/{roomId}/events/disconnect")
fun disconnectRealtime(
@Header("Authorization") authHeader: String,
@Path("roomId") roomId: Long
): Single<ApiResponse<Boolean>>
}

View File

@@ -42,15 +42,3 @@ data class DmChatMessageResponse(
@SerializedName("senderNickname") val senderNickname: String,
@SerializedName("senderProfileImageUrl") val senderProfileImageUrl: String
)
@Keep
data class SendDmTextMessageRequest(
@SerializedName("textMessage") val textMessage: String
)
@Keep
data class SendDmChatMessageResponse(
@SerializedName("message") val message: DmChatMessageResponse,
@SerializedName("deliveredRealtime") val deliveredRealtime: Boolean,
@SerializedName("pushSent") val pushSent: Boolean
)

View File

@@ -5,7 +5,7 @@ import kr.co.vividnext.sodalive.common.ApiResponse
class DmChatRepository(
private val api: DmChatApi,
private val realtimeClient: DmChatRealtimeClient? = null
private val socketClient: DmChatSocketClient? = null
) {
fun createOrGetRoom(
token: String,
@@ -37,34 +37,31 @@ class DmChatRepository(
limit = limit
)
fun sendTextMessage(
fun connectSocket(
token: String,
roomId: Long,
textMessage: String
): Single<ApiResponse<SendDmChatMessageResponse>> = api.sendDmTextMessage(
authHeader = bearer(token),
roomId = roomId,
request = SendDmTextMessageRequest(textMessage = textMessage)
)
fun disconnectRealtime(
token: String,
roomId: Long
): Single<ApiResponse<Boolean>> = api.disconnectRealtime(
authHeader = bearer(token),
roomId = roomId
)
fun connectRealtime(
token: String,
roomId: Long,
listener: DmChatEventClient.Listener
listener: DmChatSocketClient.Listener
) {
realtimeClient?.connect(token = token, roomId = roomId, listener = listener)
socketClient?.connect(token = token, listener = listener)
}
fun cancelRealtime() {
realtimeClient?.cancel()
fun sendJoinRoom(roomId: Long): Boolean = socketClient?.sendJoinRoom(roomId = roomId) ?: false
fun sendLeaveRoom(roomId: Long): Boolean = socketClient?.sendLeaveRoom(roomId = roomId) ?: false
fun sendSocketText(
roomId: Long,
requestId: String,
textMessage: String
): Boolean = socketClient?.sendText(
roomId = roomId,
requestId = requestId,
textMessage = textMessage
) ?: false
fun sendPing(): Boolean = socketClient?.sendPing() ?: false
fun closeSocket() {
socketClient?.close()
}
private fun bearer(token: String) = "Bearer $token"