import 'package:drift/drift.dart'; import '../Entities/drift_database.dart'; import '../Services/database_service.dart'; /// Funktionen zum interagieren mit der Datenbank für die Transaktionen class TransactionRepository { final AppDatabase _db = DatabaseService().database; /// Fügt eine neue Transaktion zur Datenbank hinzu Future add(final TransactionsCompanion transaction) async { final int id = await _db.into(_db.transactions).insert(transaction); return find(id); } /// Entfernt eine Transaktion aus der Datenbank Future remove(final Transaction transaction) async { return (_db.delete(_db.transactions) ..where((t) => t.id.equals(transaction.id))).go(); } /// Sucht eine Transaktion anhand seiner Id aus der Datenbank Future find(final int id) async { return (_db.select(_db.transactions) ..where((t) => t.id.equals(id))).getSingleOrNull(); } /// Sucht Transaktionen anhand der gegebenen Parameter aus der Datenbank Future> findBy({ final int? id, final String? name, final DateTime? date, final DateTime? dateBefore, final DateTime? dateAfter, final double? amount, final double? amountMin, final double? amountMax, final String? orderBy, }) async { final query = _db.select(_db.transactions); if (id != null) { query.where((t) => t.id.equals(id)); } if (name != null && name.isNotEmpty) { query.where((t) => t.name.like('%$name%')); } if (date != null) { query.where((t) => t.date.equals(date)); } if (dateBefore != null) { query.where((t) => t.date.isBiggerThanValue(dateBefore)); } if (dateAfter != null) { query.where((t) => t.date.isSmallerThanValue(dateAfter)); } if (amount != null) { query.where((t) => t.amount.equals(amount)); } if (amountMin != null) { query.where((t) => t.amount.isBiggerThanValue(amountMin)); } if (amountMax != null) { query.where((t) => t.amount.isSmallerThanValue(amountMax)); } 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; case 'dateAsc': query.orderBy([(t) => OrderingTerm.asc(t.date)]); break; case 'dateDesc': query.orderBy([(t) => OrderingTerm.desc(t.date)]); break; case 'amountAsc': query.orderBy([(t) => OrderingTerm.asc(t.amount)]); break; case 'amountDesc': query.orderBy([(t) => OrderingTerm.desc(t.amount)]); break; } } return query.get(); } }