210 lines
7.3 KiB
Swift
210 lines
7.3 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)
|
|
case getNewContentThemeList
|
|
case getNewContentAllOfTheme(theme: String, page: Int, size: Int)
|
|
}
|
|
|
|
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"
|
|
|
|
case .getNewContentThemeList:
|
|
return "/audio-content/main/theme"
|
|
|
|
case .getNewContentAllOfTheme:
|
|
return "/audio-content/main/new/all"
|
|
}
|
|
}
|
|
|
|
var method: Moya.Method {
|
|
switch self {
|
|
case .getAudioContentList, .getAudioContentDetail, .getOrderList, .getAudioContentThemeList, .getAudioContentCommentList, .getAudioContentCommentReplyList, .getMain, .getNewContentOfTheme, .getNewContentThemeList, .getNewContentAllOfTheme:
|
|
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)
|
|
|
|
case .getNewContentThemeList:
|
|
return .requestPlain
|
|
|
|
case .getNewContentAllOfTheme(let theme, let page, let size):
|
|
let parameters = [
|
|
"theme": theme,
|
|
"page": page - 1,
|
|
"size": size
|
|
] as [String : Any]
|
|
|
|
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
|
|
}
|
|
}
|
|
|
|
var headers: [String : String]? {
|
|
return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
|
|
}
|
|
}
|