CarbEntryStored+helper.swift 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import CoreData
  2. import Foundation
  3. extension NSPredicate {
  4. static var fpusForChart: NSPredicate {
  5. let date = Date.oneDayAgo
  6. return NSPredicate(format: "isFPU == true AND date >= %@", date as NSDate)
  7. }
  8. static var carbsForChart: NSPredicate {
  9. let date = Date.oneDayAgo
  10. return NSPredicate(format: "isFPU == false AND date >= %@", date as NSDate)
  11. }
  12. }
  13. extension CarbEntryStored {
  14. static func fetch(
  15. _ predicate: NSPredicate = .predicateForOneDayAgo,
  16. fetchLimit: Int = 100,
  17. ascending: Bool = false
  18. ) -> NSFetchRequest<CarbEntryStored> {
  19. let request = CarbEntryStored.fetchRequest() as NSFetchRequest<CarbEntryStored>
  20. request.sortDescriptors = [NSSortDescriptor(keyPath: \CarbEntryStored.date, ascending: ascending)]
  21. request.fetchLimit = fetchLimit
  22. request.predicate = predicate
  23. return request
  24. }
  25. }
  26. extension CarbEntryStored: Encodable {
  27. enum CodingKeys: String, CodingKey {
  28. case actualDate
  29. case created_at
  30. case carbs
  31. case fat
  32. case id
  33. case isFPU
  34. case note
  35. case protein
  36. case enteredBy
  37. }
  38. public func encode(to encoder: Encoder) throws {
  39. var container = encoder.container(keyedBy: CodingKeys.self)
  40. let dateFormatter = ISO8601DateFormatter()
  41. dateFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
  42. let formattedDate = dateFormatter.string(from: date ?? Date())
  43. try container.encode(formattedDate, forKey: .actualDate)
  44. try container.encode(formattedDate, forKey: .created_at)
  45. // TODO: handle this conditionally; pass in the enteredBy string (manual entry or via NS or Apple Health)
  46. try container.encode("Open-iAPS", forKey: .enteredBy)
  47. try container.encode(carbs, forKey: .carbs)
  48. try container.encode(fat, forKey: .fat)
  49. try container.encode(isFPU, forKey: .isFPU)
  50. try container.encode(note, forKey: .note)
  51. try container.encode(protein, forKey: .protein)
  52. try container.encode(id, forKey: .id)
  53. }
  54. }