// // PenguinItemPresenter.swift // foray // // Created by Nicholas Tay on 24/3/2022. // import Foundation class PenguinItemPresenter { private struct Constants { static let apiEndpoint = "https://users.windblume.net/~nick/upload/dummy.json" } let fetcher = ForayFetcher() func fetch() async -> [PenguinItemViewModel] { guard let endpoint = URL(string: Constants.apiEndpoint), let apiItems: [PenguinItemModel] = try? await fetcher.fetch(url: endpoint) else { return [] } return transform(models: apiItems) } private func transform(models: [PenguinItemModel]) -> [PenguinItemViewModel] { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" return models .sorted { $0.releaseDate < $1.releaseDate } .map { PenguinItemViewModel(type: $0.type, releaseDateFormatted: dateFormatter.string(from: $0.releaseDate), year: Calendar.current.component(.year, from: $0.releaseDate), id: $0.id, name: $0.name) } } }