Newer
Older
bremer-ios-app / BremerApp / ViewModel / LatestRecentlyPlayedAudioViewModel.swift
yhornisse on 10 Sep 2023 2 KB Initial Commit
//
//  LatestRecentlyPlayedAudioViewModel.swift
//  Bremer
//
//  Created by yhornisse on 2023/08/22.
//

import Combine
import Foundation

public final class LatestRecentlyPlayedAudioViewModel : ObservableObject {
    
    @Published
    var result : [Audio] = []
    @Published
    var hasError = false
    @Published
    var messageText : String = ""
    @Published
    var bremerApiBaseUrl = ""
    @Published
    var disposables = [AnyCancellable]()

    func getAllAudio() {
        sendApi(url: URL(string: "\(bremerApiBaseUrl)/audio/history"
            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!)
        .sink { completion in
            switch completion {
            case .finished:
                break
            case .failure(let error):
                self.hasError = true
                self.messageText = getApiFailureTextByError(error)
                self.result = []
            }
        } receiveValue: { (response : AudioApiResponse) in
            self.result = response.audioList
            if (self.result.isEmpty) {
                self.hasError = false
                self.messageText = "再生する曲がありません"
            } else {
                self.hasError = false
                self.messageText = ""
            }
        }
        .store(in: &disposables)
    }

    func updateAudio(slug:String, audioName:String, artistName:String, albumName:String) {
        sendApi(url: URL(string: "\(bremerApiBaseUrl)/audio/\(slug)"
            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!,
                httpMethod: "PUT",
                requestBody: AudioRequest(name: audioName, artist: artistName, album: albumName))
        .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 = ""
        }
        .store(in: &disposables)
    }
}