CarbSetup.swift 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 try await carbsFetchContext.perform {
  26. guard let fetchedResults = results as? [CarbEntryStored] else {
  27. throw CoreDataError.fetchError(function: #function, file: #file)
  28. }
  29. return fetchedResults.map(\.objectID)
  30. }
  31. }
  32. @MainActor private func updateCarbsArray(with objects: [CarbEntryStored]) {
  33. carbsFromPersistence = objects
  34. }
  35. func setupFPUsArray() {
  36. Task {
  37. do {
  38. let ids = try await self.fetchFPUs()
  39. let fpuObjects: [CarbEntryStored] = try await CoreDataStack.shared
  40. .getNSManagedObject(with: ids, context: viewContext)
  41. await updateFPUsArray(with: fpuObjects)
  42. } catch {
  43. debugPrint("\(DebuggingIdentifiers.failed) Error fetching FPU objects: \(error) in \(#file):\(#line)")
  44. }
  45. }
  46. }
  47. private func fetchFPUs() async throws -> [NSManagedObjectID] {
  48. let results = try await CoreDataStack.shared.fetchEntitiesAsync(
  49. ofType: CarbEntryStored.self,
  50. onContext: fpuFetchContext,
  51. predicate: NSPredicate.fpusForChart,
  52. key: "date",
  53. ascending: false
  54. )
  55. return try await fpuFetchContext.perform {
  56. guard let fetchedResults = results as? [CarbEntryStored] else {
  57. throw CoreDataError.fetchError(function: #function, file: #file)
  58. }
  59. return fetchedResults.map(\.objectID)
  60. }
  61. }
  62. @MainActor private func updateFPUsArray(with objects: [CarbEntryStored]) {
  63. fpusFromPersistence = objects
  64. }
  65. }