CarbSetup.swift 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import CoreData
  2. import Foundation
  3. extension Home.StateModel {
  4. func setupCarbsArray() {
  5. Task {
  6. do {
  7. let ids = try await self.fetchCarbs()
  8. let carbObjects: [CarbEntryStored] = try await CoreDataStack.shared
  9. .getNSManagedObject(with: ids, context: viewContext)
  10. await updateCarbsArray(with: carbObjects)
  11. } catch {
  12. debugPrint("\(DebuggingIdentifiers.failed) Error fetching carb objects: \(error) in \(#file):\(#line)")
  13. }
  14. }
  15. }
  16. private func fetchCarbs() async throws -> [NSManagedObjectID] {
  17. let results = try await CoreDataStack.shared.fetchEntitiesAsync(
  18. ofType: CarbEntryStored.self,
  19. onContext: carbsFetchContext,
  20. predicate: NSPredicate.carbsForChart,
  21. key: "date",
  22. ascending: false,
  23. batchSize: 5
  24. )
  25. return await carbsFetchContext.perform {
  26. guard let fetchedResults = results as? [CarbEntryStored] else { return [] }
  27. return fetchedResults.map(\.objectID)
  28. }
  29. }
  30. @MainActor private func updateCarbsArray(with objects: [CarbEntryStored]) {
  31. carbsFromPersistence = objects
  32. }
  33. func setupFPUsArray() {
  34. Task {
  35. do {
  36. let ids = try await self.fetchFPUs()
  37. let fpuObjects: [CarbEntryStored] = try await CoreDataStack.shared
  38. .getNSManagedObject(with: ids, context: viewContext)
  39. await updateFPUsArray(with: fpuObjects)
  40. } catch {
  41. debugPrint("\(DebuggingIdentifiers.failed) Error fetching FPU objects: \(error) in \(#file):\(#line)")
  42. }
  43. }
  44. }
  45. private func fetchFPUs() async throws -> [NSManagedObjectID] {
  46. let results = try await CoreDataStack.shared.fetchEntitiesAsync(
  47. ofType: CarbEntryStored.self,
  48. onContext: fpuFetchContext,
  49. predicate: NSPredicate.fpusForChart,
  50. key: "date",
  51. ascending: false
  52. )
  53. return await fpuFetchContext.perform {
  54. guard let fetchedResults = results as? [CarbEntryStored] else { return [] }
  55. return fetchedResults.map(\.objectID)
  56. }
  57. }
  58. @MainActor private func updateFPUsArray(with objects: [CarbEntryStored]) {
  59. fpusFromPersistence = objects
  60. }
  61. }