import 'package:drift/drift.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:timetrack/core/database/connection/connection_stub.dart' if (dart.library.io) 'package:timetrack/core/database/connection/connection_native.dart' if (dart.library.html) 'package:timetrack/core/database/connection/connection_web.dart'; import 'package:timetrack/core/database/tables/projects_table.dart'; import 'package:timetrack/core/database/tables/time_entries_table.dart'; import 'package:timetrack/core/database/tables/tags_table.dart'; import 'package:timetrack/core/database/tables/time_entry_tags_table.dart'; import 'package:timetrack/core/database/daos/projects_dao.dart'; import 'package:timetrack/core/database/daos/time_entries_dao.dart'; import 'package:timetrack/core/database/daos/tags_dao.dart'; part 'app_database.g.dart'; @DriftDatabase( tables: [Projects, TimeEntries, Tags, TimeEntryTags], daos: [ProjectsDao, TimeEntriesDao, TagsDao], ) class AppDatabase extends _$AppDatabase { AppDatabase([QueryExecutor? executor]) : super(executor ?? openDatabaseConnection()); @override int get schemaVersion => 1; @override MigrationStrategy get migration => MigrationStrategy( onCreate: (m) => m.createAll(), onUpgrade: (m, from, to) async { // Future migrations go here }, ); } @Riverpod(keepAlive: true) AppDatabase appDatabase(AppDatabaseRef ref) { final db = AppDatabase(); ref.onDispose(db.close); return db; }