import 'package:diameter/main.dart'; import 'package:diameter/models/log_bolus.dart'; import 'package:diameter/models/settings.dart'; import 'package:diameter/utils/date_time_utils.dart'; import 'package:objectbox/objectbox.dart'; import 'package:diameter/objectbox.g.dart' show LogEntry_; @Entity(uid: 752131069307970560) @Sync() class LogEntry { static final Box box = objectBox.store.box(); // properties int id; bool deleted; @Property(type: PropertyType.date) DateTime time; int? mgPerDl; double? mmolPerL; double? glucoseTrend; String? notes; // constructor LogEntry({ this.id = 0, this.deleted = false, required this.time, this.mgPerDl, this.mmolPerL, this.glucoseTrend, this.notes, }); // methods static LogEntry? get(int id) => id == 0 ? null : box.get(id); static List getAll() => box.getAll(); static void put(LogEntry logEntry) => box.put(logEntry); static void remove(int id) { final item = box.get(id); if (item != null) { item.deleted = true; box.put(item); } } static bool hasUncorrectedGlucose(int id) { final entry = box.get(id); if (((entry?.mgPerDl ?? 0) > Settings.targetMgPerDl || (entry?.mmolPerL ?? 0) > Settings.targetMmolPerL)) { return !LogBolus.glucoseBolusForEntryExists(id); } return false; } static Map> getDailyEntryMap() { Map> dateMap = >{}; QueryBuilder allByDate = box .query(LogEntry_.deleted.equals(false)) ..order(LogEntry_.time, flags: Order.descending); List entries = allByDate.build().find(); DateTime? date; for (LogEntry entry in entries) { date = DateTime.utc(entry.time.year, entry.time.month, entry.time.day); dateMap.putIfAbsent(date, () => []).add(entry); } return dateMap; } @override String toString() { return DateTimeUtils.displayDateTime(time); } }