129 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  ExplorerApi.swift
 | 
						|
//  SodaLive
 | 
						|
//
 | 
						|
//  Created by klaus on 2023/08/10.
 | 
						|
//
 | 
						|
 | 
						|
import Foundation
 | 
						|
import Moya
 | 
						|
 | 
						|
enum ExplorerApi {
 | 
						|
    case getCreatorRank
 | 
						|
    case getExplorer
 | 
						|
    case searchChannel(channel: String)
 | 
						|
    case getCreatorProfile(userId: Int, isAdultContentVisible: Bool)
 | 
						|
    case getFollowerList(userId: Int, page: Int, size: Int)
 | 
						|
    case getCreatorProfileCheers(userId: Int, page: Int, size: Int)
 | 
						|
    case writeCheers(parentCheersId: Int?, creatorId: Int, content: String)
 | 
						|
    case modifyCheers(request: PutModifyCheersRequest)
 | 
						|
    case writeCreatorNotice(request: PostCreatorNoticeRequest)
 | 
						|
    case getCreatorProfileDonationRanking(userId: Int, page: Int, size: Int)
 | 
						|
}
 | 
						|
 | 
						|
extension ExplorerApi: TargetType {
 | 
						|
    var baseURL: URL {
 | 
						|
        return URL(string: BASE_URL)!
 | 
						|
    }
 | 
						|
    
 | 
						|
    var path: String {
 | 
						|
        switch self {
 | 
						|
        case .getCreatorRank:
 | 
						|
            return "/explorer/creator-rank"
 | 
						|
            
 | 
						|
        case .getExplorer:
 | 
						|
            return "/explorer"
 | 
						|
            
 | 
						|
        case .searchChannel:
 | 
						|
            return "/explorer/search/channel"
 | 
						|
            
 | 
						|
        case .getCreatorProfile(let userId, _):
 | 
						|
            return "/explorer/profile/\(userId)"
 | 
						|
            
 | 
						|
        case .getCreatorProfileDonationRanking(let userId, _, _):
 | 
						|
            return "/explorer/profile/\(userId)/donation-rank"
 | 
						|
            
 | 
						|
        case .getFollowerList(let userId, _, _):
 | 
						|
            return "/explorer/profile/\(userId)/follower-list"
 | 
						|
            
 | 
						|
        case .getCreatorProfileCheers(let userId, _, _):
 | 
						|
            return "/explorer/profile/\(userId)/cheers"
 | 
						|
            
 | 
						|
        case .writeCheers:
 | 
						|
            return "/explorer/profile/cheers"
 | 
						|
            
 | 
						|
        case .modifyCheers:
 | 
						|
            return "/explorer/profile/cheers"
 | 
						|
            
 | 
						|
        case .writeCreatorNotice:
 | 
						|
            return "/explorer/profile/notice"
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    var method: Moya.Method {
 | 
						|
        switch self {
 | 
						|
        case .getExplorer, .searchChannel, .getCreatorProfile, .getFollowerList, .getCreatorProfileCheers, .getCreatorProfileDonationRanking, .getCreatorRank:
 | 
						|
            return .get
 | 
						|
            
 | 
						|
        case .writeCheers, .writeCreatorNotice:
 | 
						|
            return .post
 | 
						|
            
 | 
						|
        case .modifyCheers:
 | 
						|
            return .put
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    var task: Task {
 | 
						|
        switch self {
 | 
						|
        case .getExplorer, .getCreatorRank:
 | 
						|
            return .requestPlain
 | 
						|
            
 | 
						|
        case .searchChannel(let channel):
 | 
						|
            return .requestParameters(parameters: ["channel" : channel], encoding: URLEncoding.queryString)
 | 
						|
            
 | 
						|
        case .getCreatorProfile(_, let isAdultContentVisible):
 | 
						|
            let parameters = ["isAdultContentVisible": isAdultContentVisible, "timezone": TimeZone.current.identifier] as [String: Any]
 | 
						|
            return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
 | 
						|
            
 | 
						|
        case .getFollowerList(_, let page, let size):
 | 
						|
            let parameters = [
 | 
						|
                "page": page - 1,
 | 
						|
                "size": size
 | 
						|
            ] as [String : Any]
 | 
						|
            
 | 
						|
            return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
 | 
						|
            
 | 
						|
        case .getCreatorProfileCheers(_, 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 .writeCheers(let parentCheersId, let creatorId, let content):
 | 
						|
            let request = PostWriteCheersRequest(parentId: parentCheersId, creatorId: creatorId, content: content)
 | 
						|
            return .requestJSONEncodable(request)
 | 
						|
            
 | 
						|
        case .modifyCheers(let request):
 | 
						|
            return .requestJSONEncodable(request)
 | 
						|
            
 | 
						|
        case .writeCreatorNotice(let request):
 | 
						|
            return .requestJSONEncodable(request)
 | 
						|
            
 | 
						|
        case .getCreatorProfileDonationRanking(_, let page, let size):
 | 
						|
            let parameters = [
 | 
						|
                "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))"]
 | 
						|
    }
 | 
						|
}
 |