Files
dragon_ledger/lib/Repositories/transaction_repository.dart
2025-12-25 16:32:50 +01:00

93 lines
2.8 KiB
Dart

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<Transaction?> 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<int> remove(final Transaction transaction) => (_db.delete(
_db.transactions,
)..where((final t) => t.id.equals(transaction.id))).go();
/// Sucht eine Transaktion anhand seiner Id aus der Datenbank
Future<Transaction?> find(final int id) => (_db.select(
_db.transactions,
)..where((final t) => t.id.equals(id))).getSingleOrNull();
/// Sucht Transaktionen anhand der gegebenen Parameter aus der Datenbank
Future<List<Transaction>> 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,
}) {
final SimpleSelectStatement<$TransactionsTable, Transaction> query = _db
.select(_db.transactions);
if (id != null) {
query.where((final t) => t.id.equals(id));
}
if (name != null && name.isNotEmpty) {
query.where((final t) => t.name.like('%$name%'));
}
if (date != null) {
query.where((final t) => t.date.equals(date));
}
if (dateBefore != null) {
query.where((final t) => t.date.isBiggerThanValue(dateBefore));
}
if (dateAfter != null) {
query.where((final t) => t.date.isSmallerThanValue(dateAfter));
}
if (amount != null) {
query.where((final t) => t.amount.equals(amount));
}
if (amountMin != null) {
query.where((final t) => t.amount.isBiggerThanValue(amountMin));
}
if (amountMax != null) {
query.where((final t) => t.amount.isSmallerThanValue(amountMax));
}
if (orderBy != null) {
switch (orderBy) {
case 'nameAsc':
query.orderBy([(final t) => OrderingTerm.asc(t.name)]);
case 'nameDesc':
query.orderBy([(final t) => OrderingTerm.desc(t.name)]);
case 'dateAsc':
query.orderBy([(final t) => OrderingTerm.asc(t.date)]);
case 'dateDesc':
query.orderBy([(final t) => OrderingTerm.desc(t.date)]);
case 'amountAsc':
query.orderBy([(final t) => OrderingTerm.asc(t.amount)]);
case 'amountDesc':
query.orderBy([(final t) => OrderingTerm.desc(t.amount)]);
}
}
return query.get();
}
}