콘텐츠 메인, 콘텐츠 업로드 페이지 추가
This commit is contained in:
		
							
								
								
									
										182
									
								
								SodaLive/Sources/Content/ContentApi.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								SodaLive/Sources/Content/ContentApi.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
//
 | 
			
		||||
//  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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    var method: Moya.Method {
 | 
			
		||||
        switch self {
 | 
			
		||||
        case .getAudioContentList, .getAudioContentDetail, .getOrderList, .getAudioContentThemeList, .getAudioContentCommentList, .getAudioContentCommentReplyList, .getMain, .getNewContentOfTheme:
 | 
			
		||||
            return .get
 | 
			
		||||
            
 | 
			
		||||
        case .likeContent, .modifyAudioContent:
 | 
			
		||||
            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)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    var headers: [String : String]? {
 | 
			
		||||
        return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user