// // 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) } 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" } } 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 } } 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 ) } } var headers: [String : String]? { ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"] } }