41 lines
919 B
Swift
41 lines
919 B
Swift
//
|
|
// ArtistDetailViewModel.swift
|
|
// furumi_macos
|
|
//
|
|
|
|
import Foundation
|
|
import Observation
|
|
|
|
@MainActor
|
|
@Observable
|
|
final class ArtistDetailViewModel {
|
|
private var service: CatalogService
|
|
private(set) var detail: ArtistDetail?
|
|
private(set) var isLoading = false
|
|
private(set) var error: String?
|
|
|
|
init(service: CatalogService) {
|
|
self.service = service
|
|
}
|
|
|
|
func reset(service: CatalogService) {
|
|
self.service = service
|
|
self.detail = nil
|
|
self.error = nil
|
|
self.isLoading = false
|
|
}
|
|
|
|
func load(artistId: Int64) async {
|
|
guard !isLoading else { return }
|
|
isLoading = true
|
|
error = nil
|
|
defer { isLoading = false }
|
|
do {
|
|
detail = try await service.artistDetail(id: artistId)
|
|
} catch {
|
|
self.error = (error as NSError).localizedDescription
|
|
self.detail = nil
|
|
}
|
|
}
|
|
}
|