import 'package:drift/drift.dart'; import '../app_database.dart'; import '../tables.dart'; part 'activity_dao.g.dart'; @DriftAccessor(tables: [Activities, EntryActivities, MoodEntries]) class ActivityDao extends DatabaseAccessor with _$ActivityDaoMixin { ActivityDao(super.db); Stream> watchAllActivities() => (select(activities)..orderBy([(t) => OrderingTerm.asc(t.sortOrder)])) .watch(); Future insertActivity(ActivitiesCompanion activity) => into(activities).insert(activity); Future deleteActivity(int id) => (delete(activities)..where((t) => t.id.equals(id))).go(); // How many times each activity was logged — used by charts Future> getActivityFrequency( DateTime start, DateTime end) async { final entries = await (select(moodEntries) ..where((t) => t.timestamp.isBetweenValues(start, end))) .get(); final entryIds = entries.map((e) => e.id).toList(); if (entryIds.isEmpty) return {}; final rows = await (select(entryActivities) ..where((t) => t.entryId.isIn(entryIds))) .get(); final Map freq = {}; for (final r in rows) { freq[r.activityId] = (freq[r.activityId] ?? 0) + 1; } return freq; } }