From 59ed3b0caf1294f0f194946421d8617f67cb4c18 Mon Sep 17 00:00:00 2001 From: eduardopietre Date: Wed, 12 Jan 2022 20:26:07 -0300 Subject: [PATCH] Created TreatmentEntryAccessor newTreatmentsIfRequired and TreatmentNSResponse asNewTreatmentEntry. --- .../accessors/TreatmentEntryAccessor.swift | 12 ++++++++++++ xdrip/Treatments/TreatmentNSResponse.swift | 14 ++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/xdrip/Core Data/accessors/TreatmentEntryAccessor.swift b/xdrip/Core Data/accessors/TreatmentEntryAccessor.swift index 79946f08..0b14a2cf 100644 --- a/xdrip/Core Data/accessors/TreatmentEntryAccessor.swift +++ b/xdrip/Core Data/accessors/TreatmentEntryAccessor.swift @@ -151,6 +151,18 @@ class TreatmentEntryAccessor { return treatment } + public func newTreatmentsIfRequired(responses: [TreatmentNSResponse]) -> [TreatmentEntry] { + var newTreatments: [TreatmentEntry] = [] + + for response in responses { + if !self.existsTreatmentWithId(response.id), let treatment = response.asNewTreatmentEntry(nsManagedObjectContext: coreDataManager.mainManagedObjectContext) { + newTreatments.append(treatment) + } + } + + return newTreatments + } + // MARK: - private helper functions /// returnvalue can be empty array diff --git a/xdrip/Treatments/TreatmentNSResponse.swift b/xdrip/Treatments/TreatmentNSResponse.swift index 3e2b8d16..425f24e1 100644 --- a/xdrip/Treatments/TreatmentNSResponse.swift +++ b/xdrip/Treatments/TreatmentNSResponse.swift @@ -7,6 +7,7 @@ // import Foundation +import CoreData /// Class that represents the Nightscout response for adding a single new treatment. /// NS API docs states: @@ -71,4 +72,17 @@ public struct TreatmentNSResponse { return entry.date.ISOStringFromDate() == self.createdAt && entry.treatmentType == self.eventType && entry.value == self.value } + // Converts self (TreatmentNSResponse) to TreatmentEntry. + // Be extra carefull when creating new TreatmentEntry, will impact core data. + public func asNewTreatmentEntry(nsManagedObjectContext: NSManagedObjectContext) -> TreatmentEntry? { + guard let date = Date.fromISOString(createdAt) else { + return nil + } + + var treatment = TreatmentEntry(date: date, value: value, treatmentType: eventType, nsManagedObjectContext: nsManagedObjectContext) + // Since this entry originated at nightscout, set uploaded as true. + treatment.uploaded = true + return treatment + } + }