Skip to content

Instantly share code, notes, and snippets.

@matteospada
Created February 8, 2023 10:03
Show Gist options
  • Select an option

  • Save matteospada/a78d91f0255a6eba485eb1bd20241edf to your computer and use it in GitHub Desktop.

Select an option

Save matteospada/a78d91f0255a6eba485eb1bd20241edf to your computer and use it in GitHub Desktop.
//
// 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