Feat: Fügt IsarService und Repositories hinzu

This commit is contained in:
2025-12-22 03:33:37 +01:00
parent 277800a578
commit 92fec89333
4 changed files with 364 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
import 'package:isar/isar.dart';
import '../Entities/recurring_transaction.dart';
import '../Entities/time_frame_enum.dart';
import '../Services/isar_service.dart';
/// Funktionen zum interagieren mit der Datenbank für die Transaktionen
class RecurringTransactionRepository {
final IsarService _isarService = IsarService();
/// Fügt eine neue wiederkehrende Transaktion zur Datenbank hinzu
Future<RecurringTransaction?> add(
final RecurringTransaction recurringTransaction,
) async {
final Isar isar = await _isarService.getDatabase();
final int id = await isar.writeTxn(
() => isar.recurringTransactions.put(recurringTransaction),
);
return find(id);
}
/// Entfernt eine wiederkehrende Transaktion aus der Datenbank
Future<bool> remove(final RecurringTransaction recurringTransaction) async {
final Isar isar = await _isarService.getDatabase();
return isar.writeTxn(
() => isar.recurringTransactions.delete(recurringTransaction.id),
);
}
/// Sucht eine wiederkehrende Transaktion anhand seiner Id aus der Datenbank
Future<RecurringTransaction?> find(final int id) async {
final Isar isar = await _isarService.getDatabase();
return isar.recurringTransactions.get(id);
}
/// Sucht wiederkehrende Transaktionen anhand der gegebenen Parameter
/// aus der Datenbank
/// Sucht wiederkehrende Transaktionen anhand der gegebenen Parameter
Future<List<RecurringTransaction>> findBy({
final int? id,
final String? name,
final DateTime? startDate,
final DateTime? startDateBefore,
final DateTime? startDateAfter,
final DateTime? startDateFrom,
final DateTime? startDateTo,
final TimeFrameEnum? timeFrame,
final double? amount,
final double? amountMin,
final double? amountMax,
final String? orderBy,
}) async {
final Isar isar = await _isarService.getDatabase();
final QueryBuilder<
RecurringTransaction,
RecurringTransaction,
QAfterFilterCondition
>
baseQuery = isar.recurringTransactions
.filter()
.optional(id != null, (final q) => q.idEqualTo(id!))
.optional(
name != null && name.isNotEmpty,
(final q) => q.nameMatches('*$name*', caseSensitive: false),
)
// --- StartDate Filter ---
.optional(startDate != null, (final q) => q.startDateEqualTo(startDate))
.optional(
startDateAfter != null,
(final q) => q.startDateGreaterThan(startDateAfter),
)
.optional(
startDateBefore != null,
(final q) => q.startDateLessThan(startDateBefore),
)
.optional(
startDateFrom != null && startDateTo != null,
(final q) => q.startDateBetween(startDateFrom, startDateTo),
)
// --- TimeFrame ---
.optional(
timeFrame != null,
(final q) => q.timeFrameEqualTo(timeFrame!),
)
// --- Amount Filter ---
.optional(amount != null, (final q) => q.amountEqualTo(amount!))
.optional(
amountMin != null && amountMax == null,
(final q) => q.amountGreaterThan(amountMin!),
)
.optional(
amountMin == null && amountMax != null,
(final q) => q.amountLessThan(amountMax!),
)
.optional(
amountMin != null && amountMax != null,
(final q) => q.amountBetween(amountMin!, amountMax!),
);
// --- Sortierung ---
switch (orderBy) {
case 'nameAsc':
return baseQuery.sortByName().findAll();
case 'nameDesc':
return baseQuery.sortByNameDesc().findAll();
case 'amountAsc':
return baseQuery.sortByAmount().findAll();
case 'amountDesc':
return baseQuery.sortByAmountDesc().findAll();
case 'startDateAsc':
return baseQuery.sortByStartDate().findAll();
case 'startDateDesc':
return baseQuery.sortByStartDateDesc().findAll();
default:
return baseQuery.findAll();
}
}
}