blob: 698b56ed0c5db25f32e74ef088674cb2e029bac1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
//
// 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") { (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)
}
}
}
|