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 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 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 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> findBy({ final int? id, final String? name, final String? orderBy, }) async { final Isar isar = await _isarService.getDatabase(); final QueryBuilder baseQuery = isar .accounts .filter() .optional( id != null, (final QueryBuilder q) => q.idEqualTo(id!), ) .optional( name != null && name.isNotEmpty, (final QueryBuilder q) => q.nameMatches('*$name*', caseSensitive: false), ); switch (orderBy) { case 'nameAsc': return baseQuery.sortByName().findAll(); case 'nameDesc': return baseQuery.sortByNameDesc().findAll(); default: return baseQuery.findAll(); } } }