diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatApi.kt new file mode 100644 index 00000000..a5425220 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatApi.kt @@ -0,0 +1,46 @@ +package kr.co.vividnext.sodalive.v2.main.chat.dm.data + +import io.reactivex.rxjava3.core.Single +import kr.co.vividnext.sodalive.common.ApiResponse +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.POST +import retrofit2.http.Path +import retrofit2.http.Query + +interface DmChatApi { + @POST("/api/v2/user-creator-chat/rooms/create") + fun createDmChatRoom( + @Header("Authorization") authHeader: String, + @Body request: CreateDmChatRoomRequest + ): Single> + + @GET("/api/v2/user-creator-chat/rooms/{roomId}/open") + fun openDmChatRoom( + @Header("Authorization") authHeader: String, + @Path("roomId") roomId: Long, + @Query("limit") limit: Int = 20 + ): Single> + + @GET("/api/v2/user-creator-chat/rooms/{roomId}/messages") + fun getDmChatMessages( + @Header("Authorization") authHeader: String, + @Path("roomId") roomId: Long, + @Query("cursor") cursor: Long?, + @Query("limit") limit: Int = 20 + ): Single> + + @POST("/api/v2/user-creator-chat/rooms/{roomId}/messages/text") + fun sendDmTextMessage( + @Header("Authorization") authHeader: String, + @Path("roomId") roomId: Long, + @Body request: SendDmTextMessageRequest + ): Single> + + @POST("/api/v2/user-creator-chat/rooms/{roomId}/events/disconnect") + fun disconnectRealtime( + @Header("Authorization") authHeader: String, + @Path("roomId") roomId: Long + ): Single> +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatModels.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatModels.kt new file mode 100644 index 00000000..c8acc89a --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatModels.kt @@ -0,0 +1,56 @@ +package kr.co.vividnext.sodalive.v2.main.chat.dm.data + +import androidx.annotation.Keep +import com.google.gson.annotations.SerializedName + +@Keep +data class CreateDmChatRoomRequest( + @SerializedName("creatorId") val creatorId: Long +) + +@Keep +data class CreateDmChatRoomResponse( + @SerializedName("roomId") val roomId: Long +) + +@Keep +data class DmChatRoomOpenResponse( + @SerializedName("roomId") val roomId: Long, + @SerializedName("opponentNickname") val opponentNickname: String, + @SerializedName("opponentProfileImageUrl") val opponentProfileImageUrl: String, + @SerializedName("messages") val messages: List, + @SerializedName("hasMore") val hasMore: Boolean, + @SerializedName("nextCursor") val nextCursor: Long? +) + +@Keep +data class DmChatMessagesPageResponse( + @SerializedName("messages") val messages: List, + @SerializedName("hasMore") val hasMore: Boolean, + @SerializedName("nextCursor") val nextCursor: Long? +) + +@Keep +data class DmChatMessageResponse( + @SerializedName("messageId") val messageId: Long, + @SerializedName("messageType") val messageType: String, + @SerializedName("mine") val mine: Boolean, + @SerializedName("createdAt") val createdAt: Long, + @SerializedName("textMessage") val textMessage: String?, + @SerializedName("voiceMessageUrl") val voiceMessageUrl: String?, + @SerializedName("senderId") val senderId: Long, + @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 +)