diff --git a/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift b/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift index a5a92c9..624bf03 100644 --- a/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift +++ b/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift @@ -7,9 +7,63 @@ // import Foundation +import ReviewsiTunesKit extension FeedViewController { final class ViewModel: ObservableObject { + // MARK: Constants + private let iTunesService: iTunesService + + // MARK: Properties + @Published var loading: Bool = false + + var items: [Review] = [] + + // MARK: Initialisers + init(_ configuration: Configuration = .init()) { + self.iTunesService = .init(configuration: .init( + session: configuration.session + )) + } + + // MARK: Functions + func fetch() { + Task { + loading = true + + do { + let output = try await iTunesService.getReviews(.init( + appID: "474495017", + countryCode: "nl" + )) + + 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 + } + } + } +} + +// MARK: - Structs +extension FeedViewController.ViewModel { + struct Configuration { + let session: URLSessionConfiguration = .ephemeral } } diff --git a/Libraries/iTunes/Kit/Extensions/ServiceConfiguration+Inits.swift b/Libraries/iTunes/Kit/Extensions/ServiceConfiguration+Inits.swift index f156e71..2962ba9 100644 --- a/Libraries/iTunes/Kit/Extensions/ServiceConfiguration+Inits.swift +++ b/Libraries/iTunes/Kit/Extensions/ServiceConfiguration+Inits.swift @@ -13,7 +13,7 @@ import ReviewsFeedKit extension ServiceConfiguration { // MARK: Initialisers - init(session: URLSessionConfiguration = .ephemeral) { + public init(session: URLSessionConfiguration = .ephemeral) { self.init( host: .iTunes, session: session,