Created
February 8, 2023 10:03
-
-
Save matteospada/a78d91f0255a6eba485eb1bd20241edf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // KeywordViewModel.swift | |
| // Created by Matteo Spada on 09/07/22. | |
| // | |
| import Foundation | |
| import CoreData | |
| import SwiftUI | |
| class KeywordViewModel: ObservableObject, Identifiable, Equatable { | |
| static func == (lhs: KeywordViewModel, rhs: KeywordViewModel) -> Bool { | |
| return lhs.id == rhs.id | |
| } | |
| private let keyword: Keyword | |
| func checkDate(days: Int, moreRecent: DataPointViewModel, dataPoints: [DataPointViewModel]) -> DataPointViewModel? { | |
| // DEVE ESSERE MINORE DI main.moveOf(days: days) | |
| var conform: DataPointViewModel? | |
| for datapoint in dataPoints { | |
| if datapoint.date <= moreRecent.date.moveOf(days: days) { | |
| if conform?.date != nil { | |
| if conform!.date < datapoint.date { | |
| conform = datapoint | |
| } | |
| } else { | |
| conform = datapoint | |
| } | |
| } | |
| } | |
| return conform | |
| } | |
| init(keyword: Keyword) { | |
| self.keyword = keyword | |
| } | |
| var text: String { | |
| keyword.text ?? "" | |
| } | |
| var lastUpdate: Date { | |
| keyword.lastUpdate ?? Date() | |
| } | |
| var store: String { | |
| keyword.store ?? "" | |
| } | |
| var id: NSManagedObjectID { | |
| keyword.objectID | |
| } | |
| var appId: String { | |
| keyword.application!.appID | |
| } | |
| var note: String { | |
| keyword.note ?? "" | |
| } | |
| var change: Int { | |
| guard let lessRecent = lessRecent?.ranking else { | |
| return 0 | |
| } | |
| if moreRecent.ranking == 1000 { | |
| return 0 | |
| } | |
| return lessRecent - moreRecent.ranking | |
| } | |
| var reccomandation: RecommendationData { | |
| guard let data = try? JSONDecoder().decode(RecommendationData.self, from: keyword.recommendation ?? Data()) else { | |
| return RecommendationData(data: [Recommendation]()) | |
| } | |
| return data | |
| } | |
| var dataPoints: [DataPointViewModel] { | |
| // var datapointsToUpdate = [NSManagedObjectID]() | |
| guard let dataPoints = keyword.dataPoints, let myDataPoints = (dataPoints.allObjects as? [DataPoint]) else { | |
| return [] | |
| } | |
| return myDataPoints.map(DataPointViewModel.init) | |
| } | |
| var moreRecent: DataPointViewModel { | |
| var firstDataPoint = dataPoints[0] | |
| for dataPoint in dataPoints where dataPoint.date > firstDataPoint.date { | |
| firstDataPoint = dataPoint | |
| } | |
| return firstDataPoint | |
| } | |
| var lessRecent: DataPointViewModel? { | |
| var firstDataPoint = dataPoints[0] | |
| for dataPoint in dataPoints where dataPoint.date < firstDataPoint.date && dataPoint.ranking != 1000 { | |
| firstDataPoint = dataPoint | |
| } | |
| // First Data point deve essere un numero che va da 1 a 100 | |
| if firstDataPoint.ranking == 1000 { | |
| return nil | |
| } | |
| return firstDataPoint | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment