GlucoseSetup.swift 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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. )
  19. return await glucoseFetchContext.perform {
  20. guard let fetchedResults = results as? [GlucoseStored] else { return [] }
  21. // Update Main Chart Y Axis Values
  22. // Perform everything on "context" to be thread safe
  23. self.yAxisChartData(glucoseValues: fetchedResults)
  24. return fetchedResults.map(\.objectID)
  25. }
  26. }
  27. @MainActor private func updateGlucoseArray(with objects: [GlucoseStored]) {
  28. glucoseFromPersistence = objects
  29. latestTwoGlucoseValues = Array(objects.suffix(2))
  30. }
  31. }