import 'dart:io'; import 'package:drift/drift.dart'; import 'package:drift/native.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; part 'app_database.g.dart'; /// Persistenz fuer Missionen (Architektur-Doku 4.15): Drift statt Hive, weil /// indexierte Abfragen (Suche nach Name/Ort/Datum) benoetigt werden und das /// Schema kompatibel zu einem kuenftigen lokal-first Server-Sync-Muster /// (Dirty-Flags, Server-IDs) bleiben soll. class Missions extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get name => text()(); TextColumn get location => text().nullable()(); DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); TextColumn get waypointsJson => text()(); BoolColumn get isDirty => boolean().withDefault(const Constant(true))(); TextColumn get serverId => text().nullable()(); } @DriftDatabase(tables: [Missions]) class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); @override int get schemaVersion => 1; static LazyDatabase _openConnection() { return LazyDatabase(() async { final dbFolder = await getApplicationDocumentsDirectory(); final file = File(p.join(dbFolder.path, 'dmc_missions.sqlite')); return NativeDatabase.createInBackground(file); }); } }