// // CharacterApi.swift // SodaLive // // Created by klaus on 8/29/25. // import Foundation import Moya enum CharacterApi { case getCharacterHome case getCharacterDetail(characterId: Int) case getCharacterImageList(characterId: Int, page: Int, size: Int) case getMyCharacterImageList(characterId: Int64, page: Int, size: Int) case purchaseCharacterImage(imageId: Int) case getRecentCharacters(page: Int, size: Int) } extension CharacterApi: TargetType { var baseURL: URL { URL(string: BASE_URL)! } var path: String { switch self { case .getCharacterHome: return "/api/chat/character/main" case .getCharacterDetail(let characterId): return "/api/chat/character/\(characterId)" case .getCharacterImageList: return "/api/chat/character/image/list" case .getMyCharacterImageList: return "/api/chat/character/image/list" case .purchaseCharacterImage: return "/api/chat/character/image/purchase" case .getRecentCharacters: return "/api/chat/character/recent" } } var method: Moya.Method { switch self { case .purchaseCharacterImage: return .post default: return .get } } var task: Moya.Task { switch self { case .getCharacterHome, .getCharacterDetail: return .requestPlain case .getRecentCharacters(let page, let size): return .requestParameters( parameters: [ "page": page, "size": size ], encoding: URLEncoding.queryString ) case .getCharacterImageList(let characterId, let page, let size): return .requestParameters( parameters: [ "characterId": characterId, "page": page, "size": size ], encoding: URLEncoding.queryString ) case .getMyCharacterImageList(let characterId, let page, let size): return .requestParameters( parameters: [ "characterId": characterId, "page": page, "size": size ], encoding: URLEncoding.queryString ) case .purchaseCharacterImage(let imageId): return .requestJSONEncodable(CharacterImagePurchaseRequest(imageId: imageId)) } } var headers: [String : String]? { ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"] } }