GlucoseSetup.swift 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import CoreData
  2. import Foundation
  3. extension Home.StateModel {
  4. func setupGlucoseArray() {
  5. Task {
  6. let ids = await self.fetchGlucose()
  7. let glucoseObjects: [GlucoseStored] = await CoreDataStack.shared.getNSManagedObject(with: ids, context: viewContext)
  8. await updateGlucoseArray(with: glucoseObjects)
  9. }
  10. }
  11. private func fetchGlucose() async -> [NSManagedObjectID] {
  12. let results = await CoreDataStack.shared.fetchEntitiesAsync(
  13. ofType: GlucoseStored.self,
  14. onContext: glucoseFetchContext,
  15. predicate: NSPredicate.glucose,
  16. key: "date",
  17. ascending: true,
  18. fetchLimit: 288
  19. )
  20. return await glucoseFetchContext.perform {
  21. guard let fetchedResults = results as? [GlucoseStored] else { return [] }
  22. // Update Main Chart Y Axis Values
  23. // Perform everything on "context" to be thread safe
  24. self.yAxisChartData(glucoseValues: fetchedResults)
  25. return fetchedResults.map(\.objectID)
  26. }
  27. }
  28. @MainActor private func updateGlucoseArray(with objects: [GlucoseStored]) {
  29. glucoseFromPersistence = objects
  30. latestTwoGlucoseValues = Array(objects.suffix(2))
  31. }
  32. }