// // PenguinItemPresenter.swift // foray // // Created by Nicholas Tay on 24/3/2022. // import Foundation class PenguinItemPresenter { let fetcher = ForayFetcher() func fetch(receiver: @escaping ([PenguinItemViewModel]) -> ()) { fetcher.fetch(url: "https://users.windblume.net/~nick/upload/dummy.json") { [weak self] (apiItems: [PenguinItemModel]) in // Callback to main thread here // There probably is a nicer way to do it, but we will DispatchQueue it back // from the Presenter-level for now (main thread from VC onwards) DispatchQueue.main.async { guard let self = self else { return } receiver(self.transform(models: apiItems)) } } } 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) } } }