diff --git a/SodaLive/Sources/V2/Gift/Repository/GiftApi.swift b/SodaLive/Sources/V2/Gift/Repository/GiftApi.swift new file mode 100644 index 00000000..f43fc0a5 --- /dev/null +++ b/SodaLive/Sources/V2/Gift/Repository/GiftApi.swift @@ -0,0 +1,71 @@ +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))"] + } +} diff --git a/SodaLive/Sources/V2/Gift/Repository/GiftRepository.swift b/SodaLive/Sources/V2/Gift/Repository/GiftRepository.swift new file mode 100644 index 00000000..b9097ec1 --- /dev/null +++ b/SodaLive/Sources/V2/Gift/Repository/GiftRepository.swift @@ -0,0 +1,43 @@ +import Foundation +import Combine + +import CombineMoya +import Moya + +final class GiftRepository { + private let api = MoyaProvider() + + func getFormOptions() -> AnyPublisher { + return api.requestPublisher(.getFormOptions) + } + + func createGift(request: CreateGiftRequest) -> AnyPublisher { + return api.requestPublisher(.create(request: request)) + } + + func getGifts(page: Int, size: Int) -> AnyPublisher { + return api.requestPublisher(.getGifts(page: page, size: size)) + } + + func getGift(applicationNo: String) -> AnyPublisher { + return api.requestPublisher(.getGift(applicationNo: applicationNo)) + } + + func cancelGift(applicationNo: String) -> AnyPublisher { + return api.requestPublisher(.cancel(applicationNo: applicationNo)) + } + + func registerTracking( + applicationNo: String, + request: RegisterGiftTrackingRequest + ) -> AnyPublisher { + return api.requestPublisher(.registerTracking(applicationNo: applicationNo, request: request)) + } + + func submitRecipientAddress( + applicationNo: String, + request: SubmitGiftRecipientAddressRequest + ) -> AnyPublisher { + return api.requestPublisher(.submitRecipientAddress(applicationNo: applicationNo, request: request)) + } +}