// // FeedViewModel.swift // ReviewsFeed // // Created by Javier Cicchelli on 18/03/2024. // Copyright © 2024 Röck+Cöde. All rights reserved. // import Foundation import ReviewsiTunesKit extension FeedViewController { final class ViewModel: ObservableObject { // MARK: Type aliases typealias Configuration = FeedViewController.Configuration // MARK: Constants private let configuration: Configuration // MARK: Properties @Published var loading: Bool = false var items: [Review] = [] // MARK: Initialisers init(configuration: Configuration = .init()) { self.configuration = configuration } // MARK: Computed lazy private var iTunesService: iTunesService = { .init(configuration: .init(session: configuration.session)) }() // MARK: Functions func fetch() { Task { loading = true do { let output = try await iTunesService.getReviews(.init( appID: configuration.appID, countryCode: configuration.countryCode )) items = output.reviews .map { review -> Review in .init( author: review.author, comment: review.content, id: review.id, rating: .init( stars: review.rating, appVersion: review.version ), title: review.title ) } } catch { // TODO: handle this error gracefully. } loading = false } } } }