diff --git a/lib/Entities/account.dart b/lib/Entities/account.dart index 8e2ccba..3882f78 100644 --- a/lib/Entities/account.dart +++ b/lib/Entities/account.dart @@ -1,5 +1,8 @@ import 'package:isar/isar.dart'; +import 'recurring_transaction.dart'; +import 'transaction.dart'; + part 'account.g.dart'; /// Die Klasse stellt ein Konto dar. @@ -11,6 +14,17 @@ class Account { /// Der Name des Kontos String name = ''; + /// Stellt die Transaktionen dar, + /// die mit diesem Konto verknüpft sind. + @Backlink(to: 'account') + final IsarLinks transactions = IsarLinks(); + + /// Stellt die wiederkehrenden Transaktionen dar, + /// die mit diesem Konto verknüpft sind. + @Backlink(to: 'account') + final IsarLinks recurringTransactions = + IsarLinks(); + @override String toString() => '${super.toString()}($id: $name)'; } diff --git a/lib/Entities/account.g.dart b/lib/Entities/account.g.dart index deb7ccd..bc62cd3 100644 --- a/lib/Entities/account.g.dart +++ b/lib/Entities/account.g.dart @@ -29,7 +29,22 @@ const AccountSchema = CollectionSchema( deserializeProp: _accountDeserializeProp, idName: r'id', indexes: {}, - links: {}, + links: { + r'transactions': LinkSchema( + id: 320079441438939175, + name: r'transactions', + target: r'Transaction', + single: false, + linkName: r'account', + ), + r'recurringTransactions': LinkSchema( + id: 3985469729442003270, + name: r'recurringTransactions', + target: r'RecurringTransaction', + single: false, + linkName: r'account', + ) + }, embeddedSchemas: {}, getId: _accountGetId, getLinks: _accountGetLinks, @@ -87,11 +102,18 @@ Id _accountGetId(Account object) { } List> _accountGetLinks(Account object) { - return []; + return [object.transactions, object.recurringTransactions]; } void _accountAttach(IsarCollection col, Id id, Account object) { object.id = id; + object.transactions + .attach(col, col.isar.collection(), r'transactions', id); + object.recurringTransactions.attach( + col, + col.isar.collection(), + r'recurringTransactions', + id); } extension AccountQueryWhereSort on QueryBuilder { @@ -358,7 +380,125 @@ extension AccountQueryObject on QueryBuilder {} extension AccountQueryLinks - on QueryBuilder {} +on QueryBuilder { + QueryBuilder transactions( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'transactions'); + }); + } + + QueryBuilder + transactionsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'transactions', length, true, length, true); + }); + } + + QueryBuilder transactionsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'transactions', 0, true, 0, true); + }); + } + + QueryBuilder + transactionsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'transactions', 0, false, 999999, true); + }); + } + + QueryBuilder + transactionsLengthLessThan(int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'transactions', 0, true, length, include); + }); + } + + QueryBuilder + transactionsLengthGreaterThan(int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'transactions', length, include, 999999, true); + }); + } + + QueryBuilder + transactionsLengthBetween(int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength( + r'transactions', lower, includeLower, upper, includeUpper); + }); + } + + QueryBuilder recurringTransactions( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'recurringTransactions'); + }); + } + + QueryBuilder + recurringTransactionsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.linkLength( + r'recurringTransactions', length, true, length, true); + }); + } + + QueryBuilder + recurringTransactionsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'recurringTransactions', 0, true, 0, true); + }); + } + + QueryBuilder + recurringTransactionsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'recurringTransactions', 0, false, 999999, true); + }); + } + + QueryBuilder + recurringTransactionsLengthLessThan(int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength( + r'recurringTransactions', 0, true, length, include); + }); + } + + QueryBuilder + recurringTransactionsLengthGreaterThan(int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength( + r'recurringTransactions', length, include, 999999, true); + }); + } + + QueryBuilder + recurringTransactionsLengthBetween(int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength( + r'recurringTransactions', lower, includeLower, upper, includeUpper); + }); + } +} extension AccountQuerySortBy on QueryBuilder { QueryBuilder sortByName() { diff --git a/lib/Entities/recurring_transaction.dart b/lib/Entities/recurring_transaction.dart index c59e87c..ea1fb81 100644 --- a/lib/Entities/recurring_transaction.dart +++ b/lib/Entities/recurring_transaction.dart @@ -1,5 +1,6 @@ import 'package:isar/isar.dart'; +import 'account.dart'; import 'time_frame_enum.dart'; import 'transaction.dart'; @@ -28,4 +29,10 @@ class RecurringTransaction { /// die mit dieser wiederkehrenden verknüpft sind. @Backlink(to: 'recurringTransaction') final IsarLinks transactions = IsarLinks(); + + /// Stellt das Konto dar, zu welchem diese wiederkehrende Transaktion gehört. + final IsarLink account = IsarLink(); + + @override + String toString() => '${super.toString()}($id: $name)'; } diff --git a/lib/Entities/recurring_transaction.g.dart b/lib/Entities/recurring_transaction.g.dart index e2144fc..86a15c9 100644 --- a/lib/Entities/recurring_transaction.g.dart +++ b/lib/Entities/recurring_transaction.g.dart @@ -53,6 +53,12 @@ const RecurringTransactionSchema = CollectionSchema( target: r'Transaction', single: false, linkName: r'recurringTransaction', + ), + r'account': LinkSchema( + id: -6028551496614242115, + name: r'account', + target: r'Account', + single: true, ) }, embeddedSchemas: {}, @@ -142,7 +148,7 @@ Id _recurringTransactionGetId(RecurringTransaction object) { List> _recurringTransactionGetLinks( RecurringTransaction object) { - return [object.transactions]; + return [object.transactions, object.account]; } void _recurringTransactionAttach(IsarCollection col, Id id, @@ -150,6 +156,7 @@ void _recurringTransactionAttach(IsarCollection col, Id id, object.id = id; object.transactions .attach(col, col.isar.collection(), r'transactions', id); + object.account.attach(col, col.isar.collection(), r'account', id); } extension RecurringTransactionQueryWhereSort @@ -716,6 +723,22 @@ extension RecurringTransactionQueryLinks on QueryBuilder account(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'account'); + }); + } + + QueryBuilder accountIsNull() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'account', 0, true, 0, true); + }); + } } extension RecurringTransactionQuerySortBy diff --git a/lib/Entities/transaction.dart b/lib/Entities/transaction.dart index 6cd04d8..61e6ae8 100644 --- a/lib/Entities/transaction.dart +++ b/lib/Entities/transaction.dart @@ -1,5 +1,6 @@ import 'package:isar/isar.dart'; +import 'account.dart'; import 'recurring_transaction.dart'; part 'transaction.g.dart'; @@ -23,4 +24,10 @@ class Transaction { /// zu welcher diese Transaktion gehört. final IsarLink recurringTransaction = IsarLink(); + + /// Stellt das Konto dar, zu welchem diese Transaktion gehört. + final IsarLink account = IsarLink(); + + @override + String toString() => '${super.toString()}($id: $name)'; } diff --git a/lib/Entities/transaction.g.dart b/lib/Entities/transaction.g.dart index 49d7f5d..3f5edbf 100644 --- a/lib/Entities/transaction.g.dart +++ b/lib/Entities/transaction.g.dart @@ -45,6 +45,12 @@ const TransactionSchema = CollectionSchema( name: r'recurringTransaction', target: r'RecurringTransaction', single: true, + ), + r'account': LinkSchema( + id: -8467990729867616553, + name: r'account', + target: r'Account', + single: true, ) }, embeddedSchemas: {}, @@ -112,7 +118,7 @@ Id _transactionGetId(Transaction object) { } List> _transactionGetLinks(Transaction object) { - return [object.recurringTransaction]; + return [object.recurringTransaction, object.account]; } void _transactionAttach(IsarCollection col, Id id, @@ -120,6 +126,7 @@ void _transactionAttach(IsarCollection col, Id id, object.id = id; object.recurringTransaction.attach(col, col.isar.collection(), r'recurringTransaction', id); + object.account.attach(col, col.isar.collection(), r'account', id); } extension TransactionQueryWhereSort @@ -538,6 +545,20 @@ on QueryBuilder { return query.linkLength(r'recurringTransaction', 0, true, 0, true); }); } + + QueryBuilder account( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'account'); + }); + } + + QueryBuilder + accountIsNull() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'account', 0, true, 0, true); + }); + } } extension TransactionQuerySortBy