feat(gift): 선물 API 저장소를 추가한다

This commit is contained in:
Yu Sung
2026-10-08 12:32:44 +09:00
parent afc423ff40
commit 9b7acc905a
2 changed files with 114 additions and 0 deletions
@@ -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))"]
}
}
@@ -0,0 +1,43 @@
import Foundation
import Combine
import CombineMoya
import Moya
final class GiftRepository {
private let api = MoyaProvider<GiftApi>()
func getFormOptions() -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getFormOptions)
}
func createGift(request: CreateGiftRequest) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.create(request: request))
}
func getGifts(page: Int, size: Int) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getGifts(page: page, size: size))
}
func getGift(applicationNo: String) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getGift(applicationNo: applicationNo))
}
func cancelGift(applicationNo: String) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.cancel(applicationNo: applicationNo))
}
func registerTracking(
applicationNo: String,
request: RegisterGiftTrackingRequest
) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.registerTracking(applicationNo: applicationNo, request: request))
}
func submitRecipientAddress(
applicationNo: String,
request: SubmitGiftRecipientAddressRequest
) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.submitRecipientAddress(applicationNo: applicationNo, request: request))
}
}