66 lines
1.9 KiB
Dart
66 lines
1.9 KiB
Dart
import 'package:isar/isar.dart';
|
|
|
|
import '../Entities/account.dart';
|
|
import '../Services/isar_service.dart';
|
|
|
|
/// Funktionen zum interagieren mit der Datenbank für die Konten
|
|
class AccountRepository {
|
|
final IsarService _isarService = IsarService();
|
|
|
|
/// 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));
|
|
|
|
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));
|
|
}
|
|
|
|
/// 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);
|
|
}
|
|
|
|
/// Sucht Konten anhand der gegebenen Parameter aus der Datenbank
|
|
Future<List<Account>> findBy({
|
|
final int? id,
|
|
final String? name,
|
|
final String? orderBy,
|
|
}) async {
|
|
final Isar isar = await _isarService.getDatabase();
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|