Feat: Ersetzt die Isar-Datenbank durch die drift-Datenbank

This commit is contained in:
2025-12-24 01:04:38 +01:00
parent 673d7de21c
commit c11515d447
23 changed files with 15995 additions and 2601 deletions

View File

@@ -1,32 +1,28 @@
import 'package:isar/isar.dart';
import 'package:drift/drift.dart';
import '../Entities/account.dart';
import '../Services/isar_service.dart';
import '../Entities/drift_database.dart';
import '../Services/database_service.dart';
/// Funktionen zum interagieren mit der Datenbank für die Konten
class AccountRepository {
final IsarService _isarService = IsarService();
final AppDatabase _db = DatabaseService().database;
/// Fügt ein neues Konto zur Datenbank hinzu
Future<Account?> add(final Account account) async {
final Isar isar = await _isarService.getDatabase();
final int id = await isar.writeTxn(() => isar.accounts.put(account));
Future<Account?> add(final AccountsCompanion account) async {
final int id = await _db.into(_db.accounts).insert(account);
return find(id);
}
/// Entfernt ein Konto aus der Datenbank
Future<bool> remove(final Account account) async {
final Isar isar = await _isarService.getDatabase();
return isar.writeTxn(() => isar.accounts.delete(account.id));
Future<int> remove(final Account account) async {
return (_db.delete(_db.accounts)
..where((t) => t.id.equals(account.id))).go();
}
/// Sucht ein Konto anhand seiner Id aus der Datenbank
Future<Account?> find(final int id) async {
final Isar isar = await _isarService.getDatabase();
return isar.accounts.get(id);
return (_db.select(_db.accounts)
..where((t) => t.id.equals(id))).getSingleOrNull();
}
/// Sucht Konten anhand der gegebenen Parameter aus der Datenbank
@@ -35,31 +31,27 @@ class AccountRepository {
final String? name,
final String? orderBy,
}) async {
final Isar isar = await _isarService.getDatabase();
final query = _db.select(_db.accounts);
final QueryBuilder<Account, Account, QAfterFilterCondition> baseQuery = isar
.accounts
.filter()
.optional(
id != null,
(final QueryBuilder<Account, Account, QFilterCondition> q) =>
q.idEqualTo(id!),
)
.optional(
name != null && name.isNotEmpty,
(final QueryBuilder<Account, Account, QAfterFilterCondition> q) =>
q.nameMatches('*$name*', caseSensitive: false),
);
switch (orderBy) {
case 'nameAsc':
return baseQuery.sortByName().findAll();
case 'nameDesc':
return baseQuery.sortByNameDesc().findAll();
default:
return baseQuery.findAll();
if (id != null) {
query.where((t) => t.id.equals(id));
}
if (name != null && name.isNotEmpty) {
query.where((t) => t.name.like('%$name%'));
}
if (orderBy != null) {
switch (orderBy) {
case 'nameAsc':
query.orderBy([(t) => OrderingTerm.asc(t.name)]);
break;
case 'nameDesc':
query.orderBy([(t) => OrderingTerm.desc(t.name)]);
break;
}
}
return query.get();
}
}