From 8a612fc27c3115cb2568e05bb1ed15e0cff77a20 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 25 Dec 2025 16:32:50 +0100 Subject: [PATCH] Docs: Schreib Docs --- lib/Entities/drift_database.dart | 41 ++++++++--- lib/Pages/Settings/settings.dart | 2 + lib/Repositories/account_repository.dart | 30 ++++---- .../recurring_transacation_repository.dart | 71 +++++++++---------- lib/Repositories/transaction_repository.dart | 53 ++++++-------- lib/Services/database_service.dart | 3 + lib/Services/navigation_service.dart | 2 + 7 files changed, 109 insertions(+), 93 deletions(-) diff --git a/lib/Entities/drift_database.dart b/lib/Entities/drift_database.dart index 517baed..7d68192 100644 --- a/lib/Entities/drift_database.dart +++ b/lib/Entities/drift_database.dart @@ -5,55 +5,74 @@ import 'time_frame_enum.dart'; part 'drift_database.g.dart'; +/// Eine Tabelle für Konten. class Accounts extends Table { + /// Eindeutige ID des Kontos IntColumn get id => integer().autoIncrement()(); + /// Name des Kontos TextColumn get name => text().withDefault(const Constant(''))(); } +/// Eine Tabelle für einzelne Transaktionen. class Transactions extends Table { + /// Eindeutige ID der Transaktion IntColumn get id => integer().autoIncrement()(); + /// Name/Beschreibung der Transaktion TextColumn get name => text().withDefault(const Constant(''))(); + /// Datum der Transaktion DateTimeColumn get date => dateTime().nullable()(); - RealColumn get amount => real().withDefault(const Constant(0.0))(); + /// Betrag der Transaktion + RealColumn get amount => real().withDefault(const Constant(0))(); + /// Fremdschlüssel zum zugehörigen Konto IntColumn get accountId => integer().references(Accounts, #id)(); + /// Fremdschlüssel zur zugehörigen wiederkehrenden Transaktion, + /// falls vorhanden IntColumn get recurringTransactionId => integer().nullable().references(RecurringTransactions, #id)(); } +/// Eine Tabelle für wiederkehrende Transaktionen. class RecurringTransactions extends Table { + /// Eindeutige ID der wiederkehrenden Transaktion IntColumn get id => integer().autoIncrement()(); + /// Name/Beschreibung der wiederkehrenden Transaktion TextColumn get name => text().withDefault(const Constant(''))(); + /// Startdatum der wiederkehrenden Transaktion DateTimeColumn get startDate => dateTime().nullable()(); + /// Zeitlicher Rahmen für die Wiederholung IntColumn get timeFrame => intEnum()(); - RealColumn get amount => real().withDefault(const Constant(0.0))(); + /// Betrag der wiederkehrenden Transaktion + RealColumn get amount => real().withDefault(const Constant(0))(); + /// Fremdschlüssel zum zugehörigen Konto IntColumn get accountId => integer().references(Accounts, #id)(); } +/// Hauptklasse für die Drift-Datenbank der Anwendung. @DriftDatabase(tables: [Accounts, Transactions, RecurringTransactions]) class AppDatabase extends _$AppDatabase { + /// Erstellt eine neue Datenbankinstanz AppDatabase() : super(_openConnection()); @override int get schemaVersion => 1; - static QueryExecutor _openConnection() { - return driftDatabase( - name: 'dragon_ledger', - web: DriftWebOptions( - sqlite3Wasm: Uri.parse('sqlite3.wasm'), - driftWorker: Uri.parse('drift_worker.js'), - ), - ); - } + /// Öffnet die Datenbankverbindung + static QueryExecutor _openConnection() => driftDatabase( + name: 'dragon_ledger', + web: DriftWebOptions( + sqlite3Wasm: Uri.parse('sqlite3.wasm'), + driftWorker: Uri.parse('drift_worker.js'), + ), + ); } diff --git a/lib/Pages/Settings/settings.dart b/lib/Pages/Settings/settings.dart index 2803de0..471633b 100644 --- a/lib/Pages/Settings/settings.dart +++ b/lib/Pages/Settings/settings.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; +/// Eine Widget-Klasse, die die Einstellungsseite der Anwendung darstellt. class Settings extends StatefulWidget { + /// Erstellt eine neue Instanz dieser Klasse. const Settings({super.key}); @override diff --git a/lib/Repositories/account_repository.dart b/lib/Repositories/account_repository.dart index 1968d8f..298bd35 100644 --- a/lib/Repositories/account_repository.dart +++ b/lib/Repositories/account_repository.dart @@ -14,41 +14,39 @@ class AccountRepository { } /// Entfernt ein Konto aus der Datenbank - Future remove(final Account account) async { - return (_db.delete(_db.accounts) - ..where((t) => t.id.equals(account.id))).go(); - } + Future remove(final Account account) => (_db.delete( + _db.accounts, + )..where((final t) => t.id.equals(account.id))).go(); /// Sucht ein Konto anhand seiner Id aus der Datenbank - Future find(final int id) async { - return (_db.select(_db.accounts) - ..where((t) => t.id.equals(id))).getSingleOrNull(); - } + Future find(final int id) => (_db.select( + _db.accounts, + )..where((final t) => t.id.equals(id))).getSingleOrNull(); /// Sucht Konten anhand der gegebenen Parameter aus der Datenbank Future> findBy({ final int? id, final String? name, final String? orderBy, - }) async { - final query = _db.select(_db.accounts); + }) { + final SimpleSelectStatement<$AccountsTable, Account> query = _db.select( + _db.accounts, + ); if (id != null) { - query.where((t) => t.id.equals(id)); + query.where((final t) => t.id.equals(id)); } if (name != null && name.isNotEmpty) { - query.where((t) => t.name.like('%$name%')); + query.where((final t) => t.name.like('%$name%')); } if (orderBy != null) { switch (orderBy) { case 'nameAsc': - query.orderBy([(t) => OrderingTerm.asc(t.name)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.name)]); case 'nameDesc': - query.orderBy([(t) => OrderingTerm.desc(t.name)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.name)]); } } diff --git a/lib/Repositories/recurring_transacation_repository.dart b/lib/Repositories/recurring_transacation_repository.dart index 48c7f53..26ffb42 100644 --- a/lib/Repositories/recurring_transacation_repository.dart +++ b/lib/Repositories/recurring_transacation_repository.dart @@ -10,24 +10,24 @@ class RecurringTransactionRepository { /// Fügt eine neue wiederkehrende Transaktion zur Datenbank hinzu Future add( - final RecurringTransactionsCompanion recurringTransaction, + final RecurringTransactionsCompanion recurringTransaction, ) async { - final int id = await _db.into(_db.recurringTransactions).insert( - recurringTransaction); + final int id = await _db + .into(_db.recurringTransactions) + .insert(recurringTransaction); return find(id); } /// Entfernt eine wiederkehrende Transaktion aus der Datenbank - Future remove(final RecurringTransaction recurringTransaction) async { - return (_db.delete(_db.recurringTransactions) - ..where((t) => t.id.equals(recurringTransaction.id))).go(); - } + Future remove(final RecurringTransaction recurringTransaction) => + (_db.delete( + _db.recurringTransactions, + )..where((final t) => t.id.equals(recurringTransaction.id))).go(); /// Sucht eine wiederkehrende Transaktion anhand seiner Id aus der Datenbank - Future find(final int id) async { - return (_db.select(_db.recurringTransactions) - ..where((t) => t.id.equals(id))).getSingleOrNull(); - } + Future find(final int id) => (_db.select( + _db.recurringTransactions, + )..where((final t) => t.id.equals(id))).getSingleOrNull(); /// Sucht wiederkehrende Transaktionen anhand der gegebenen Parameter /// aus der Datenbank @@ -44,70 +44,69 @@ class RecurringTransactionRepository { final double? amountMin, final double? amountMax, final String? orderBy, - }) async { - final query = _db.select(_db.recurringTransactions); + }) { + final SimpleSelectStatement< + $RecurringTransactionsTable, + RecurringTransaction + > + query = _db.select(_db.recurringTransactions); if (id != null) { - query.where((t) => t.id.equals(id)); + query.where((final t) => t.id.equals(id)); } if (name != null && name.isNotEmpty) { - query.where((t) => t.name.like('%$name%')); + query.where((final t) => t.name.like('%$name%')); } if (startDate != null) { - query.where((t) => t.startDate.equals(startDate)); + query.where((final t) => t.startDate.equals(startDate)); } if (startDateAfter != null) { - query.where((t) => t.startDate.isBiggerThanValue(startDateAfter)); + query.where((final t) => t.startDate.isBiggerThanValue(startDateAfter)); } if (startDateBefore != null) { - query.where((t) => t.startDate.isSmallerThanValue(startDateBefore)); + query.where((final t) => t.startDate.isSmallerThanValue(startDateBefore)); } if (startDateFrom != null && startDateTo != null) { - query.where((t) => - t.startDate.isBetweenValues(startDateFrom, startDateTo)); + query.where( + (final t) => t.startDate.isBetweenValues(startDateFrom, startDateTo), + ); } if (timeFrame != null) { - query.where((t) => t.timeFrame.equals(timeFrame.index)); + query.where((final t) => t.timeFrame.equals(timeFrame.index)); } if (amount != null) { - query.where((t) => t.amount.equals(amount)); + query.where((final t) => t.amount.equals(amount)); } if (amountMin != null) { - query.where((t) => t.amount.isBiggerThanValue(amountMin)); + query.where((final t) => t.amount.isBiggerThanValue(amountMin)); } if (amountMax != null) { - query.where((t) => t.amount.isSmallerThanValue(amountMax)); + query.where((final t) => t.amount.isSmallerThanValue(amountMax)); } if (orderBy != null) { switch (orderBy) { case 'nameAsc': - query.orderBy([(t) => OrderingTerm.asc(t.name)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.name)]); case 'nameDesc': - query.orderBy([(t) => OrderingTerm.desc(t.name)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.name)]); case 'amountAsc': - query.orderBy([(t) => OrderingTerm.asc(t.amount)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.amount)]); case 'amountDesc': - query.orderBy([(t) => OrderingTerm.desc(t.amount)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.amount)]); case 'startDateAsc': - query.orderBy([(t) => OrderingTerm.asc(t.startDate)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.startDate)]); case 'startDateDesc': - query.orderBy([(t) => OrderingTerm.desc(t.startDate)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.startDate)]); } } diff --git a/lib/Repositories/transaction_repository.dart b/lib/Repositories/transaction_repository.dart index d3c7c40..44de2b5 100644 --- a/lib/Repositories/transaction_repository.dart +++ b/lib/Repositories/transaction_repository.dart @@ -14,16 +14,14 @@ class TransactionRepository { } /// 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(); - } + Future 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 find(final int id) async { - return (_db.select(_db.transactions) - ..where((t) => t.id.equals(id))).getSingleOrNull(); - } + Future 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> findBy({ @@ -36,61 +34,56 @@ class TransactionRepository { final double? amountMin, final double? amountMax, final String? orderBy, - }) async { - final query = _db.select(_db.transactions); + }) { + final SimpleSelectStatement<$TransactionsTable, Transaction> query = _db + .select(_db.transactions); if (id != null) { - query.where((t) => t.id.equals(id)); + query.where((final t) => t.id.equals(id)); } if (name != null && name.isNotEmpty) { - query.where((t) => t.name.like('%$name%')); + query.where((final t) => t.name.like('%$name%')); } if (date != null) { - query.where((t) => t.date.equals(date)); + query.where((final t) => t.date.equals(date)); } if (dateBefore != null) { - query.where((t) => t.date.isBiggerThanValue(dateBefore)); + query.where((final t) => t.date.isBiggerThanValue(dateBefore)); } if (dateAfter != null) { - query.where((t) => t.date.isSmallerThanValue(dateAfter)); + query.where((final t) => t.date.isSmallerThanValue(dateAfter)); } if (amount != null) { - query.where((t) => t.amount.equals(amount)); + query.where((final t) => t.amount.equals(amount)); } if (amountMin != null) { - query.where((t) => t.amount.isBiggerThanValue(amountMin)); + query.where((final t) => t.amount.isBiggerThanValue(amountMin)); } if (amountMax != null) { - query.where((t) => t.amount.isSmallerThanValue(amountMax)); + query.where((final t) => t.amount.isSmallerThanValue(amountMax)); } if (orderBy != null) { switch (orderBy) { case 'nameAsc': - query.orderBy([(t) => OrderingTerm.asc(t.name)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.name)]); case 'nameDesc': - query.orderBy([(t) => OrderingTerm.desc(t.name)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.name)]); case 'dateAsc': - query.orderBy([(t) => OrderingTerm.asc(t.date)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.date)]); case 'dateDesc': - query.orderBy([(t) => OrderingTerm.desc(t.date)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.date)]); case 'amountAsc': - query.orderBy([(t) => OrderingTerm.asc(t.amount)]); - break; + query.orderBy([(final t) => OrderingTerm.asc(t.amount)]); case 'amountDesc': - query.orderBy([(t) => OrderingTerm.desc(t.amount)]); - break; + query.orderBy([(final t) => OrderingTerm.desc(t.amount)]); } } diff --git a/lib/Services/database_service.dart b/lib/Services/database_service.dart index 4b6e643..3e67a0c 100644 --- a/lib/Services/database_service.dart +++ b/lib/Services/database_service.dart @@ -1,6 +1,8 @@ import '../Entities/drift_database.dart'; +/// Eine Klasse, um auf die Datenbank zugreifen zu können class DatabaseService { + /// Gibt die aktuell gültige Instanz der Klasse zurück factory DatabaseService() => _instance; DatabaseService._internal(); @@ -9,6 +11,7 @@ class DatabaseService { AppDatabase? _database; + /// Stellt die Datenbank dar AppDatabase get database { _database ??= AppDatabase(); return _database!; diff --git a/lib/Services/navigation_service.dart b/lib/Services/navigation_service.dart index 099bf00..b43e0a2 100644 --- a/lib/Services/navigation_service.dart +++ b/lib/Services/navigation_service.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; +/// Eine Klasse, die die Navigation innerhalb der App steuert class NavigationService { + /// Der Navigator-Schlüssel, der für die Navigation verwendet wird static final GlobalKey navigatorKey = GlobalKey(); }