import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart'; import 'tables.dart'; part 'app_database.g.dart'; @DriftDatabase(tables: [UserProfileRows, SyncOutboxRows]) class AppDatabase extends _$AppDatabase { AppDatabase([QueryExecutor? executor]) : super(executor ?? _openConnection()); @override int get schemaVersion => 1; static QueryExecutor _openConnection() { return driftDatabase(name: 'cyberhybridhub'); } Stream watchProfile(String firebaseUid) { return (select(userProfileRows) ..where((UserProfileRows t) => t.firebaseUid.equals(firebaseUid))) .watchSingleOrNull(); } Future getProfile(String firebaseUid) { return (select(userProfileRows) ..where((UserProfileRows t) => t.firebaseUid.equals(firebaseUid))) .getSingleOrNull(); } Future upsertProfile(UserProfileRowsCompanion row) { return into(userProfileRows).insertOnConflictUpdate(row); } Future deleteProfile(String firebaseUid) { return (delete(userProfileRows) ..where((UserProfileRows t) => t.firebaseUid.equals(firebaseUid))) .go(); } Future clearAllProfiles() { return delete(userProfileRows).go(); } Future> pendingOutbox(String firebaseUid) { return (select(syncOutboxRows) ..where((SyncOutboxRows t) => t.firebaseUid.equals(firebaseUid)) ..orderBy(>[ (SyncOutboxRows t) => OrderingTerm(expression: t.createdAt), ])) .get(); } Future enqueueOutbox(SyncOutboxRowsCompanion row) { return into(syncOutboxRows).insert(row); } Future deleteOutboxEntry(int id) { return (delete(syncOutboxRows) ..where((SyncOutboxRows t) => t.id.equals(id))) .go(); } Future clearOutbox(String firebaseUid) { return (delete(syncOutboxRows) ..where((SyncOutboxRows t) => t.firebaseUid.equals(firebaseUid))) .go(); } Future clearAllOutbox() => delete(syncOutboxRows).go(); }