Docs: Schreib Docs
This commit is contained in:
@@ -5,55 +5,74 @@ import 'time_frame_enum.dart';
|
|||||||
|
|
||||||
part 'drift_database.g.dart';
|
part 'drift_database.g.dart';
|
||||||
|
|
||||||
|
/// Eine Tabelle für Konten.
|
||||||
class Accounts extends Table {
|
class Accounts extends Table {
|
||||||
|
/// Eindeutige ID des Kontos
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
|
|
||||||
|
/// Name des Kontos
|
||||||
TextColumn get name => text().withDefault(const Constant(''))();
|
TextColumn get name => text().withDefault(const Constant(''))();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Eine Tabelle für einzelne Transaktionen.
|
||||||
class Transactions extends Table {
|
class Transactions extends Table {
|
||||||
|
/// Eindeutige ID der Transaktion
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
|
|
||||||
|
/// Name/Beschreibung der Transaktion
|
||||||
TextColumn get name => text().withDefault(const Constant(''))();
|
TextColumn get name => text().withDefault(const Constant(''))();
|
||||||
|
|
||||||
|
/// Datum der Transaktion
|
||||||
DateTimeColumn get date => dateTime().nullable()();
|
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)();
|
IntColumn get accountId => integer().references(Accounts, #id)();
|
||||||
|
|
||||||
|
/// Fremdschlüssel zur zugehörigen wiederkehrenden Transaktion,
|
||||||
|
/// falls vorhanden
|
||||||
IntColumn get recurringTransactionId =>
|
IntColumn get recurringTransactionId =>
|
||||||
integer().nullable().references(RecurringTransactions, #id)();
|
integer().nullable().references(RecurringTransactions, #id)();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Eine Tabelle für wiederkehrende Transaktionen.
|
||||||
class RecurringTransactions extends Table {
|
class RecurringTransactions extends Table {
|
||||||
|
/// Eindeutige ID der wiederkehrenden Transaktion
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
|
|
||||||
|
/// Name/Beschreibung der wiederkehrenden Transaktion
|
||||||
TextColumn get name => text().withDefault(const Constant(''))();
|
TextColumn get name => text().withDefault(const Constant(''))();
|
||||||
|
|
||||||
|
/// Startdatum der wiederkehrenden Transaktion
|
||||||
DateTimeColumn get startDate => dateTime().nullable()();
|
DateTimeColumn get startDate => dateTime().nullable()();
|
||||||
|
|
||||||
|
/// Zeitlicher Rahmen für die Wiederholung
|
||||||
IntColumn get timeFrame => intEnum<TimeFrameEnum>()();
|
IntColumn get timeFrame => intEnum<TimeFrameEnum>()();
|
||||||
|
|
||||||
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)();
|
IntColumn get accountId => integer().references(Accounts, #id)();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Hauptklasse für die Drift-Datenbank der Anwendung.
|
||||||
@DriftDatabase(tables: [Accounts, Transactions, RecurringTransactions])
|
@DriftDatabase(tables: [Accounts, Transactions, RecurringTransactions])
|
||||||
class AppDatabase extends _$AppDatabase {
|
class AppDatabase extends _$AppDatabase {
|
||||||
|
/// Erstellt eine neue Datenbankinstanz
|
||||||
AppDatabase() : super(_openConnection());
|
AppDatabase() : super(_openConnection());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 1;
|
int get schemaVersion => 1;
|
||||||
|
|
||||||
static QueryExecutor _openConnection() {
|
/// Öffnet die Datenbankverbindung
|
||||||
return driftDatabase(
|
static QueryExecutor _openConnection() => driftDatabase(
|
||||||
name: 'dragon_ledger',
|
name: 'dragon_ledger',
|
||||||
web: DriftWebOptions(
|
web: DriftWebOptions(
|
||||||
sqlite3Wasm: Uri.parse('sqlite3.wasm'),
|
sqlite3Wasm: Uri.parse('sqlite3.wasm'),
|
||||||
driftWorker: Uri.parse('drift_worker.js'),
|
driftWorker: Uri.parse('drift_worker.js'),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Eine Widget-Klasse, die die Einstellungsseite der Anwendung darstellt.
|
||||||
class Settings extends StatefulWidget {
|
class Settings extends StatefulWidget {
|
||||||
|
/// Erstellt eine neue Instanz dieser Klasse.
|
||||||
const Settings({super.key});
|
const Settings({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -14,41 +14,39 @@ class AccountRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Entfernt ein Konto aus der Datenbank
|
/// Entfernt ein Konto aus der Datenbank
|
||||||
Future<int> remove(final Account account) async {
|
Future<int> remove(final Account account) => (_db.delete(
|
||||||
return (_db.delete(_db.accounts)
|
_db.accounts,
|
||||||
..where((t) => t.id.equals(account.id))).go();
|
)..where((final t) => t.id.equals(account.id))).go();
|
||||||
}
|
|
||||||
|
|
||||||
/// Sucht ein Konto anhand seiner Id aus der Datenbank
|
/// Sucht ein Konto anhand seiner Id aus der Datenbank
|
||||||
Future<Account?> find(final int id) async {
|
Future<Account?> find(final int id) => (_db.select(
|
||||||
return (_db.select(_db.accounts)
|
_db.accounts,
|
||||||
..where((t) => t.id.equals(id))).getSingleOrNull();
|
)..where((final t) => t.id.equals(id))).getSingleOrNull();
|
||||||
}
|
|
||||||
|
|
||||||
/// Sucht Konten anhand der gegebenen Parameter aus der Datenbank
|
/// Sucht Konten anhand der gegebenen Parameter aus der Datenbank
|
||||||
Future<List<Account>> findBy({
|
Future<List<Account>> findBy({
|
||||||
final int? id,
|
final int? id,
|
||||||
final String? name,
|
final String? name,
|
||||||
final String? orderBy,
|
final String? orderBy,
|
||||||
}) async {
|
}) {
|
||||||
final query = _db.select(_db.accounts);
|
final SimpleSelectStatement<$AccountsTable, Account> query = _db.select(
|
||||||
|
_db.accounts,
|
||||||
|
);
|
||||||
|
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
query.where((t) => t.id.equals(id));
|
query.where((final t) => t.id.equals(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name != null && name.isNotEmpty) {
|
if (name != null && name.isNotEmpty) {
|
||||||
query.where((t) => t.name.like('%$name%'));
|
query.where((final t) => t.name.like('%$name%'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderBy != null) {
|
if (orderBy != null) {
|
||||||
switch (orderBy) {
|
switch (orderBy) {
|
||||||
case 'nameAsc':
|
case 'nameAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.name)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.name)]);
|
||||||
break;
|
|
||||||
case 'nameDesc':
|
case 'nameDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.name)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.name)]);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,22 +12,22 @@ class RecurringTransactionRepository {
|
|||||||
Future<RecurringTransaction?> add(
|
Future<RecurringTransaction?> add(
|
||||||
final RecurringTransactionsCompanion recurringTransaction,
|
final RecurringTransactionsCompanion recurringTransaction,
|
||||||
) async {
|
) async {
|
||||||
final int id = await _db.into(_db.recurringTransactions).insert(
|
final int id = await _db
|
||||||
recurringTransaction);
|
.into(_db.recurringTransactions)
|
||||||
|
.insert(recurringTransaction);
|
||||||
return find(id);
|
return find(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Entfernt eine wiederkehrende Transaktion aus der Datenbank
|
/// Entfernt eine wiederkehrende Transaktion aus der Datenbank
|
||||||
Future<int> remove(final RecurringTransaction recurringTransaction) async {
|
Future<int> remove(final RecurringTransaction recurringTransaction) =>
|
||||||
return (_db.delete(_db.recurringTransactions)
|
(_db.delete(
|
||||||
..where((t) => t.id.equals(recurringTransaction.id))).go();
|
_db.recurringTransactions,
|
||||||
}
|
)..where((final t) => t.id.equals(recurringTransaction.id))).go();
|
||||||
|
|
||||||
/// Sucht eine wiederkehrende Transaktion anhand seiner Id aus der Datenbank
|
/// Sucht eine wiederkehrende Transaktion anhand seiner Id aus der Datenbank
|
||||||
Future<RecurringTransaction?> find(final int id) async {
|
Future<RecurringTransaction?> find(final int id) => (_db.select(
|
||||||
return (_db.select(_db.recurringTransactions)
|
_db.recurringTransactions,
|
||||||
..where((t) => t.id.equals(id))).getSingleOrNull();
|
)..where((final t) => t.id.equals(id))).getSingleOrNull();
|
||||||
}
|
|
||||||
|
|
||||||
/// Sucht wiederkehrende Transaktionen anhand der gegebenen Parameter
|
/// Sucht wiederkehrende Transaktionen anhand der gegebenen Parameter
|
||||||
/// aus der Datenbank
|
/// aus der Datenbank
|
||||||
@@ -44,70 +44,69 @@ class RecurringTransactionRepository {
|
|||||||
final double? amountMin,
|
final double? amountMin,
|
||||||
final double? amountMax,
|
final double? amountMax,
|
||||||
final String? orderBy,
|
final String? orderBy,
|
||||||
}) async {
|
}) {
|
||||||
final query = _db.select(_db.recurringTransactions);
|
final SimpleSelectStatement<
|
||||||
|
$RecurringTransactionsTable,
|
||||||
|
RecurringTransaction
|
||||||
|
>
|
||||||
|
query = _db.select(_db.recurringTransactions);
|
||||||
|
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
query.where((t) => t.id.equals(id));
|
query.where((final t) => t.id.equals(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name != null && name.isNotEmpty) {
|
if (name != null && name.isNotEmpty) {
|
||||||
query.where((t) => t.name.like('%$name%'));
|
query.where((final t) => t.name.like('%$name%'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startDate != null) {
|
if (startDate != null) {
|
||||||
query.where((t) => t.startDate.equals(startDate));
|
query.where((final t) => t.startDate.equals(startDate));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startDateAfter != null) {
|
if (startDateAfter != null) {
|
||||||
query.where((t) => t.startDate.isBiggerThanValue(startDateAfter));
|
query.where((final t) => t.startDate.isBiggerThanValue(startDateAfter));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startDateBefore != null) {
|
if (startDateBefore != null) {
|
||||||
query.where((t) => t.startDate.isSmallerThanValue(startDateBefore));
|
query.where((final t) => t.startDate.isSmallerThanValue(startDateBefore));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startDateFrom != null && startDateTo != null) {
|
if (startDateFrom != null && startDateTo != null) {
|
||||||
query.where((t) =>
|
query.where(
|
||||||
t.startDate.isBetweenValues(startDateFrom, startDateTo));
|
(final t) => t.startDate.isBetweenValues(startDateFrom, startDateTo),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timeFrame != null) {
|
if (timeFrame != null) {
|
||||||
query.where((t) => t.timeFrame.equals(timeFrame.index));
|
query.where((final t) => t.timeFrame.equals(timeFrame.index));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amount != null) {
|
if (amount != null) {
|
||||||
query.where((t) => t.amount.equals(amount));
|
query.where((final t) => t.amount.equals(amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amountMin != null) {
|
if (amountMin != null) {
|
||||||
query.where((t) => t.amount.isBiggerThanValue(amountMin));
|
query.where((final t) => t.amount.isBiggerThanValue(amountMin));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amountMax != null) {
|
if (amountMax != null) {
|
||||||
query.where((t) => t.amount.isSmallerThanValue(amountMax));
|
query.where((final t) => t.amount.isSmallerThanValue(amountMax));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderBy != null) {
|
if (orderBy != null) {
|
||||||
switch (orderBy) {
|
switch (orderBy) {
|
||||||
case 'nameAsc':
|
case 'nameAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.name)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.name)]);
|
||||||
break;
|
|
||||||
case 'nameDesc':
|
case 'nameDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.name)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.name)]);
|
||||||
break;
|
|
||||||
case 'amountAsc':
|
case 'amountAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.amount)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.amount)]);
|
||||||
break;
|
|
||||||
case 'amountDesc':
|
case 'amountDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.amount)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.amount)]);
|
||||||
break;
|
|
||||||
case 'startDateAsc':
|
case 'startDateAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.startDate)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.startDate)]);
|
||||||
break;
|
|
||||||
case 'startDateDesc':
|
case 'startDateDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.startDate)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.startDate)]);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,16 +14,14 @@ class TransactionRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Entfernt eine Transaktion aus der Datenbank
|
/// Entfernt eine Transaktion aus der Datenbank
|
||||||
Future<int> remove(final Transaction transaction) async {
|
Future<int> remove(final Transaction transaction) => (_db.delete(
|
||||||
return (_db.delete(_db.transactions)
|
_db.transactions,
|
||||||
..where((t) => t.id.equals(transaction.id))).go();
|
)..where((final t) => t.id.equals(transaction.id))).go();
|
||||||
}
|
|
||||||
|
|
||||||
/// Sucht eine Transaktion anhand seiner Id aus der Datenbank
|
/// Sucht eine Transaktion anhand seiner Id aus der Datenbank
|
||||||
Future<Transaction?> find(final int id) async {
|
Future<Transaction?> find(final int id) => (_db.select(
|
||||||
return (_db.select(_db.transactions)
|
_db.transactions,
|
||||||
..where((t) => t.id.equals(id))).getSingleOrNull();
|
)..where((final t) => t.id.equals(id))).getSingleOrNull();
|
||||||
}
|
|
||||||
|
|
||||||
/// Sucht Transaktionen anhand der gegebenen Parameter aus der Datenbank
|
/// Sucht Transaktionen anhand der gegebenen Parameter aus der Datenbank
|
||||||
Future<List<Transaction>> findBy({
|
Future<List<Transaction>> findBy({
|
||||||
@@ -36,61 +34,56 @@ class TransactionRepository {
|
|||||||
final double? amountMin,
|
final double? amountMin,
|
||||||
final double? amountMax,
|
final double? amountMax,
|
||||||
final String? orderBy,
|
final String? orderBy,
|
||||||
}) async {
|
}) {
|
||||||
final query = _db.select(_db.transactions);
|
final SimpleSelectStatement<$TransactionsTable, Transaction> query = _db
|
||||||
|
.select(_db.transactions);
|
||||||
|
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
query.where((t) => t.id.equals(id));
|
query.where((final t) => t.id.equals(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name != null && name.isNotEmpty) {
|
if (name != null && name.isNotEmpty) {
|
||||||
query.where((t) => t.name.like('%$name%'));
|
query.where((final t) => t.name.like('%$name%'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (date != null) {
|
if (date != null) {
|
||||||
query.where((t) => t.date.equals(date));
|
query.where((final t) => t.date.equals(date));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dateBefore != null) {
|
if (dateBefore != null) {
|
||||||
query.where((t) => t.date.isBiggerThanValue(dateBefore));
|
query.where((final t) => t.date.isBiggerThanValue(dateBefore));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dateAfter != null) {
|
if (dateAfter != null) {
|
||||||
query.where((t) => t.date.isSmallerThanValue(dateAfter));
|
query.where((final t) => t.date.isSmallerThanValue(dateAfter));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amount != null) {
|
if (amount != null) {
|
||||||
query.where((t) => t.amount.equals(amount));
|
query.where((final t) => t.amount.equals(amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amountMin != null) {
|
if (amountMin != null) {
|
||||||
query.where((t) => t.amount.isBiggerThanValue(amountMin));
|
query.where((final t) => t.amount.isBiggerThanValue(amountMin));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amountMax != null) {
|
if (amountMax != null) {
|
||||||
query.where((t) => t.amount.isSmallerThanValue(amountMax));
|
query.where((final t) => t.amount.isSmallerThanValue(amountMax));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderBy != null) {
|
if (orderBy != null) {
|
||||||
switch (orderBy) {
|
switch (orderBy) {
|
||||||
case 'nameAsc':
|
case 'nameAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.name)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.name)]);
|
||||||
break;
|
|
||||||
case 'nameDesc':
|
case 'nameDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.name)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.name)]);
|
||||||
break;
|
|
||||||
case 'dateAsc':
|
case 'dateAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.date)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.date)]);
|
||||||
break;
|
|
||||||
case 'dateDesc':
|
case 'dateDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.date)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.date)]);
|
||||||
break;
|
|
||||||
case 'amountAsc':
|
case 'amountAsc':
|
||||||
query.orderBy([(t) => OrderingTerm.asc(t.amount)]);
|
query.orderBy([(final t) => OrderingTerm.asc(t.amount)]);
|
||||||
break;
|
|
||||||
case 'amountDesc':
|
case 'amountDesc':
|
||||||
query.orderBy([(t) => OrderingTerm.desc(t.amount)]);
|
query.orderBy([(final t) => OrderingTerm.desc(t.amount)]);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import '../Entities/drift_database.dart';
|
import '../Entities/drift_database.dart';
|
||||||
|
|
||||||
|
/// Eine Klasse, um auf die Datenbank zugreifen zu können
|
||||||
class DatabaseService {
|
class DatabaseService {
|
||||||
|
/// Gibt die aktuell gültige Instanz der Klasse zurück
|
||||||
factory DatabaseService() => _instance;
|
factory DatabaseService() => _instance;
|
||||||
|
|
||||||
DatabaseService._internal();
|
DatabaseService._internal();
|
||||||
@@ -9,6 +11,7 @@ class DatabaseService {
|
|||||||
|
|
||||||
AppDatabase? _database;
|
AppDatabase? _database;
|
||||||
|
|
||||||
|
/// Stellt die Datenbank dar
|
||||||
AppDatabase get database {
|
AppDatabase get database {
|
||||||
_database ??= AppDatabase();
|
_database ??= AppDatabase();
|
||||||
return _database!;
|
return _database!;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Eine Klasse, die die Navigation innerhalb der App steuert
|
||||||
class NavigationService {
|
class NavigationService {
|
||||||
|
/// Der Navigator-Schlüssel, der für die Navigation verwendet wird
|
||||||
static final GlobalKey<NavigatorState> navigatorKey =
|
static final GlobalKey<NavigatorState> navigatorKey =
|
||||||
GlobalKey<NavigatorState>();
|
GlobalKey<NavigatorState>();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user