feat(chat-room) 채팅방 API

- 생성, 입장, 이전 메시지 로딩, 메시지 전송 API 추가
This commit is contained in:
Yu Sung
2025-09-04 00:49:16 +09:00
parent b74ec15de4
commit 154ca01a74
4 changed files with 86 additions and 1 deletions

View File

@@ -16,4 +16,8 @@ class CharacterDetailRepository {
func getCharacterDetail(characterId: Int) -> AnyPublisher<Response, MoyaError> { func getCharacterDetail(characterId: Int) -> AnyPublisher<Response, MoyaError> {
return characterApi.requestPublisher(.getCharacterDetail(characterId: characterId)) return characterApi.requestPublisher(.getCharacterDetail(characterId: characterId))
} }
func createChatRoom(characterId: Int) -> AnyPublisher<Response, MoyaError> {
return talkApi.requestPublisher(.createChatRoom(request: CreateChatRoomRequest(characterId: characterId)))
}
} }

View File

@@ -12,4 +12,27 @@ import Moya
class ChatRoomRepository { class ChatRoomRepository {
private let talkApi = MoyaProvider<TalkApi>() private let talkApi = MoyaProvider<TalkApi>()
/**
* : +
*/
func enterChatRoom(roomId: Int, characterImageId: Int?) -> AnyPublisher<Response, MoyaError> {
return talkApi.requestPublisher(.enterChatRoom(roomId: roomId, characterImageId: characterImageId))
}
/**
* :
*/
func loadMoreMessages(roomId: Int, cursor: Int?) -> AnyPublisher<Response, MoyaError> {
return talkApi.requestPublisher(.getChatRoomMessages(roomId: roomId, cursor: cursor, limit: 20))
}
/**
* API
* - : .
* - : (ServerChatMessage) ( AI )
*/
func sendMessage(roomId: Int, message: String) -> AnyPublisher<Response, MoyaError> {
return talkApi.requestPublisher(.sendMessage(roomId: roomId, request: SendChatMessageRequest(message: message)))
}
} }

View File

@@ -6,5 +6,5 @@
// //
struct CreateChatRoomRequest: Encodable { struct CreateChatRoomRequest: Encodable {
let characterId: Int64 let characterId: Int
} }

View File

@@ -10,6 +10,10 @@ import Moya
enum TalkApi { enum TalkApi {
case getTalkRooms case getTalkRooms
case createChatRoom(request: CreateChatRoomRequest)
case enterChatRoom(roomId: Int, characterImageId: Int?)
case sendMessage(roomId: Int, request: SendChatMessageRequest)
case getChatRoomMessages(roomId: Int, cursor: Int?, limit: Int)
} }
extension TalkApi: TargetType { extension TalkApi: TargetType {
@@ -19,6 +23,18 @@ extension TalkApi: TargetType {
switch self { switch self {
case .getTalkRooms: case .getTalkRooms:
return "/api/chat/room/list" return "/api/chat/room/list"
case .createChatRoom:
return "/api/chat/room/create"
case .enterChatRoom(let roomId, _):
return "/api/chat/room/\(roomId)/enter"
case .sendMessage(let roomId, _):
return "/api/chat/room/\(roomId)/send"
case .getChatRoomMessages(let roomId, _, _):
return "/api/chat/room/\(roomId)/messages"
} }
} }
@@ -26,6 +42,18 @@ extension TalkApi: TargetType {
switch self { switch self {
case .getTalkRooms: case .getTalkRooms:
return .get return .get
case .createChatRoom:
return .post
case .enterChatRoom:
return .get
case .sendMessage:
return .post
case .getChatRoomMessages:
return .get
} }
} }
@@ -33,6 +61,36 @@ extension TalkApi: TargetType {
switch self { switch self {
case .getTalkRooms: case .getTalkRooms:
return .requestPlain return .requestPlain
case .createChatRoom(let request):
return .requestJSONEncodable(request)
case .enterChatRoom(_, let characterImageId):
var parameters: [String: Any] = [:]
if let characterImageId = characterImageId {
parameters["characterImageId"] = characterImageId
}
return .requestParameters(
parameters: parameters,
encoding: URLEncoding.queryString
)
case .sendMessage(_, request: let request):
return .requestJSONEncodable(request)
case .getChatRoomMessages(_, let cursor, let limit):
var parameters: [String: Any] = ["limit": limit]
if let cursor = cursor {
parameters["cursor"] = cursor
}
return .requestParameters(
parameters: parameters,
encoding: URLEncoding.queryString
)
} }
} }