Files
sodalive-ios/SodaLive/Sources/Chat/Talk/TalkApi.swift
Yu Sung a2f81bd348 fix(chat-room): 채팅방
- 쿼터 상태 조회, 쿼터 구매 API URL 변경
2025-09-10 12:04:01 +09:00

143 lines
4.1 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(roomId: Int)
case purchaseChatQuota(roomId: Int, request: ChatQuotaPurchaseRequest)
case purchaseMessage(roomId: Int, messageId: Int64, request: ChatMessagePurchaseRequest)
case resetChatRoom(roomId: Int, request: ChatRoomResetRequest)
}
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(let roomId):
return "/api/chat/rooms/\(roomId)/quota/me"
case .purchaseChatQuota(let roomId, _):
return "/api/chat/rooms/\(roomId)/quota/purchase"
case .purchaseMessage(let roomId, let messageId, _):
return "/api/chat/room/\(roomId)/messages/\(messageId)/purchase"
case .resetChatRoom(let roomId, _):
return "/api/chat/room/\(roomId)/reset"
}
}
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
case .purchaseChatQuota:
return .post
case .purchaseMessage:
return .post
case .resetChatRoom:
return .post
}
}
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
case .purchaseChatQuota(_, let request):
return .requestJSONEncodable(request)
case .purchaseMessage(_, _, let request):
return .requestJSONEncodable(request)
case .resetChatRoom(_, let request):
return .requestJSONEncodable(request)
}
}
var headers: [String : String]? {
["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
}
}