// // AllPlaylistViewModel.swift // Bremer // // Created by yhornisse on 2023/08/08. // import Combine import Foundation public final class AllPlaylistViewModel : ObservableObject { @Published var playlists: [Playlist] = [] @Published var hasError = false @Published var messageText : String = "" @Published var disposables = [AnyCancellable]() @Published var bremerApiBaseUrl = "" func getAllPlaylist() { sendApi(url: URL(string: "\(bremerApiBaseUrl)/playlist" .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!) .sink { completion in switch completion { case .finished: break case .failure(let error): self.hasError = true self.messageText = getApiFailureTextByError(error) self.playlists = [] } } receiveValue: { (response : AllPlaylistApiResponse) in self.playlists = response.playlist if (self.playlists.isEmpty) { self.hasError = false self.messageText = "プレイリストがありません" } else { self.hasError = false self.messageText = "" } } .store(in: &disposables) } func createPlaylist(_ name: String) { sendApi(url: URL(string: "\(bremerApiBaseUrl)/playlist" .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!, httpMethod: "POST", requestBody: PlaylistRequest(name: name)) .sink { completion in switch completion { case .finished: break case .failure(let error): self.hasError = true self.messageText = getApiFailureTextByError(error) } } receiveValue: { (response : Any) in self.hasError = false self.messageText = "" self.getAllPlaylist() } .store(in: &disposables) } func updatePlaylist(_ slug: String, _ name: String) { sendApi(url: URL(string: "\(bremerApiBaseUrl)/playlist/\(slug)" .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!, httpMethod: "PUT", requestBody: PlaylistRequest(name: name)) .sink { completion in switch completion { case .finished: break case .failure(let error): self.hasError = true self.messageText = getApiFailureTextByError(error) } } receiveValue: { (response : Any) in self.hasError = false self.messageText = "" self.getAllPlaylist() } .store(in: &disposables) } func deletePlaylist(_ slug: String) { sendApi(url: URL(string: "\(bremerApiBaseUrl)/playlist/\(slug)" .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!, httpMethod: "DELETE") .sink { completion in switch completion { case .finished: break case .failure(let error): self.hasError = true self.messageText = getApiFailureTextByError(error) } } receiveValue: { (response : Any) in self.hasError = false self.messageText = "" self.getAllPlaylist() } .store(in: &disposables) } }