sodalive-ios/SodaLive/Sources/Live/LiveApi.swift

243 lines
8.3 KiB
Swift

//
// LiveApi.swift
// SodaLive
//
// Created by klaus on 2023/08/09.
//
import Foundation
import Moya
enum LiveApi {
case roomList(request: GetRoomListRequest)
case recentVisitRoomUsers
case getReservations(isActive: Bool)
case getReservation(reservationId: Int)
case cancelReservation(request: CancelLiveReservationRequest)
case getRoomDetail(roomId: Int)
case makeReservation(request: MakeLiveReservationRequest)
case enterRoom(request: EnterOrQuitLiveRoomRequest)
case getTags
case getRecentRoomInfo
case createRoom(parameters: [MultipartFormData])
case startLive(request: StartLiveRequest)
case cancelRoom(request: CancelLiveRequest)
case editLiveRoomInfo(roomId: Int, parameters: [MultipartFormData])
case quitRoom(roomId: Int)
case getRoomInfo(roomId: Int)
case donation(request: LiveRoomDonationRequest)
case refundDonation(roomId: Int)
case setListener(request: SetManagerOrSpeakerOrAudienceRequest)
case setSpeaker(request: SetManagerOrSpeakerOrAudienceRequest)
case setManager(request: SetManagerOrSpeakerOrAudienceRequest)
case kickOut(request: LiveRoomKickOutRequest)
case donationStatus(roomId: Int)
case donationTotal(roomId: Int)
case getDonationMessageList(roomId: Int)
case deleteDonationMessage(roomId: Int, messageUUID: String)
case getUserProfile(roomId: Int, userId: Int)
case getAllMenuPreset(creatorId: Int)
}
extension LiveApi: TargetType {
var baseURL: URL {
return URL(string: BASE_URL)!
}
var path: String {
switch self {
case .roomList:
return "/live/room"
case .recentVisitRoomUsers:
return "/live/room/recent_visit_room/users"
case .getReservations:
return "/live/reservation"
case .getReservation(let reservationId):
return "/live/reservation/\(reservationId)"
case .cancelReservation:
return "/live/reservation/cancel"
case .getRoomDetail(let roomId):
return "/live/room/detail/\(roomId)"
case .makeReservation:
return "/live/reservation"
case .enterRoom:
return "/live/room/enter"
case .getTags:
return "/live/tag"
case .getRecentRoomInfo:
return "/live/room/recent-room-info"
case .createRoom:
return "/live/room"
case .startLive:
return "/live/room/start"
case .cancelRoom:
return "/live/room/cancel"
case .editLiveRoomInfo(let roomId, _):
return "/live/room/\(roomId)"
case .quitRoom:
return "/live/room/quit"
case .getRoomInfo(let roomId):
return "/live/room/info/\(roomId)"
case .donation:
return "/live/room/donation"
case .refundDonation(let roomId):
return "/live/room/donation/refund/\(roomId)"
case .setListener:
return "/live/room/info/set/listener"
case .setSpeaker:
return "/live/room/info/set/speaker"
case .setManager:
return "/live/room/info/set/manager"
case .kickOut:
return "/live/room/kick-out"
case .donationStatus(let roomId):
return "/live/room/\(roomId)/donation-list"
case .donationTotal(let roomId):
return "/live/room/\(roomId)/donation-total"
case .getDonationMessageList:
return "/live/room/donation-message"
case .deleteDonationMessage:
return "/live/room/donation-message"
case .getUserProfile(let roomId, let userId):
return "/live/room/\(roomId)/profile/\(userId)"
case .getAllMenuPreset:
return "/live/room/menu/all"
}
}
var method: Moya.Method {
switch self {
case .roomList, .recentVisitRoomUsers, .getReservations, .getReservation, .getRoomDetail, .getTags, .getRecentRoomInfo, .getRoomInfo, .donationStatus, .donationTotal, .getDonationMessageList, .getUserProfile, .getAllMenuPreset:
return .get
case .makeReservation, .enterRoom, .createRoom, .quitRoom, .donation, .refundDonation, .kickOut:
return .post
case .setListener, .setSpeaker, .setManager, .cancelReservation, .startLive, .cancelRoom, .editLiveRoomInfo:
return .put
case .deleteDonationMessage:
return .delete
}
}
var task: Moya.Task {
switch self {
case .roomList(let request):
var parameters = [
"timezone": request.timezone,
"status": request.status.rawValue,
"page": request.page - 1,
"size": request.size,
] as [String : Any]
if let dateString = request.dateString {
parameters["dateString"] = dateString
}
return .requestParameters(
parameters: parameters,
encoding: URLEncoding.queryString)
case .recentVisitRoomUsers, .getTags, .getRecentRoomInfo, .getRoomInfo, .refundDonation, .donationStatus, .donationTotal, .getUserProfile:
return .requestPlain
case .getReservations(let isActive):
let parameters = [
"timezone": TimeZone.current.identifier,
"isActive": isActive
] as [String : Any]
return .requestParameters(
parameters: parameters,
encoding: URLEncoding.queryString
)
case .getReservation:
let parameters = ["timezone": TimeZone.current.identifier] as [String : Any]
return .requestParameters(
parameters: parameters,
encoding: URLEncoding.queryString
)
case .cancelReservation(let request):
return .requestJSONEncodable(request)
case .getRoomDetail:
let parameters = ["timezone": TimeZone.current.identifier] as [String: Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)
case .makeReservation(let request):
return .requestJSONEncodable(request)
case .enterRoom(let request):
return .requestJSONEncodable(request)
case .createRoom(let parameters):
return .uploadMultipart(parameters)
case .startLive(let request):
return .requestJSONEncodable(request)
case .cancelRoom(let request):
return .requestJSONEncodable(request)
case .editLiveRoomInfo(_, let parameters):
return .uploadMultipart(parameters)
case .quitRoom(let roomId):
return .requestParameters(parameters: ["id": roomId], encoding: URLEncoding.queryString)
case .donation(let request):
return .requestJSONEncodable(request)
case .setListener(let request), .setSpeaker(let request), .setManager(let request):
return .requestJSONEncodable(request)
case .kickOut(let request):
return .requestJSONEncodable(request)
case .getDonationMessageList(let roomId):
return .requestParameters(parameters: ["roomId": roomId], encoding: URLEncoding.queryString)
case .deleteDonationMessage(let roomId, let messageUUID):
return .requestJSONEncodable(DeleteLiveRoomDonationMessage(roomId: roomId, messageUUID: messageUUID))
case .getAllMenuPreset(let creatorId):
return .requestParameters(parameters: ["creatorId" : creatorId], encoding: URLEncoding.queryString)
}
}
var headers: [String : String]? {
return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
}
}