import 'package:diameter/main.dart'; import 'package:diameter/models/basal_profile.dart'; import 'package:diameter/models/bolus_profile.dart'; import 'package:diameter/models/log_entry.dart'; import 'package:diameter/models/log_event_type.dart'; import 'package:diameter/objectbox.g.dart'; // ignore: unnecessary_import import 'package:objectbox/objectbox.dart'; @Entity(uid: 4303325892753185970) class LogEvent { static final Box box = objectBox.store.box(); // properties int id; bool deleted; @Property(type: PropertyType.date) DateTime time; @Property(type: PropertyType.date) DateTime? endTime; bool hasEndTime; int? reminderDuration; String? notes; // relations final logEntry = ToOne(); final endLogEntry = ToOne(); final eventType = ToOne(); final bolusProfile = ToOne(); final basalProfile = ToOne(); // constructor LogEvent({ this.id = 0, this.deleted = false, required this.time, this.endTime, this.hasEndTime = false, this.reminderDuration, this.notes, }); // methods static LogEvent? get(int id) => box.get(id); static void put(LogEvent logEvent) => box.put(logEvent); static void remove(int id) { final item = box.get(id); if (item != null) { item.deleted = true; box.put(item); } } static List getAllOngoing() { QueryBuilder query = box.query(LogEvent_.hasEndTime.equals(true) & LogEvent_.endTime.isNull() & LogEvent_.deleted.equals(false)) ..order(LogEvent_.time); return query.build().find(); } static List getAllActiveForTime(DateTime? dateTime) { if (dateTime != null) { QueryBuilder builder = box.query( LogEvent_.hasEndTime.equals(true) & LogEvent_.deleted.equals(false)) ..order(LogEvent_.time); final eventsWithEndTime = builder.build().find(); return eventsWithEndTime.where((event) { return (!dateTime.isBefore(event.time)) && !dateTime.isAfter(event.endTime ?? DateTime.now()); }).toList(); } return []; } static List getAllForEntry(int id) { QueryBuilder builder = box.query(LogEvent_.deleted.equals(false)) ..order(LogEvent_.time); builder.link(LogEvent_.logEntry, LogEntry_.id.equals(id)); return builder.build().find(); } static List getAllEndedByEntry(int id) { QueryBuilder builder = box.query(LogEvent_.deleted.equals(false)) ..order(LogEvent_.time); builder.link(LogEvent_.endLogEntry, LogEntry_.id.equals(id)); return builder.build().find(); } @override String toString() { return eventType.target?.value ?? ''; } }