133 lines
3.7 KiB
Swift
133 lines
3.7 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
|
|
case purchaseChatQuota(request: ChatQuotaPurchaseRequest)
|
|
|
|
case purchaseMessage(roomId: Int, messageId: Int64, request: ChatMessagePurchaseRequest)
|
|
}
|
|
|
|
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"
|
|
|
|
case .purchaseChatQuota:
|
|
return "/api/chat/quota/purchase"
|
|
|
|
case .purchaseMessage(let roomId, let messageId, _):
|
|
return "/api/chat/room/\(roomId)/messages/\(messageId)/purchase"
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
var headers: [String : String]? {
|
|
["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
|
|
}
|
|
}
|