sodalive-ios/SodaLive/Sources/Content/ContentApi.swift

190 lines
6.5 KiB
Swift

//
// ContentApi.swift
// SodaLive
//
// Created by klaus on 2023/08/11.
//
import Foundation
import Moya
enum ContentApi {
case getAudioContentList(userId: Int, page: Int, size: Int, sort: ContentListViewModel.Sort)
case getAudioContentDetail(audioContentId: Int)
case likeContent(request: PutAudioContentLikeRequest)
case registerComment(request: RegisterAudioContentCommentRequest)
case orderAudioContent(request: OrderRequest)
case getOrderList(page: Int, size: Int)
case addAllPlaybackTracking(request: AddAllPlaybackTrackingRequest)
case getAudioContentThemeList
case uploadAudioContent(parameters: [MultipartFormData])
case getAudioContentCommentList(audioContentId: Int, page: Int, size: Int)
case getAudioContentCommentReplyList(commentId: Int, page: Int, size: Int)
case deleteAudioContent(audioContentId: Int)
case modifyAudioContent(parameters: [MultipartFormData])
case getMain
case getNewContentOfTheme(theme: String)
case donation(request: AudioContentDonationRequest)
case modifyComment(request: ModifyCommentRequest)
}
extension ContentApi: TargetType {
var baseURL: URL {
return URL(string: BASE_URL)!
}
var path: String {
switch self {
case .getAudioContentList:
return "/audio-content"
case .getAudioContentDetail(let audioContentId):
return "/audio-content/\(audioContentId)"
case .likeContent:
return "/audio-content/like"
case .registerComment:
return "/audio-content/comment"
case .orderAudioContent:
return "/order/audio-content"
case .getOrderList:
return "/order/audio-content"
case .addAllPlaybackTracking:
return "/audio-content/playback-tracking"
case .getAudioContentThemeList:
return "/audio-content/theme"
case .uploadAudioContent:
return "/audio-content"
case .getAudioContentCommentList(let audioContentId, _, _):
return "/audio-content/\(audioContentId)/comment"
case .getAudioContentCommentReplyList(let commentId, _, _):
return "/audio-content/comment/\(commentId)"
case .deleteAudioContent(let audioContentId):
return "/audio-content/\(audioContentId)"
case .modifyAudioContent:
return "/audio-content"
case .getMain:
return "/audio-content/main"
case .getNewContentOfTheme:
return "/audio-content/main/new"
case .donation:
return "/audio-content/donation"
case .modifyComment:
return "/audio-content/comment"
}
}
var method: Moya.Method {
switch self {
case .getAudioContentList, .getAudioContentDetail, .getOrderList, .getAudioContentThemeList, .getAudioContentCommentList, .getAudioContentCommentReplyList, .getMain, .getNewContentOfTheme:
return .get
case .likeContent, .modifyAudioContent, .modifyComment:
return .put
case .registerComment, .orderAudioContent, .addAllPlaybackTracking, .uploadAudioContent, .donation:
return .post
case .deleteAudioContent:
return .delete
}
}
var task: Moya.Task {
switch self {
case .getAudioContentList(let userId, let page, let size, let sort):
let parameters = [
"creator-id": userId,
"page": page - 1,
"size": size,
"sort-type": sort
] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .getAudioContentDetail:
let parameters = ["timezone": TimeZone.current.identifier] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .likeContent(let request):
return .requestJSONEncodable(request)
case .registerComment(let request):
return .requestJSONEncodable(request)
case .orderAudioContent(let request):
return .requestJSONEncodable(request)
case .getOrderList(let page, let size):
let parameters = [
"page": page - 1,
"size": size
] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .addAllPlaybackTracking(let request):
return .requestJSONEncodable(request)
case .getAudioContentThemeList, .getMain:
return .requestPlain
case .uploadAudioContent(let parameters):
return .uploadMultipart(parameters)
case .modifyAudioContent(let parameters):
return .uploadMultipart(parameters)
case .getAudioContentCommentList(_, let page, let size):
let parameters = [
"page": page - 1,
"size": size,
"timezone": TimeZone.current.identifier
] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .getAudioContentCommentReplyList(_, let page, let size):
let parameters = [
"page": page - 1,
"size": size,
"timezone": TimeZone.current.identifier
] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .deleteAudioContent:
return .requestPlain
case .getNewContentOfTheme(let theme):
let parameters = ["theme": theme] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .donation(let request):
return .requestJSONEncodable(request)
case .modifyComment(let request):
return .requestJSONEncodable(request)
}
}
var headers: [String : String]? {
return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
}
}