aboutsummaryrefslogblamecommitdiff
path: root/foray/Presenters/PenguinItemPresenter.swift
blob: 2f3730f95550311f5beb115138b12a48c429b23f (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                         









                                                                                                                  















                                                                                                      
//
//  PenguinItemPresenter.swift
//  foray
//
//  Created by Nicholas Tay on 24/3/2022.
//

import Foundation

class PenguinItemPresenter {
    func fetch(receiver: @escaping ([PenguinItemViewModel]) -> ()) {
        ForayNetworkManager.shared
            .fetch(url: "https://users.windblume.net/~nick/upload/dummy.json") { (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 {
                    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)
            }
    }
}