import Foundation import Moya enum GiftApi { case getFormOptions case create(request: CreateGiftRequest) case getGifts(page: Int, size: Int) case getGift(applicationNo: String) case cancel(applicationNo: String) case registerTracking(applicationNo: String, request: RegisterGiftTrackingRequest) case submitRecipientAddress(applicationNo: String, request: SubmitGiftRecipientAddressRequest) } extension GiftApi: TargetType { var baseURL: URL { return URL(string: BASE_URL)! } var path: String { switch self { case .getFormOptions: return "/api/v2/gifts/form-options" case .create, .getGifts: return "/api/v2/gifts" case .getGift(let applicationNo): return "/api/v2/gifts/\(applicationNo)" case .cancel(let applicationNo): return "/api/v2/gifts/\(applicationNo)/cancel" case .registerTracking(let applicationNo, _): return "/api/v2/gifts/\(applicationNo)/tracking" case .submitRecipientAddress(let applicationNo, _): return "/api/v2/gifts/\(applicationNo)/recipient-address" } } var method: Moya.Method { switch self { case .getFormOptions, .getGifts, .getGift: return .get case .create, .cancel, .registerTracking, .submitRecipientAddress: return .post } } var task: Moya.Task { switch self { case .getFormOptions, .getGift, .cancel: return .requestPlain case .create(let request): return .requestJSONEncodable(request) case .getGifts(let page, let size): return .requestParameters( parameters: [ "type": "ALL", "page": page, "size": size ], encoding: URLEncoding.queryString ) case .registerTracking(_, let request): return .requestJSONEncodable(request) case .submitRecipientAddress(_, let request): return .requestJSONEncodable(request) } } var headers: [String: String]? { return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"] } }