cyberhybridhub/lib/data/local/app_database.dart
2026-05-20 10:22:58 -05:00

72 lines
2.1 KiB
Dart

import 'package:drift/drift.dart';
import 'package:drift_flutter/drift_flutter.dart';
import 'tables.dart';
part 'app_database.g.dart';
@DriftDatabase(tables: <Type>[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<UserProfileRow?> watchProfile(String firebaseUid) {
return (select(userProfileRows)
..where((UserProfileRows t) => t.firebaseUid.equals(firebaseUid)))
.watchSingleOrNull();
}
Future<UserProfileRow?> getProfile(String firebaseUid) {
return (select(userProfileRows)
..where((UserProfileRows t) => t.firebaseUid.equals(firebaseUid)))
.getSingleOrNull();
}
Future<void> upsertProfile(UserProfileRowsCompanion row) {
return into(userProfileRows).insertOnConflictUpdate(row);
}
Future<void> deleteProfile(String firebaseUid) {
return (delete(userProfileRows)
..where((UserProfileRows t) => t.firebaseUid.equals(firebaseUid)))
.go();
}
Future<void> clearAllProfiles() {
return delete(userProfileRows).go();
}
Future<List<SyncOutboxRow>> pendingOutbox(String firebaseUid) {
return (select(syncOutboxRows)
..where((SyncOutboxRows t) => t.firebaseUid.equals(firebaseUid))
..orderBy(<OrderClauseGenerator<SyncOutboxRows>>[
(SyncOutboxRows t) => OrderingTerm(expression: t.createdAt),
]))
.get();
}
Future<int> enqueueOutbox(SyncOutboxRowsCompanion row) {
return into(syncOutboxRows).insert(row);
}
Future<void> deleteOutboxEntry(int id) {
return (delete(syncOutboxRows)
..where((SyncOutboxRows t) => t.id.equals(id)))
.go();
}
Future<void> clearOutbox(String firebaseUid) {
return (delete(syncOutboxRows)
..where((SyncOutboxRows t) => t.firebaseUid.equals(firebaseUid)))
.go();
}
Future<void> clearAllOutbox() => delete(syncOutboxRows).go();
}