Files
sodalive-ios/SodaLive/Sources/Chat/Talk/TalkApi.swift
Yu Sung 2576c851ee feat(chat-room) 채팅방 API
- 채팅방 입장 API 연동
- 채팅 쿼터가 없을 때 표시할 UI 추가
2025-09-04 04:25:28 +09:00

112 lines
2.9 KiB
Swift

//
// TalkApi.swift
// SodaLive
//
// Created by klaus on 8/29/25.
//
import Foundation
import Moya
enum TalkApi {
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)
case getChatQuotaStatus
}
extension TalkApi: TargetType {
var baseURL: URL { URL(string: BASE_URL)! }
var path: String {
switch self {
case .getTalkRooms:
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"
case .getChatQuotaStatus:
return "/api/chat/quota/me"
}
}
var method: Moya.Method {
switch self {
case .getTalkRooms:
return .get
case .createChatRoom:
return .post
case .enterChatRoom:
return .get
case .sendMessage:
return .post
case .getChatRoomMessages:
return .get
case .getChatQuotaStatus:
return .get
}
}
var task: Moya.Task {
switch self {
case .getTalkRooms:
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
)
case .getChatQuotaStatus:
return .requestPlain
}
}
var headers: [String : String]? {
["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
}
}