diff --git a/lib/database/collections/account.dart b/lib/database/collections/account.dart deleted file mode 100644 index dbacb16..0000000 --- a/lib/database/collections/account.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:isar/isar.dart'; - -part 'account.g.dart'; - -@collection -class Account { - Id id = Isar.autoIncrement; - - String? name; -} diff --git a/lib/database/collections/account.g.dart b/lib/database/collections/account.g.dart deleted file mode 100644 index c7f17ee..0000000 --- a/lib/database/collections/account.g.dart +++ /dev/null @@ -1,469 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'account.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetAccountCollection on Isar { - IsarCollection get accounts => this.collection(); -} - -const AccountSchema = CollectionSchema( - name: r'Account', - id: -6646797162501847804, - properties: { - r'name': PropertySchema(id: 0, name: r'name', type: IsarType.string), - }, - estimateSize: _accountEstimateSize, - serialize: _accountSerialize, - deserialize: _accountDeserialize, - deserializeProp: _accountDeserializeProp, - idName: r'id', - indexes: {}, - links: {}, - embeddedSchemas: {}, - getId: _accountGetId, - getLinks: _accountGetLinks, - attach: _accountAttach, - version: '3.1.0+1', -); - -int _accountEstimateSize( - Account object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.name; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - return bytesCount; -} - -void _accountSerialize( - Account object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.name); -} - -Account _accountDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = Account(); - object.id = id; - object.name = reader.readStringOrNull(offsets[0]); - return object; -} - -P _accountDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringOrNull(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _accountGetId(Account object) { - return object.id; -} - -List> _accountGetLinks(Account object) { - return []; -} - -void _accountAttach(IsarCollection col, Id id, Account object) { - object.id = id; -} - -extension AccountQueryWhereSort on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension AccountQueryWhere on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension AccountQueryFilter - on QueryBuilder { - QueryBuilder idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder nameIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'name'), - ); - }); - } - - QueryBuilder nameIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'name'), - ); - }); - } - - QueryBuilder nameEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameContains( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameMatches( - String pattern, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); - }); - } - - QueryBuilder nameIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); - }); - } -} - -extension AccountQueryObject - on QueryBuilder {} - -extension AccountQueryLinks - on QueryBuilder {} - -extension AccountQuerySortBy on QueryBuilder { - QueryBuilder sortByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder sortByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } -} - -extension AccountQuerySortThenBy - on QueryBuilder { - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder thenByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder thenByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } -} - -extension AccountQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'name', caseSensitive: caseSensitive); - }); - } -} - -extension AccountQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder nameProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'name'); - }); - } -} diff --git a/lib/database/collections/beneficiary.dart b/lib/database/collections/beneficiary.dart deleted file mode 100644 index 2bbeffb..0000000 --- a/lib/database/collections/beneficiary.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:isar/isar.dart'; -import 'package:okane/database/collections/account.dart'; - -part 'beneficiary.g.dart'; - -enum BeneficiaryType { account, other } - -@collection -class Beneficiary { - Id id = Isar.autoIncrement; - - late String name; - - @Enumerated(EnumType.ordinal) - late BeneficiaryType type; - - final account = IsarLink(); - - String? imagePath; -} diff --git a/lib/database/collections/beneficiary.g.dart b/lib/database/collections/beneficiary.g.dart deleted file mode 100644 index 7943e15..0000000 --- a/lib/database/collections/beneficiary.g.dart +++ /dev/null @@ -1,810 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'beneficiary.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetBeneficiaryCollection on Isar { - IsarCollection get beneficiarys => this.collection(); -} - -const BeneficiarySchema = CollectionSchema( - name: r'Beneficiary', - id: -7106369371336791482, - properties: { - r'imagePath': PropertySchema( - id: 0, - name: r'imagePath', - type: IsarType.string, - ), - r'name': PropertySchema(id: 1, name: r'name', type: IsarType.string), - r'type': PropertySchema( - id: 2, - name: r'type', - type: IsarType.byte, - enumMap: _BeneficiarytypeEnumValueMap, - ), - }, - estimateSize: _beneficiaryEstimateSize, - serialize: _beneficiarySerialize, - deserialize: _beneficiaryDeserialize, - deserializeProp: _beneficiaryDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'account': LinkSchema( - id: -725531860126526319, - name: r'account', - target: r'Account', - single: true, - ), - }, - embeddedSchemas: {}, - getId: _beneficiaryGetId, - getLinks: _beneficiaryGetLinks, - attach: _beneficiaryAttach, - version: '3.1.0+1', -); - -int _beneficiaryEstimateSize( - Beneficiary object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.imagePath; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - bytesCount += 3 + object.name.length * 3; - return bytesCount; -} - -void _beneficiarySerialize( - Beneficiary object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.imagePath); - writer.writeString(offsets[1], object.name); - writer.writeByte(offsets[2], object.type.index); -} - -Beneficiary _beneficiaryDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = Beneficiary(); - object.id = id; - object.imagePath = reader.readStringOrNull(offsets[0]); - object.name = reader.readString(offsets[1]); - object.type = - _BeneficiarytypeValueEnumMap[reader.readByteOrNull(offsets[2])] ?? - BeneficiaryType.account; - return object; -} - -P _beneficiaryDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringOrNull(offset)) as P; - case 1: - return (reader.readString(offset)) as P; - case 2: - return (_BeneficiarytypeValueEnumMap[reader.readByteOrNull(offset)] ?? - BeneficiaryType.account) - as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -const _BeneficiarytypeEnumValueMap = {'account': 0, 'other': 1}; -const _BeneficiarytypeValueEnumMap = { - 0: BeneficiaryType.account, - 1: BeneficiaryType.other, -}; - -Id _beneficiaryGetId(Beneficiary object) { - return object.id; -} - -List> _beneficiaryGetLinks(Beneficiary object) { - return [object.account]; -} - -void _beneficiaryAttach( - IsarCollection col, - Id id, - Beneficiary object, -) { - object.id = id; - object.account.attach(col, col.isar.collection(), r'account', id); -} - -extension BeneficiaryQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension BeneficiaryQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo( - Id id, - ) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension BeneficiaryQueryFilter - on QueryBuilder { - QueryBuilder idEqualTo( - Id value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - imagePathIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'imagePath'), - ); - }); - } - - QueryBuilder - imagePathIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'imagePath'), - ); - }); - } - - QueryBuilder - imagePathEqualTo(String? value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'imagePath', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'imagePath', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - imagePathIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'imagePath', value: ''), - ); - }); - } - - QueryBuilder - imagePathIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'imagePath', value: ''), - ); - }); - } - - QueryBuilder nameEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameContains( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameMatches( - String pattern, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); - }); - } - - QueryBuilder - nameIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); - }); - } - - QueryBuilder typeEqualTo( - BeneficiaryType value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'type', value: value), - ); - }); - } - - QueryBuilder typeGreaterThan( - BeneficiaryType value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'type', - value: value, - ), - ); - }); - } - - QueryBuilder typeLessThan( - BeneficiaryType value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'type', - value: value, - ), - ); - }); - } - - QueryBuilder typeBetween( - BeneficiaryType lower, - BeneficiaryType upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'type', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension BeneficiaryQueryObject - on QueryBuilder {} - -extension BeneficiaryQueryLinks - on QueryBuilder { - 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 BeneficiaryQuerySortBy - on QueryBuilder { - QueryBuilder sortByImagePath() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'imagePath', Sort.asc); - }); - } - - QueryBuilder sortByImagePathDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'imagePath', Sort.desc); - }); - } - - QueryBuilder sortByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder sortByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } - - QueryBuilder sortByType() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'type', Sort.asc); - }); - } - - QueryBuilder sortByTypeDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'type', Sort.desc); - }); - } -} - -extension BeneficiaryQuerySortThenBy - on QueryBuilder { - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder thenByImagePath() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'imagePath', Sort.asc); - }); - } - - QueryBuilder thenByImagePathDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'imagePath', Sort.desc); - }); - } - - QueryBuilder thenByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder thenByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } - - QueryBuilder thenByType() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'type', Sort.asc); - }); - } - - QueryBuilder thenByTypeDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'type', Sort.desc); - }); - } -} - -extension BeneficiaryQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByImagePath({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'imagePath', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'name', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByType() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'type'); - }); - } -} - -extension BeneficiaryQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder imagePathProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'imagePath'); - }); - } - - QueryBuilder nameProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'name'); - }); - } - - QueryBuilder typeProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'type'); - }); - } -} diff --git a/lib/database/collections/budget.dart b/lib/database/collections/budget.dart deleted file mode 100644 index bfb64f9..0000000 --- a/lib/database/collections/budget.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:isar/isar.dart'; -import 'package:okane/database/collections/expense_category.dart'; - -import 'account.dart'; - -part 'budget.g.dart'; - -enum BudgetPeriod { month } - -@collection -class BudgetItem { - Id id = Isar.autoIncrement; - - late double amount; - - final expenseCategory = IsarLink(); -} - -@collection -class Budget { - Id id = Isar.autoIncrement; - - @Enumerated(EnumType.ordinal) - late BudgetPeriod period; - - late String name; - - late double income; - - late bool includeOtherSpendings; - - final account = IsarLink(); - - final items = IsarLinks(); -} diff --git a/lib/database/collections/budget.g.dart b/lib/database/collections/budget.g.dart deleted file mode 100644 index 2700779..0000000 --- a/lib/database/collections/budget.g.dart +++ /dev/null @@ -1,1209 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'budget.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetBudgetItemCollection on Isar { - IsarCollection get budgetItems => this.collection(); -} - -const BudgetItemSchema = CollectionSchema( - name: r'BudgetItem', - id: 618999772191843499, - properties: { - r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), - }, - estimateSize: _budgetItemEstimateSize, - serialize: _budgetItemSerialize, - deserialize: _budgetItemDeserialize, - deserializeProp: _budgetItemDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'expenseCategory': LinkSchema( - id: -915171920088002159, - name: r'expenseCategory', - target: r'ExpenseCategory', - single: true, - ), - }, - embeddedSchemas: {}, - getId: _budgetItemGetId, - getLinks: _budgetItemGetLinks, - attach: _budgetItemAttach, - version: '3.1.0+1', -); - -int _budgetItemEstimateSize( - BudgetItem object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - return bytesCount; -} - -void _budgetItemSerialize( - BudgetItem object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDouble(offsets[0], object.amount); -} - -BudgetItem _budgetItemDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = BudgetItem(); - object.amount = reader.readDouble(offsets[0]); - object.id = id; - return object; -} - -P _budgetItemDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDouble(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _budgetItemGetId(BudgetItem object) { - return object.id; -} - -List> _budgetItemGetLinks(BudgetItem object) { - return [object.expenseCategory]; -} - -void _budgetItemAttach(IsarCollection col, Id id, BudgetItem object) { - object.id = id; - object.expenseCategory.attach( - col, - col.isar.collection(), - r'expenseCategory', - id, - ); -} - -extension BudgetItemQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension BudgetItemQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension BudgetItemQueryFilter - on QueryBuilder { - QueryBuilder amountEqualTo( - double value, { - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountGreaterThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountLessThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountBetween( - double lower, - double upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder idEqualTo( - Id value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension BudgetItemQueryObject - on QueryBuilder {} - -extension BudgetItemQueryLinks - on QueryBuilder { - QueryBuilder expenseCategory( - FilterQuery q, - ) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'expenseCategory'); - }); - } - - QueryBuilder - expenseCategoryIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'expenseCategory', 0, true, 0, true); - }); - } -} - -extension BudgetItemQuerySortBy - on QueryBuilder { - QueryBuilder sortByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder sortByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } -} - -extension BudgetItemQuerySortThenBy - on QueryBuilder { - QueryBuilder thenByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder thenByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } -} - -extension BudgetItemQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'amount'); - }); - } -} - -extension BudgetItemQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder amountProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'amount'); - }); - } -} - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetBudgetCollection on Isar { - IsarCollection get budgets => this.collection(); -} - -const BudgetSchema = CollectionSchema( - name: r'Budget', - id: -3383598594604670326, - properties: { - r'includeOtherSpendings': PropertySchema( - id: 0, - name: r'includeOtherSpendings', - type: IsarType.bool, - ), - r'income': PropertySchema(id: 1, name: r'income', type: IsarType.double), - r'name': PropertySchema(id: 2, name: r'name', type: IsarType.string), - r'period': PropertySchema( - id: 3, - name: r'period', - type: IsarType.byte, - enumMap: _BudgetperiodEnumValueMap, - ), - }, - estimateSize: _budgetEstimateSize, - serialize: _budgetSerialize, - deserialize: _budgetDeserialize, - deserializeProp: _budgetDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'account': LinkSchema( - id: -2244135419803748845, - name: r'account', - target: r'Account', - single: true, - ), - r'items': LinkSchema( - id: -7217800434111289514, - name: r'items', - target: r'BudgetItem', - single: false, - ), - }, - embeddedSchemas: {}, - getId: _budgetGetId, - getLinks: _budgetGetLinks, - attach: _budgetAttach, - version: '3.1.0+1', -); - -int _budgetEstimateSize( - Budget object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.name.length * 3; - return bytesCount; -} - -void _budgetSerialize( - Budget object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeBool(offsets[0], object.includeOtherSpendings); - writer.writeDouble(offsets[1], object.income); - writer.writeString(offsets[2], object.name); - writer.writeByte(offsets[3], object.period.index); -} - -Budget _budgetDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = Budget(); - object.id = id; - object.includeOtherSpendings = reader.readBool(offsets[0]); - object.income = reader.readDouble(offsets[1]); - object.name = reader.readString(offsets[2]); - object.period = - _BudgetperiodValueEnumMap[reader.readByteOrNull(offsets[3])] ?? - BudgetPeriod.month; - return object; -} - -P _budgetDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readBool(offset)) as P; - case 1: - return (reader.readDouble(offset)) as P; - case 2: - return (reader.readString(offset)) as P; - case 3: - return (_BudgetperiodValueEnumMap[reader.readByteOrNull(offset)] ?? - BudgetPeriod.month) - as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -const _BudgetperiodEnumValueMap = {'month': 0}; -const _BudgetperiodValueEnumMap = {0: BudgetPeriod.month}; - -Id _budgetGetId(Budget object) { - return object.id; -} - -List> _budgetGetLinks(Budget object) { - return [object.account, object.items]; -} - -void _budgetAttach(IsarCollection col, Id id, Budget object) { - object.id = id; - object.account.attach(col, col.isar.collection(), r'account', id); - object.items.attach(col, col.isar.collection(), r'items', id); -} - -extension BudgetQueryWhereSort on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension BudgetQueryWhere on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension BudgetQueryFilter on QueryBuilder { - QueryBuilder idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - includeOtherSpendingsEqualTo(bool value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'includeOtherSpendings', - value: value, - ), - ); - }); - } - - QueryBuilder incomeEqualTo( - double value, { - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'income', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder incomeGreaterThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'income', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder incomeLessThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'income', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder incomeBetween( - double lower, - double upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'income', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder nameEqualTo( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameContains( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameMatches( - String pattern, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder nameIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); - }); - } - - QueryBuilder nameIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); - }); - } - - QueryBuilder periodEqualTo( - BudgetPeriod value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'period', value: value), - ); - }); - } - - QueryBuilder periodGreaterThan( - BudgetPeriod value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'period', - value: value, - ), - ); - }); - } - - QueryBuilder periodLessThan( - BudgetPeriod value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'period', - value: value, - ), - ); - }); - } - - QueryBuilder periodBetween( - BudgetPeriod lower, - BudgetPeriod upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'period', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension BudgetQueryObject on QueryBuilder {} - -extension BudgetQueryLinks on QueryBuilder { - 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); - }); - } - - QueryBuilder items( - FilterQuery q, - ) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'items'); - }); - } - - QueryBuilder itemsLengthEqualTo( - int length, - ) { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'items', length, true, length, true); - }); - } - - QueryBuilder itemsIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'items', 0, true, 0, true); - }); - } - - QueryBuilder itemsIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'items', 0, false, 999999, true); - }); - } - - QueryBuilder itemsLengthLessThan( - int length, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'items', 0, true, length, include); - }); - } - - QueryBuilder itemsLengthGreaterThan( - int length, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'items', length, include, 999999, true); - }); - } - - QueryBuilder itemsLengthBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.linkLength( - r'items', - lower, - includeLower, - upper, - includeUpper, - ); - }); - } -} - -extension BudgetQuerySortBy on QueryBuilder { - QueryBuilder sortByIncludeOtherSpendings() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'includeOtherSpendings', Sort.asc); - }); - } - - QueryBuilder sortByIncludeOtherSpendingsDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'includeOtherSpendings', Sort.desc); - }); - } - - QueryBuilder sortByIncome() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'income', Sort.asc); - }); - } - - QueryBuilder sortByIncomeDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'income', Sort.desc); - }); - } - - QueryBuilder sortByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder sortByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } - - QueryBuilder sortByPeriod() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'period', Sort.asc); - }); - } - - QueryBuilder sortByPeriodDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'period', Sort.desc); - }); - } -} - -extension BudgetQuerySortThenBy on QueryBuilder { - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder thenByIncludeOtherSpendings() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'includeOtherSpendings', Sort.asc); - }); - } - - QueryBuilder thenByIncludeOtherSpendingsDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'includeOtherSpendings', Sort.desc); - }); - } - - QueryBuilder thenByIncome() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'income', Sort.asc); - }); - } - - QueryBuilder thenByIncomeDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'income', Sort.desc); - }); - } - - QueryBuilder thenByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder thenByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } - - QueryBuilder thenByPeriod() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'period', Sort.asc); - }); - } - - QueryBuilder thenByPeriodDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'period', Sort.desc); - }); - } -} - -extension BudgetQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByIncludeOtherSpendings() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'includeOtherSpendings'); - }); - } - - QueryBuilder distinctByIncome() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'income'); - }); - } - - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'name', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByPeriod() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'period'); - }); - } -} - -extension BudgetQueryProperty on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder includeOtherSpendingsProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'includeOtherSpendings'); - }); - } - - QueryBuilder incomeProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'income'); - }); - } - - QueryBuilder nameProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'name'); - }); - } - - QueryBuilder periodProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'period'); - }); - } -} diff --git a/lib/database/collections/expense_category.dart b/lib/database/collections/expense_category.dart deleted file mode 100644 index 11e157b..0000000 --- a/lib/database/collections/expense_category.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:isar/isar.dart'; - -part 'expense_category.g.dart'; - -@collection -class ExpenseCategory { - Id id = Isar.autoIncrement; - - late String name; -} diff --git a/lib/database/collections/expense_category.g.dart b/lib/database/collections/expense_category.g.dart deleted file mode 100644 index 13012af..0000000 --- a/lib/database/collections/expense_category.g.dart +++ /dev/null @@ -1,451 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'expense_category.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetExpenseCategoryCollection on Isar { - IsarCollection get expenseCategorys => this.collection(); -} - -const ExpenseCategorySchema = CollectionSchema( - name: r'ExpenseCategory', - id: -6352499903118634, - properties: { - r'name': PropertySchema(id: 0, name: r'name', type: IsarType.string), - }, - estimateSize: _expenseCategoryEstimateSize, - serialize: _expenseCategorySerialize, - deserialize: _expenseCategoryDeserialize, - deserializeProp: _expenseCategoryDeserializeProp, - idName: r'id', - indexes: {}, - links: {}, - embeddedSchemas: {}, - getId: _expenseCategoryGetId, - getLinks: _expenseCategoryGetLinks, - attach: _expenseCategoryAttach, - version: '3.1.0+1', -); - -int _expenseCategoryEstimateSize( - ExpenseCategory object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.name.length * 3; - return bytesCount; -} - -void _expenseCategorySerialize( - ExpenseCategory object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.name); -} - -ExpenseCategory _expenseCategoryDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = ExpenseCategory(); - object.id = id; - object.name = reader.readString(offsets[0]); - return object; -} - -P _expenseCategoryDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readString(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _expenseCategoryGetId(ExpenseCategory object) { - return object.id; -} - -List> _expenseCategoryGetLinks(ExpenseCategory object) { - return []; -} - -void _expenseCategoryAttach( - IsarCollection col, - Id id, - ExpenseCategory object, -) { - object.id = id; -} - -extension ExpenseCategoryQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension ExpenseCategoryQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo( - Id id, - ) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension ExpenseCategoryQueryFilter - on QueryBuilder { - QueryBuilder - idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder - idGreaterThan(Id value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idLessThan(Id value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - nameEqualTo(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); - }); - } - - QueryBuilder - nameIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); - }); - } -} - -extension ExpenseCategoryQueryObject - on QueryBuilder {} - -extension ExpenseCategoryQueryLinks - on QueryBuilder {} - -extension ExpenseCategoryQuerySortBy - on QueryBuilder { - QueryBuilder sortByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder - sortByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } -} - -extension ExpenseCategoryQuerySortThenBy - on QueryBuilder { - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder thenByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder - thenByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } -} - -extension ExpenseCategoryQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'name', caseSensitive: caseSensitive); - }); - } -} - -extension ExpenseCategoryQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder nameProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'name'); - }); - } -} diff --git a/lib/database/collections/loan.dart b/lib/database/collections/loan.dart deleted file mode 100644 index 9f8cdcf..0000000 --- a/lib/database/collections/loan.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:isar/isar.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; - -part 'loan.g.dart'; - -@collection -class Loan { - Id id = Isar.autoIncrement; - - final beneficiary = IsarLink(); - - final changes = IsarLinks(); -} - -@collection -class LoanChange { - Id id = Isar.autoIncrement; - - late double amount; - - late DateTime date; -} diff --git a/lib/database/collections/loan.g.dart b/lib/database/collections/loan.g.dart deleted file mode 100644 index a670e49..0000000 --- a/lib/database/collections/loan.g.dart +++ /dev/null @@ -1,813 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'loan.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetLoanCollection on Isar { - IsarCollection get loans => this.collection(); -} - -const LoanSchema = CollectionSchema( - name: r'Loan', - id: 3165146227223573679, - properties: {}, - estimateSize: _loanEstimateSize, - serialize: _loanSerialize, - deserialize: _loanDeserialize, - deserializeProp: _loanDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'beneficiary': LinkSchema( - id: -4362685136363706814, - name: r'beneficiary', - target: r'Beneficiary', - single: true, - ), - r'changes': LinkSchema( - id: -2646664619562347284, - name: r'changes', - target: r'LoanChange', - single: false, - ), - }, - embeddedSchemas: {}, - getId: _loanGetId, - getLinks: _loanGetLinks, - attach: _loanAttach, - version: '3.1.0+1', -); - -int _loanEstimateSize( - Loan object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - return bytesCount; -} - -void _loanSerialize( - Loan object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) {} -Loan _loanDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = Loan(); - object.id = id; - return object; -} - -P _loanDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _loanGetId(Loan object) { - return object.id; -} - -List> _loanGetLinks(Loan object) { - return [object.beneficiary, object.changes]; -} - -void _loanAttach(IsarCollection col, Id id, Loan object) { - object.id = id; - object.beneficiary.attach( - col, - col.isar.collection(), - r'beneficiary', - id, - ); - object.changes.attach(col, col.isar.collection(), r'changes', id); -} - -extension LoanQueryWhereSort on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension LoanQueryWhere on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension LoanQueryFilter on QueryBuilder { - QueryBuilder idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension LoanQueryObject on QueryBuilder {} - -extension LoanQueryLinks on QueryBuilder { - QueryBuilder beneficiary( - FilterQuery q, - ) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'beneficiary'); - }); - } - - QueryBuilder beneficiaryIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'beneficiary', 0, true, 0, true); - }); - } - - QueryBuilder changes( - FilterQuery q, - ) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'changes'); - }); - } - - QueryBuilder changesLengthEqualTo( - int length, - ) { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'changes', length, true, length, true); - }); - } - - QueryBuilder changesIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'changes', 0, true, 0, true); - }); - } - - QueryBuilder changesIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'changes', 0, false, 999999, true); - }); - } - - QueryBuilder changesLengthLessThan( - int length, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'changes', 0, true, length, include); - }); - } - - QueryBuilder changesLengthGreaterThan( - int length, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'changes', length, include, 999999, true); - }); - } - - QueryBuilder changesLengthBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.linkLength( - r'changes', - lower, - includeLower, - upper, - includeUpper, - ); - }); - } -} - -extension LoanQuerySortBy on QueryBuilder {} - -extension LoanQuerySortThenBy on QueryBuilder { - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } -} - -extension LoanQueryWhereDistinct on QueryBuilder {} - -extension LoanQueryProperty on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } -} - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetLoanChangeCollection on Isar { - IsarCollection get loanChanges => this.collection(); -} - -const LoanChangeSchema = CollectionSchema( - name: r'LoanChange', - id: 998721626271124002, - properties: { - r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), - r'date': PropertySchema(id: 1, name: r'date', type: IsarType.dateTime), - }, - estimateSize: _loanChangeEstimateSize, - serialize: _loanChangeSerialize, - deserialize: _loanChangeDeserialize, - deserializeProp: _loanChangeDeserializeProp, - idName: r'id', - indexes: {}, - links: {}, - embeddedSchemas: {}, - getId: _loanChangeGetId, - getLinks: _loanChangeGetLinks, - attach: _loanChangeAttach, - version: '3.1.0+1', -); - -int _loanChangeEstimateSize( - LoanChange object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - return bytesCount; -} - -void _loanChangeSerialize( - LoanChange object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDouble(offsets[0], object.amount); - writer.writeDateTime(offsets[1], object.date); -} - -LoanChange _loanChangeDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = LoanChange(); - object.amount = reader.readDouble(offsets[0]); - object.date = reader.readDateTime(offsets[1]); - object.id = id; - return object; -} - -P _loanChangeDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDouble(offset)) as P; - case 1: - return (reader.readDateTime(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _loanChangeGetId(LoanChange object) { - return object.id; -} - -List> _loanChangeGetLinks(LoanChange object) { - return []; -} - -void _loanChangeAttach(IsarCollection col, Id id, LoanChange object) { - object.id = id; -} - -extension LoanChangeQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension LoanChangeQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension LoanChangeQueryFilter - on QueryBuilder { - QueryBuilder amountEqualTo( - double value, { - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountGreaterThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountLessThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountBetween( - double lower, - double upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder dateEqualTo( - DateTime value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'date', value: value), - ); - }); - } - - QueryBuilder dateGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'date', - value: value, - ), - ); - }); - } - - QueryBuilder dateLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'date', - value: value, - ), - ); - }); - } - - QueryBuilder dateBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'date', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder idEqualTo( - Id value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension LoanChangeQueryObject - on QueryBuilder {} - -extension LoanChangeQueryLinks - on QueryBuilder {} - -extension LoanChangeQuerySortBy - on QueryBuilder { - QueryBuilder sortByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder sortByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder sortByDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.asc); - }); - } - - QueryBuilder sortByDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.desc); - }); - } -} - -extension LoanChangeQuerySortThenBy - on QueryBuilder { - QueryBuilder thenByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder thenByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder thenByDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.asc); - }); - } - - QueryBuilder thenByDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } -} - -extension LoanChangeQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'amount'); - }); - } - - QueryBuilder distinctByDate() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'date'); - }); - } -} - -extension LoanChangeQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder amountProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'amount'); - }); - } - - QueryBuilder dateProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'date'); - }); - } -} diff --git a/lib/database/collections/recurrent.dart b/lib/database/collections/recurrent.dart deleted file mode 100644 index e4c4487..0000000 --- a/lib/database/collections/recurrent.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:isar/isar.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/template.dart'; - -part 'recurrent.g.dart'; - -@collection -class RecurringTransaction { - Id id = Isar.autoIncrement; - - late int days; - - DateTime? lastExecution; - - final template = IsarLink(); - - final account = IsarLink(); - - bool isDue(DateTime now) { - if (lastExecution == null) { - return true; - } - - final expectedNextExecution = lastExecution!.add(Duration(days: days)); - if (now.isAfter(expectedNextExecution)) { - return true; - } - - return now.difference(expectedNextExecution).inDays.abs() <= - (days * 0.5).toInt(); - } -} diff --git a/lib/database/collections/recurrent.g.dart b/lib/database/collections/recurrent.g.dart deleted file mode 100644 index c587bc5..0000000 --- a/lib/database/collections/recurrent.g.dart +++ /dev/null @@ -1,633 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'recurrent.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetRecurringTransactionCollection on Isar { - IsarCollection get recurringTransactions => - this.collection(); -} - -const RecurringTransactionSchema = CollectionSchema( - name: r'RecurringTransaction', - id: 969840479390105118, - properties: { - r'days': PropertySchema(id: 0, name: r'days', type: IsarType.long), - r'lastExecution': PropertySchema( - id: 1, - name: r'lastExecution', - type: IsarType.dateTime, - ), - }, - estimateSize: _recurringTransactionEstimateSize, - serialize: _recurringTransactionSerialize, - deserialize: _recurringTransactionDeserialize, - deserializeProp: _recurringTransactionDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'template': LinkSchema( - id: -8891369755965227865, - name: r'template', - target: r'TransactionTemplate', - single: true, - ), - r'account': LinkSchema( - id: -6028551496614242115, - name: r'account', - target: r'Account', - single: true, - ), - }, - embeddedSchemas: {}, - getId: _recurringTransactionGetId, - getLinks: _recurringTransactionGetLinks, - attach: _recurringTransactionAttach, - version: '3.1.0+1', -); - -int _recurringTransactionEstimateSize( - RecurringTransaction object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - return bytesCount; -} - -void _recurringTransactionSerialize( - RecurringTransaction object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeLong(offsets[0], object.days); - writer.writeDateTime(offsets[1], object.lastExecution); -} - -RecurringTransaction _recurringTransactionDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = RecurringTransaction(); - object.days = reader.readLong(offsets[0]); - object.id = id; - object.lastExecution = reader.readDateTimeOrNull(offsets[1]); - return object; -} - -P _recurringTransactionDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readLong(offset)) as P; - case 1: - return (reader.readDateTimeOrNull(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _recurringTransactionGetId(RecurringTransaction object) { - return object.id; -} - -List> _recurringTransactionGetLinks( - RecurringTransaction object, -) { - return [object.template, object.account]; -} - -void _recurringTransactionAttach( - IsarCollection col, - Id id, - RecurringTransaction object, -) { - object.id = id; - object.template.attach( - col, - col.isar.collection(), - r'template', - id, - ); - object.account.attach(col, col.isar.collection(), r'account', id); -} - -extension RecurringTransactionQueryWhereSort - on QueryBuilder { - QueryBuilder - anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension RecurringTransactionQueryWhere - on QueryBuilder { - QueryBuilder - idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder - idLessThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder - idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension RecurringTransactionQueryFilter - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QFilterCondition - > { - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysEqualTo(int value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'days', value: value), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysGreaterThan(int value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'days', - value: value, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysLessThan(int value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'days', - value: value, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'days', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idGreaterThan(Id value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idLessThan(Id value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'lastExecution'), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'lastExecution'), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionEqualTo(DateTime? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'lastExecution', value: value), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionGreaterThan(DateTime? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'lastExecution', - value: value, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionLessThan(DateTime? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'lastExecution', - value: value, - ), - ); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionBetween( - DateTime? lower, - DateTime? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'lastExecution', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension RecurringTransactionQueryObject - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QFilterCondition - > {} - -extension RecurringTransactionQueryLinks - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QFilterCondition - > { - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - template(FilterQuery q) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'template'); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - templateIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'template', 0, true, 0, true); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - account(FilterQuery q) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'account'); - }); - } - - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - accountIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'account', 0, true, 0, true); - }); - } -} - -extension RecurringTransactionQuerySortBy - on QueryBuilder { - QueryBuilder - sortByDays() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'days', Sort.asc); - }); - } - - QueryBuilder - sortByDaysDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'days', Sort.desc); - }); - } - - QueryBuilder - sortByLastExecution() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastExecution', Sort.asc); - }); - } - - QueryBuilder - sortByLastExecutionDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastExecution', Sort.desc); - }); - } -} - -extension RecurringTransactionQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByDays() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'days', Sort.asc); - }); - } - - QueryBuilder - thenByDaysDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'days', Sort.desc); - }); - } - - QueryBuilder - thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder - thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder - thenByLastExecution() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastExecution', Sort.asc); - }); - } - - QueryBuilder - thenByLastExecutionDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'lastExecution', Sort.desc); - }); - } -} - -extension RecurringTransactionQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByDays() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'days'); - }); - } - - QueryBuilder - distinctByLastExecution() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'lastExecution'); - }); - } -} - -extension RecurringTransactionQueryProperty - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QQueryProperty - > { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder daysProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'days'); - }); - } - - QueryBuilder - lastExecutionProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'lastExecution'); - }); - } -} diff --git a/lib/database/collections/template.dart b/lib/database/collections/template.dart deleted file mode 100644 index 4fd62ae..0000000 --- a/lib/database/collections/template.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:isar/isar.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/expense_category.dart'; - -part 'template.g.dart'; - -@collection -class TransactionTemplate { - Id id = Isar.autoIncrement; - - late String name; - - late double amount; - - late bool recurring; - - final expenseCategory = IsarLink(); - - final beneficiary = IsarLink(); - - final account = IsarLink(); -} diff --git a/lib/database/collections/template.g.dart b/lib/database/collections/template.g.dart deleted file mode 100644 index 99b6524..0000000 --- a/lib/database/collections/template.g.dart +++ /dev/null @@ -1,721 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'template.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetTransactionTemplateCollection on Isar { - IsarCollection get transactionTemplates => - this.collection(); -} - -const TransactionTemplateSchema = CollectionSchema( - name: r'TransactionTemplate', - id: -2324989530163310644, - properties: { - r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), - r'name': PropertySchema(id: 1, name: r'name', type: IsarType.string), - r'recurring': PropertySchema( - id: 2, - name: r'recurring', - type: IsarType.bool, - ), - }, - estimateSize: _transactionTemplateEstimateSize, - serialize: _transactionTemplateSerialize, - deserialize: _transactionTemplateDeserialize, - deserializeProp: _transactionTemplateDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'expenseCategory': LinkSchema( - id: 3013186211408715712, - name: r'expenseCategory', - target: r'ExpenseCategory', - single: true, - ), - r'beneficiary': LinkSchema( - id: -7565656011019083791, - name: r'beneficiary', - target: r'Beneficiary', - single: true, - ), - r'account': LinkSchema( - id: 2465433941426054606, - name: r'account', - target: r'Account', - single: true, - ), - }, - embeddedSchemas: {}, - getId: _transactionTemplateGetId, - getLinks: _transactionTemplateGetLinks, - attach: _transactionTemplateAttach, - version: '3.1.0+1', -); - -int _transactionTemplateEstimateSize( - TransactionTemplate object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.name.length * 3; - return bytesCount; -} - -void _transactionTemplateSerialize( - TransactionTemplate object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDouble(offsets[0], object.amount); - writer.writeString(offsets[1], object.name); - writer.writeBool(offsets[2], object.recurring); -} - -TransactionTemplate _transactionTemplateDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = TransactionTemplate(); - object.amount = reader.readDouble(offsets[0]); - object.id = id; - object.name = reader.readString(offsets[1]); - object.recurring = reader.readBool(offsets[2]); - return object; -} - -P _transactionTemplateDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDouble(offset)) as P; - case 1: - return (reader.readString(offset)) as P; - case 2: - return (reader.readBool(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _transactionTemplateGetId(TransactionTemplate object) { - return object.id; -} - -List> _transactionTemplateGetLinks( - TransactionTemplate object, -) { - return [object.expenseCategory, object.beneficiary, object.account]; -} - -void _transactionTemplateAttach( - IsarCollection col, - Id id, - TransactionTemplate object, -) { - object.id = id; - object.expenseCategory.attach( - col, - col.isar.collection(), - r'expenseCategory', - id, - ); - object.beneficiary.attach( - col, - col.isar.collection(), - r'beneficiary', - id, - ); - object.account.attach(col, col.isar.collection(), r'account', id); -} - -extension TransactionTemplateQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension TransactionTemplateQueryWhere - on QueryBuilder { - QueryBuilder - idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder - idLessThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder - idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension TransactionTemplateQueryFilter - on - QueryBuilder< - TransactionTemplate, - TransactionTemplate, - QFilterCondition - > { - QueryBuilder - amountEqualTo(double value, {double epsilon = Query.epsilon}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - amountGreaterThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - amountLessThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - amountBetween( - double lower, - double upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - idEqualTo(Id value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder - idGreaterThan(Id value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idLessThan(Id value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - nameEqualTo(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - nameIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); - }); - } - - QueryBuilder - nameIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); - }); - } - - QueryBuilder - recurringEqualTo(bool value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'recurring', value: value), - ); - }); - } -} - -extension TransactionTemplateQueryObject - on - QueryBuilder< - TransactionTemplate, - TransactionTemplate, - QFilterCondition - > {} - -extension TransactionTemplateQueryLinks - on - QueryBuilder< - TransactionTemplate, - TransactionTemplate, - QFilterCondition - > { - QueryBuilder - expenseCategory(FilterQuery q) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'expenseCategory'); - }); - } - - QueryBuilder - expenseCategoryIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'expenseCategory', 0, true, 0, true); - }); - } - - QueryBuilder - beneficiary(FilterQuery q) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'beneficiary'); - }); - } - - QueryBuilder - beneficiaryIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'beneficiary', 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 TransactionTemplateQuerySortBy - on QueryBuilder { - QueryBuilder - sortByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder - sortByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder - sortByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder - sortByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } - - QueryBuilder - sortByRecurring() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'recurring', Sort.asc); - }); - } - - QueryBuilder - sortByRecurringDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'recurring', Sort.desc); - }); - } -} - -extension TransactionTemplateQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder - thenByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder - thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder - thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder - thenByName() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.asc); - }); - } - - QueryBuilder - thenByNameDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'name', Sort.desc); - }); - } - - QueryBuilder - thenByRecurring() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'recurring', Sort.asc); - }); - } - - QueryBuilder - thenByRecurringDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'recurring', Sort.desc); - }); - } -} - -extension TransactionTemplateQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'amount'); - }); - } - - QueryBuilder - distinctByName({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'name', caseSensitive: caseSensitive); - }); - } - - QueryBuilder - distinctByRecurring() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'recurring'); - }); - } -} - -extension TransactionTemplateQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder amountProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'amount'); - }); - } - - QueryBuilder nameProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'name'); - }); - } - - QueryBuilder - recurringProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'recurring'); - }); - } -} diff --git a/lib/database/collections/transaction.dart b/lib/database/collections/transaction.dart deleted file mode 100644 index 38e4eef..0000000 --- a/lib/database/collections/transaction.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:isar/isar.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/expense_category.dart'; - -part 'transaction.g.dart'; - -@collection -class Transaction { - Id id = Isar.autoIncrement; - - late double amount; - - late List tags; - - late DateTime date; - - final expenseCategory = IsarLink(); - - final account = IsarLink(); - - final beneficiary = IsarLink(); -} diff --git a/lib/database/collections/transaction.g.dart b/lib/database/collections/transaction.g.dart deleted file mode 100644 index 491ba9c..0000000 --- a/lib/database/collections/transaction.g.dart +++ /dev/null @@ -1,775 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'transaction.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetTransactionCollection on Isar { - IsarCollection get transactions => this.collection(); -} - -const TransactionSchema = CollectionSchema( - name: r'Transaction', - id: 5320225499417954855, - properties: { - r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), - r'date': PropertySchema(id: 1, name: r'date', type: IsarType.dateTime), - r'tags': PropertySchema(id: 2, name: r'tags', type: IsarType.stringList), - }, - estimateSize: _transactionEstimateSize, - serialize: _transactionSerialize, - deserialize: _transactionDeserialize, - deserializeProp: _transactionDeserializeProp, - idName: r'id', - indexes: {}, - links: { - r'expenseCategory': LinkSchema( - id: 490804775908778298, - name: r'expenseCategory', - target: r'ExpenseCategory', - single: true, - ), - r'account': LinkSchema( - id: -8467990729867616553, - name: r'account', - target: r'Account', - single: true, - ), - r'beneficiary': LinkSchema( - id: -1184196133247909686, - name: r'beneficiary', - target: r'Beneficiary', - single: true, - ), - }, - embeddedSchemas: {}, - getId: _transactionGetId, - getLinks: _transactionGetLinks, - attach: _transactionAttach, - version: '3.1.0+1', -); - -int _transactionEstimateSize( - Transaction object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.tags.length * 3; - { - for (var i = 0; i < object.tags.length; i++) { - final value = object.tags[i]; - bytesCount += value.length * 3; - } - } - return bytesCount; -} - -void _transactionSerialize( - Transaction object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDouble(offsets[0], object.amount); - writer.writeDateTime(offsets[1], object.date); - writer.writeStringList(offsets[2], object.tags); -} - -Transaction _transactionDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = Transaction(); - object.amount = reader.readDouble(offsets[0]); - object.date = reader.readDateTime(offsets[1]); - object.id = id; - object.tags = reader.readStringList(offsets[2]) ?? []; - return object; -} - -P _transactionDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDouble(offset)) as P; - case 1: - return (reader.readDateTime(offset)) as P; - case 2: - return (reader.readStringList(offset) ?? []) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _transactionGetId(Transaction object) { - return object.id; -} - -List> _transactionGetLinks(Transaction object) { - return [object.expenseCategory, object.account, object.beneficiary]; -} - -void _transactionAttach( - IsarCollection col, - Id id, - Transaction object, -) { - object.id = id; - object.expenseCategory.attach( - col, - col.isar.collection(), - r'expenseCategory', - id, - ); - object.account.attach(col, col.isar.collection(), r'account', id); - object.beneficiary.attach( - col, - col.isar.collection(), - r'beneficiary', - id, - ); -} - -extension TransactionQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension TransactionQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder idNotEqualTo( - Id id, - ) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension TransactionQueryFilter - on QueryBuilder { - QueryBuilder amountEqualTo( - double value, { - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - amountGreaterThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountLessThan( - double value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder amountBetween( - double lower, - double upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder dateEqualTo( - DateTime value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'date', value: value), - ); - }); - } - - QueryBuilder dateGreaterThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'date', - value: value, - ), - ); - }); - } - - QueryBuilder dateLessThan( - DateTime value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'date', - value: value, - ), - ); - }); - } - - QueryBuilder dateBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'date', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder idEqualTo( - Id value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder idBetween( - Id lower, - Id upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - tagsElementEqualTo(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'tags', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'tags', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - tagsElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'tags', value: ''), - ); - }); - } - - QueryBuilder - tagsElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'tags', value: ''), - ); - }); - } - - QueryBuilder - tagsLengthEqualTo(int length) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', length, true, length, true); - }); - } - - QueryBuilder tagsIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', 0, true, 0, true); - }); - } - - QueryBuilder - tagsIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', 0, false, 999999, true); - }); - } - - QueryBuilder - tagsLengthLessThan(int length, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', 0, true, length, include); - }); - } - - QueryBuilder - tagsLengthGreaterThan(int length, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', length, include, 999999, true); - }); - } - - QueryBuilder - tagsLengthBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.listLength( - r'tags', - lower, - includeLower, - upper, - includeUpper, - ); - }); - } -} - -extension TransactionQueryObject - on QueryBuilder {} - -extension TransactionQueryLinks - on QueryBuilder { - QueryBuilder expenseCategory( - FilterQuery q, - ) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'expenseCategory'); - }); - } - - QueryBuilder - expenseCategoryIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'expenseCategory', 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); - }); - } - - QueryBuilder beneficiary( - FilterQuery q, - ) { - return QueryBuilder.apply(this, (query) { - return query.link(q, r'beneficiary'); - }); - } - - QueryBuilder - beneficiaryIsNull() { - return QueryBuilder.apply(this, (query) { - return query.linkLength(r'beneficiary', 0, true, 0, true); - }); - } -} - -extension TransactionQuerySortBy - on QueryBuilder { - QueryBuilder sortByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder sortByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder sortByDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.asc); - }); - } - - QueryBuilder sortByDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.desc); - }); - } -} - -extension TransactionQuerySortThenBy - on QueryBuilder { - QueryBuilder thenByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.asc); - }); - } - - QueryBuilder thenByAmountDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'amount', Sort.desc); - }); - } - - QueryBuilder thenByDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.asc); - }); - } - - QueryBuilder thenByDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'date', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } -} - -extension TransactionQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByAmount() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'amount'); - }); - } - - QueryBuilder distinctByDate() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'date'); - }); - } - - QueryBuilder distinctByTags() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'tags'); - }); - } -} - -extension TransactionQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder amountProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'amount'); - }); - } - - QueryBuilder dateProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'date'); - }); - } - - QueryBuilder, QQueryOperations> tagsProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'tags'); - }); - } -} diff --git a/lib/database/database.dart b/lib/database/database.dart deleted file mode 100644 index c3cfec1..0000000 --- a/lib/database/database.dart +++ /dev/null @@ -1,382 +0,0 @@ -import 'dart:async'; - -import 'package:isar/isar.dart'; -import 'package:get_it/get_it.dart'; -import 'package:more/collection.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/expense_category.dart'; -import 'package:okane/database/collections/loan.dart'; -import 'package:okane/database/collections/recurrent.dart'; -import 'package:okane/database/collections/template.dart'; -import 'package:okane/database/collections/transaction.dart'; -import 'package:okane/ui/state/core.dart'; -import 'package:okane/ui/utils.dart'; -import 'package:path_provider/path_provider.dart'; - -import 'collections/budget.dart'; - -Future openDatabase() async { - final dir = await getApplicationDocumentsDirectory(); - return Isar.open([ - AccountSchema, - BeneficiarySchema, - TransactionSchema, - TransactionTemplateSchema, - RecurringTransactionSchema, - ExpenseCategorySchema, - BudgetSchema, - BudgetItemSchema, - LoanSchema, - LoanChangeSchema, - ], directory: dir.path); -} - -Future> getAccounts() { - return GetIt.I.get().accounts.where().findAll(); -} - -Future getTotalBalance(Account account) async { - return GetIt.I - .get() - .transactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .amountProperty() - .sum(); -} - -Future> getLastTransactions( - Account account, - DateTime today, - int days, -) async { - return GetIt.I - .get() - .transactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .dateGreaterThan(toMidnight(today.subtract(Duration(days: days)))) - .findAll(); -} - -Future> getRecurringTransactions(Account? account) { - if (account == null) { - return Future.value([]); - } - - return GetIt.I - .get() - .recurringTransactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .findAll(); -} - -Stream watchRecurringTransactions(Account account) { - final account = GetIt.I.get().activeAccount!; - return GetIt.I - .get() - .recurringTransactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .build() - .watchLazy(fireImmediately: true); -} - -Future upsertAccount(Account account) async { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.accounts.put(account); - }); -} - -Future upsertBeneficiary(Beneficiary beneficiary) async { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.beneficiarys.put(beneficiary); - await beneficiary.account.save(); - }); -} - -Future getAccountBeneficiary(Account account) { - return GetIt.I - .get() - .beneficiarys - .filter() - .account((q) => q.idEqualTo(account.id)) - .findFirst(); -} - -Future upsertTransactionTemplate(TransactionTemplate template) async { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.transactionTemplates.put(template); - await template.beneficiary.save(); - await template.account.save(); - await template.expenseCategory.save(); - }); -} - -Future deleteRecurringTransactionTemplate(RecurringTransaction template) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.transactionTemplates.delete(template.template.value!.id); - await db.recurringTransactions.delete(template.id); - }); -} - -Future upsertRecurringTransaction(RecurringTransaction template) async { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.recurringTransactions.put(template); - await template.template.save(); - await template.account.save(); - }); -} - -Future upsertTransaction(Transaction transaction) async { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.transactions.put(transaction); - await transaction.beneficiary.save(); - await transaction.account.save(); - await transaction.expenseCategory.save(); - }); -} - -Stream watchAccounts() { - return GetIt.I.get().accounts.watchLazy(); -} - -Stream watchTransactionTemplates(Account account) { - return GetIt.I - .get() - .transactionTemplates - .filter() - .account((q) => q.idEqualTo(account.id)) - .watchLazy(fireImmediately: true); -} - -Future deleteTransactionTemplate(TransactionTemplate template) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.transactionTemplates.delete(template.id); - }); -} - -Future> getTransactionTemplates(Account? account) { - if (account == null) { - return Future.value([]); - } - - return GetIt.I - .get() - .transactionTemplates - .filter() - .account((q) => q.idEqualTo(account.id)) - .findAll(); -} - -Stream watchTransactions(Account account) { - return GetIt.I - .get() - .transactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .watchLazy(fireImmediately: true); -} - -Future> getTransactions(Account? account) { - if (account == null) { - return Future.value([]); - } - - return GetIt.I - .get() - .transactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .findAll(); -} - -Stream watchBeneficiaries() { - return GetIt.I.get().beneficiarys.watchLazy(fireImmediately: true); -} - -Future> getBeneficiaries() { - return GetIt.I.get().beneficiarys.where().findAll(); -} - -Stream watchBeneficiaryObject(Id id) { - return GetIt.I.get().beneficiarys.watchObject(id); -} - -Future upsertExpenseCategory(ExpenseCategory category) { - final db = GetIt.I.get(); - return db.writeTxn(() => db.expenseCategorys.put(category)); -} - -Future> getExpenseCategories() { - return GetIt.I.get().expenseCategorys.where().findAll(); -} - -Stream watchExpenseCategory() { - return GetIt.I.get().expenseCategorys.watchLazy(fireImmediately: true); -} - -Stream watchBudgets(Account account) { - return GetIt.I - .get() - .budgets - .filter() - .account((q) => q.idEqualTo(account.id)) - .watchLazy(fireImmediately: true); -} - -Future> getBudgets(Account? account) { - if (account == null) { - return Future.value([]); - } - - return GetIt.I - .get() - .budgets - .filter() - .account((q) => q.idEqualTo(account.id)) - .findAll(); -} - -Future upsertBudget(Budget budget) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.budgets.put(budget); - await budget.items.save(); - await budget.account.save(); - }); -} - -Future upsertBudgetItem(BudgetItem item) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.budgetItems.put(item); - await item.expenseCategory.save(); - }); -} - -enum TransactionQueryDateOption { thisMonth } - -Future> getTransactionsInTimeframe( - Account account, - DateTime today, - TransactionQueryDateOption option, -) async { - final lower = switch (option) { - TransactionQueryDateOption.thisMonth => DateTime( - today.year, - today.month, - 0, - ), - }; - final upper = switch (option) { - TransactionQueryDateOption.thisMonth => monthEnding(today), - }; - - return GetIt.I - .get() - .transactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .dateBetween(lower, upper) - .findAll(); -} - -Future upsertLoan(Loan loan) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.loans.put(loan); - await loan.beneficiary.save(); - await loan.changes.save(); - }); -} - -Future> getLoans() { - return GetIt.I.get().loans.where().findAll(); -} - -Stream watchLoans() { - return GetIt.I.get().loans.where().watchLazy(fireImmediately: true); -} - -Future deleteLoan(Loan loan) async { - final db = GetIt.I.get(); - final loanChangeIds = loan.changes.map((c) => c.id).toList(); - return db.writeTxn(() async { - await db.loans.delete(loan.id); - await db.loanChanges.deleteAll(loanChangeIds); - }); -} - -Future upsertLoanChange(LoanChange loanChange) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.loanChanges.put(loanChange); - }); -} - -Future deleteLoanChange(LoanChange loanChange) { - final db = GetIt.I.get(); - return db.writeTxn(() async { - await db.loanChanges.delete(loanChange.id); - }); -} - -Future getTotalLoanSum() async { - final loans = await getLoans(); - return loans - .map( - (loan) => - loan.changes.map((l) => l.amount).reduce((acc, val) => acc + val), - ) - .reduce((acc, val) => acc + val); -} - -Future deleteAccount(Account account) async { - final db = GetIt.I.get(); - final affectedBudgets = - await db.budgets - .filter() - .account((q) => q.idEqualTo(account.id)) - .findAll(); - final budgetIds = affectedBudgets.map((a) => a.id).toList(); - final budgetItemIds = - affectedBudgets.map((a) => a.items.map((i) => i.id)).flatten().toList(); - return db.writeTxn(() async { - // Remove transactions - await db.transactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .deleteAll(); - await db.beneficiarys - .filter() - .account((q) => q.idEqualTo(account.id)) - .deleteAll(); - - // Remove templates - await db.recurringTransactions - .filter() - .account((q) => q.idEqualTo(account.id)) - .deleteAll(); - await db.transactionTemplates - .filter() - .account((q) => q.idEqualTo(account.id)) - .deleteAll(); - - // Remove all budgets - await db.budgetItems.deleteAll(budgetItemIds); - await db.budgets.deleteAll(budgetIds); - - // Remove account - await db.accounts.delete(account.id); - }); -} diff --git a/lib/database/sqlite.dart b/lib/database/sqlite.dart new file mode 100644 index 0000000..bab0760 --- /dev/null +++ b/lib/database/sqlite.dart @@ -0,0 +1,667 @@ +import 'dart:async'; + +import 'package:drift/drift.dart'; +import 'package:drift_flutter/drift_flutter.dart'; +import 'package:okane/ui/utils.dart'; +import 'package:path_provider/path_provider.dart'; + +part 'sqlite.g.dart'; + +class Accounts extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get name => text()(); +} + +enum BeneficiaryType { account, other } + +class Beneficiaries extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get name => text().unique()(); + TextColumn get type => textEnum()(); + IntColumn get accountId => integer().nullable().references(Accounts, #id)(); + TextColumn get imagePath => text().nullable()(); +} + +class ExpenseCategories extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get name => text()(); +} + +enum BudgetPeriod { month } + +class BudgetItems extends Table { + IntColumn get id => integer().autoIncrement()(); + RealColumn get amount => real()(); + IntColumn get expenseCategoryId => + integer().references(ExpenseCategories, #id)(); + IntColumn get budgetId => integer().references(Budgets, #id)(); +} + +class BudgetItemDto { + final BudgetItem item; + final ExpenseCategory expenseCategory; + + BudgetItemDto({required this.item, required this.expenseCategory}); +} + +class Budgets extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get period => textEnum()(); + TextColumn get name => text()(); + RealColumn get income => real()(); + BoolColumn get includeOtherSpendings => boolean()(); + + IntColumn get accountId => integer().references(Accounts, #id)(); +} + +class BudgetsDto { + final Budget budget; + final List budgetItems; + + BudgetsDto({required this.budget, required this.budgetItems}); +} + +class Loans extends Table { + IntColumn get id => integer().autoIncrement()(); + IntColumn get beneficiaryId => integer().references(Beneficiaries, #id)(); +} + +class LoanChanges extends Table { + IntColumn get id => integer().autoIncrement()(); + IntColumn get loanId => integer().references(Loans, #id)(); + RealColumn get amount => real()(); + DateTimeColumn get date => dateTime()(); +} + +class LoanDto { + final Loan loan; + final Beneficiary beneficiary; + final List changes; + + LoanDto({ + required this.loan, + required this.beneficiary, + required this.changes, + }); +} + +class RecurringTransactions extends Table { + IntColumn get id => integer().autoIncrement()(); + IntColumn get days => integer()(); + DateTimeColumn get lastExecution => dateTime().nullable()(); + + IntColumn get templateId => integer().references(TransactionTemplates, #id)(); + + IntColumn get accountId => integer().references(Accounts, #id)(); +} + +typedef RecurringTransactionDto = + ({ + RecurringTransaction recurring, + Beneficiary beneficiary, + TransactionTemplate template, + }); + +class TransactionTemplates extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get name => text()(); + RealColumn get amount => real()(); + BoolColumn get recurring => boolean()(); + + IntColumn get expenseCategoryId => + integer().nullable().references(ExpenseCategories, #id)(); + IntColumn get beneficiaryId => integer().references(Beneficiaries, #id)(); + IntColumn get accountId => integer().references(Accounts, #id)(); +} + +typedef TransactionTemplateDto = + ({ + TransactionTemplate template, + Beneficiary beneficiary, + ExpenseCategory? expenseCategory, + }); + +class Transactions extends Table { + IntColumn get id => integer().autoIncrement()(); + + RealColumn get amount => real()(); + // TODO: tags + DateTimeColumn get date => dateTime()(); + IntColumn get expenseCategoryId => + integer().nullable().references(ExpenseCategories, #id)(); + IntColumn get accountId => integer().references(Accounts, #id)(); + IntColumn get beneficiaryId => integer().references(Beneficiaries, #id)(); +} + +class TransactionDto { + final Transaction transaction; + final Beneficiary beneficiary; + final ExpenseCategory? expenseCategory; + + TransactionDto({ + required this.transaction, + required this.beneficiary, + required this.expenseCategory, + }); +} + +@DriftDatabase( + tables: [ + Accounts, + Beneficiaries, + Budgets, + BudgetItems, + ExpenseCategories, + Loans, + LoanChanges, + RecurringTransactions, + TransactionTemplates, + Transactions, + ], + daos: [ + AccountsDao, + BeneficiariesDao, + BudgetsDao, + ExpenseCategoriesDao, + LoansDao, + RecurringTransactionsDao, + TransactionTemplatesDao, + TransactionsDao, + ], +) +class OkaneDatabase extends _$OkaneDatabase { + OkaneDatabase() : super(_openConnection()); + + @override + int get schemaVersion => 1; + + static QueryExecutor _openConnection() { + return driftDatabase( + name: "okane", + native: const DriftNativeOptions( + databaseDirectory: getApplicationSupportDirectory, + ), + ); + } +} + +@DriftAccessor(tables: [Accounts]) +class AccountsDao extends DatabaseAccessor + with _$AccountsDaoMixin { + AccountsDao(OkaneDatabase db) : super(db); + + Stream> accountsStream() { + return select(accounts).watch(); + } + + Future> getAccounts() { + return select(accounts).get(); + } + + Future upsertAccount(AccountsCompanion account) { + return into(accounts).insertOnConflictUpdate(account); + } +} + +enum TransactionQueryDateOption { thisMonth } + +@DriftAccessor(tables: [Transactions, Beneficiaries, ExpenseCategories]) +class TransactionsDao extends DatabaseAccessor + with _$TransactionsDaoMixin { + TransactionsDao(OkaneDatabase db) : super(db); + + JoinedSelectStatement _transactionQuery(Account account) { + return (select(transactions) + ..where((t) => t.accountId.equals(account.id))).join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactions.beneficiaryId), + ), + leftOuterJoin( + expenseCategories, + expenseCategories.id.equalsExp(transactions.expenseCategoryId), + ), + ]); + } + + TransactionDto _mapToDto(TypedResult row) { + return TransactionDto( + transaction: row.readTable(transactions), + beneficiary: row.readTable(beneficiaries), + expenseCategory: row.readTableOrNull(expenseCategories), + ); + } + + Stream> transactionsStream(Account account) { + return _transactionQuery(account).watch().map((rows) { + return rows.map(_mapToDto).toList(); + }); + } + + Future> getTransactions(Account? account) { + if (account == null) { + return Future.value(List.empty()); + } + + return _transactionQuery( + account, + ).get().then((rows) => rows.map(_mapToDto).toList()); + } + + Future> getLastTransactions( + Account account, + DateTime today, + int days, + ) async { + return (select(transactions)..where( + (t) => + t.accountId.equals(account.id) & + t.date.isBiggerThanValue( + toMidnight(today.subtract(Duration(days: days))), + ), + )) + .join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactions.beneficiaryId), + ), + leftOuterJoin( + expenseCategories, + expenseCategories.id.equalsExp(transactions.expenseCategoryId), + ), + ]) + .get() + .then((rows) => rows.map(_mapToDto).toList()); + } + + Future getTotalBalance(Iterable accountIds) async { + final sum = transactions.amount.sum(); + final query = + selectOnly(transactions) + ..where(transactions.accountId.isIn(accountIds)) + ..addColumns([sum]); + return query + .map((row) => row.read(sum)) + .getSingleOrNull() + .then((v) => v ?? 0); + } + + Future> getTransactionsInTimeframe( + Account account, + DateTime today, + TransactionQueryDateOption option, + ) { + final lower = switch (option) { + TransactionQueryDateOption.thisMonth => DateTime( + today.year, + today.month, + 0, + ), + }; + final upper = switch (option) { + TransactionQueryDateOption.thisMonth => monthEnding(today), + }; + + return (select(transactions)..where( + (t) => + t.accountId.equals(account.id) & + t.date.isBetweenValues(lower, upper), + )) + .join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactions.beneficiaryId), + ), + leftOuterJoin( + expenseCategories, + expenseCategories.id.equalsExp(transactions.expenseCategoryId), + ), + ]) + .get() + .then((rows) => rows.map(_mapToDto).toList()); + } + + Future upsertTransaction(TransactionsCompanion t) { + return into( + transactions, + ).insertReturning(t, mode: InsertMode.insertOrReplace); + } +} + +@DriftAccessor(tables: [Beneficiaries]) +class BeneficiariesDao extends DatabaseAccessor + with _$BeneficiariesDaoMixin { + BeneficiariesDao(OkaneDatabase db) : super(db); + + Stream> beneficiariesStream() { + return select(beneficiaries).watch(); + } + + Future> getBeneficiaries() { + return select(beneficiaries).get(); + } + + Future upsertBeneficiary(BeneficiariesCompanion beneficiary) { + return into( + beneficiaries, + ).insertReturning(beneficiary, mode: InsertMode.insertOrReplace); + } + + Future getAccountBeneficiary(Account account) { + return (select(beneficiaries) + ..where((b) => b.accountId.equals(account.id))).getSingle(); + } + + Stream watchBeneficiary(int id) { + return (select(beneficiaries)..where((b) => b.id.equals(id))).watchSingle(); + } +} + +@DriftAccessor(tables: [ExpenseCategories]) +class ExpenseCategoriesDao extends DatabaseAccessor + with _$ExpenseCategoriesDaoMixin { + ExpenseCategoriesDao(OkaneDatabase db) : super(db); + + Stream> expenseCategoriesStream(Account account) { + return select(expenseCategories).watch(); + } + + Future> getExpenseCategories(Account? account) { + if (account == null) { + return Future.value(List.empty()); + } + + return select(expenseCategories).get(); + } +} + +@DriftAccessor(tables: [Budgets, BudgetItems]) +class BudgetsDao extends DatabaseAccessor + with _$BudgetsDaoMixin { + BudgetsDao(OkaneDatabase db) : super(db); + + Stream> budgetsStream(Account account) { + return (select(budgets)..where((b) => b.accountId.equals(account.id))) + .join([ + leftOuterJoin( + budgetItems, + budgetItems.budgetId.equalsExp(budgets.id), + ), + ]) + .watch() + .map((rows) { + return rows.map((row) { + return BudgetsDto( + budget: row.readTable(budgets), + // TODO + budgetItems: List.empty(), + ); + }).toList(); + }); + } + + Future> getBudgets(Account? account) { + if (account == null) { + return Future.value(List.empty()); + } + + return (select(budgets)..where((b) => b.accountId.equals(account.id))) + .join([ + leftOuterJoin( + budgetItems, + budgetItems.budgetId.equalsExp(budgets.id), + ), + ]) + .get() + .then((rows) { + return rows.map((row) { + return BudgetsDto( + budget: row.readTable(budgets), + // TODO + budgetItems: List.empty(), + ); + }).toList(); + }); + } + + Future upsertBudget(BudgetsCompanion budget) { + return into( + budgets, + ).insertReturning(budget, mode: InsertMode.insertOrReplace); + } + + Future upsertBudgetItem(BudgetItemsCompanion item) { + return into( + budgetItems, + ).insertReturning(item, mode: InsertMode.insertOrReplace); + } +} + +@DriftAccessor(tables: [Loans, LoanChanges, Beneficiaries]) +class LoansDao extends DatabaseAccessor with _$LoansDaoMixin { + LoansDao(OkaneDatabase db) : super(db); + + Stream> loansStream(Account account) { + return select(loans) + .join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(loans.beneficiaryId), + ), + ]) + .watch() + .map((rows) { + return rows.map((row) { + return ( + loan: row.readTable(loans), + beneficiary: row.readTable(beneficiaries), + changes: List.empty(), + ) + as LoanDto; + }).toList(); + }); + } + + Future> getLoans(Account? account) { + if (account == null) { + return Future.value(List.empty()); + } + + return select(loans) + .join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(loans.beneficiaryId), + ), + ]) + .get() + .then((rows) { + return rows.map((row) { + return ( + loan: row.readTable(loans), + beneficiary: row.readTable(beneficiaries), + changes: List.empty(), + ) + as LoanDto; + }).toList(); + }); + } + + Future getTotalLoanSum() async { + final count = loanChanges.amount.sum(); + final query = selectOnly(loanChanges)..addColumns([count]); + return query + .map((row) => row.read(count)) + .getSingleOrNull() + .then((v) => v ?? 0); + } + + Future upsertLoan(LoansCompanion loan) { + return into(loans).insertReturning(loan, mode: InsertMode.insertOrReplace); + } + + Future upsertLoanChange(LoanChangesCompanion loanChange) { + return into( + loanChanges, + ).insertReturning(loanChange, mode: InsertMode.insertOrReplace); + } + + Future deleteLoanChange(int id) { + return (delete(loanChanges)..where((c) => c.id.equals(id))).go(); + } +} + +@DriftAccessor(tables: [TransactionTemplates, ExpenseCategories, Beneficiaries]) +class TransactionTemplatesDao extends DatabaseAccessor + with _$TransactionTemplatesDaoMixin { + TransactionTemplatesDao(OkaneDatabase db) : super(db); + + Stream> transactionTemplatesStream( + Account account, + ) { + return (select(transactionTemplates) + ..where((b) => b.accountId.equals(account.id))) + .join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactionTemplates.beneficiaryId), + ), + leftOuterJoin( + expenseCategories, + expenseCategories.id.equalsExp( + transactionTemplates.expenseCategoryId, + ), + ), + ]) + .watch() + .map((rows) { + return rows.map((row) { + return ( + template: row.readTable(transactionTemplates), + beneficiary: row.readTable(beneficiaries), + expenseCategory: row.readTable(expenseCategories), + ); + }).toList(); + }); + } + + Future> getTransactionTemplates( + Account? account, + ) { + if (account == null) { + return Future.value(List.empty()); + } + + return (select(transactionTemplates) + ..where((b) => b.accountId.equals(account.id))) + .join([ + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactionTemplates.beneficiaryId), + ), + leftOuterJoin( + expenseCategories, + expenseCategories.id.equalsExp( + transactionTemplates.expenseCategoryId, + ), + ), + ]) + .get() + .then((rows) { + return rows.map((row) { + return ( + template: row.readTable(transactionTemplates), + beneficiary: row.readTable(beneficiaries), + expenseCategory: row.readTable(expenseCategories), + ); + }).toList(); + }); + } + + Future upsertTemplate( + TransactionTemplatesCompanion template, + ) { + return into( + transactionTemplates, + ).insertReturning(template, mode: InsertMode.insertOrReplace); + } + + Future deleteTemplate(TransactionTemplate template) { + return (delete(transactionTemplates) + ..where((t) => t.id.equals(template.id))).go(); + } +} + +@DriftAccessor(tables: [TransactionTemplates, RecurringTransactions]) +class RecurringTransactionsDao extends DatabaseAccessor + with _$RecurringTransactionsDaoMixin { + RecurringTransactionsDao(OkaneDatabase db) : super(db); + + Stream> recurringTransactionsStream( + Account account, + ) { + return (select(recurringTransactions) + ..where((b) => b.accountId.equals(account.id))) + .join([ + leftOuterJoin( + transactionTemplates, + transactionTemplates.id.equalsExp(recurringTransactions.templateId), + ), + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactionTemplates.beneficiaryId), + ), + ]) + .watch() + .map((rows) { + return rows.map((row) { + return ( + recurring: row.readTable(recurringTransactions), + beneficiary: row.readTable(beneficiaries), + template: row.readTable(transactionTemplates), + ); + }).toList(); + }); + } + + Future> getRecurringTransactions( + Account? account, + ) { + if (account == null) { + return Future.value(List.empty()); + } + + return (select(recurringTransactions) + ..where((b) => b.accountId.equals(account.id))) + .join([ + leftOuterJoin( + transactionTemplates, + transactionTemplates.id.equalsExp(recurringTransactions.templateId), + ), + leftOuterJoin( + beneficiaries, + beneficiaries.id.equalsExp(transactionTemplates.beneficiaryId), + ), + ]) + .get() + .then((rows) { + return rows.map((row) { + return ( + recurring: row.readTable(recurringTransactions), + beneficiary: row.readTable(beneficiaries), + template: row.readTable(transactionTemplates), + ); + }).toList(); + }); + } + + Future upsertRecurringTransaction(RecurringTransactionsCompanion r) { + return into(recurringTransactions).insertOnConflictUpdate(r); + } + + Future deleteTemplate(RecurringTransactionDto dto) async { + await db.transactionTemplatesDao.deleteTemplate(dto.template); + await (delete(recurringTransactions) + ..where((t) => t.id.equals(dto.recurring.id))).go(); + } +} diff --git a/lib/database/sqlite.g.dart b/lib/database/sqlite.g.dart new file mode 100644 index 0000000..db8ec36 --- /dev/null +++ b/lib/database/sqlite.g.dart @@ -0,0 +1,8239 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'sqlite.dart'; + +// ignore_for_file: type=lint +class $AccountsTable extends Accounts with TableInfo<$AccountsTable, Account> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $AccountsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + @override + List get $columns => [id, name]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'accounts'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, + name.isAcceptableOrUnknown(data['name']!, _nameMeta), + ); + } else if (isInserting) { + context.missing(_nameMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + Account map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Account( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + name: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + )!, + ); + } + + @override + $AccountsTable createAlias(String alias) { + return $AccountsTable(attachedDatabase, alias); + } +} + +class Account extends DataClass implements Insertable { + final int id; + final String name; + const Account({required this.id, required this.name}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + return map; + } + + AccountsCompanion toCompanion(bool nullToAbsent) { + return AccountsCompanion(id: Value(id), name: Value(name)); + } + + factory Account.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Account( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + }; + } + + Account copyWith({int? id, String? name}) => + Account(id: id ?? this.id, name: name ?? this.name); + Account copyWithCompanion(AccountsCompanion data) { + return Account( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + ); + } + + @override + String toString() { + return (StringBuffer('Account(') + ..write('id: $id, ') + ..write('name: $name') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, name); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Account && other.id == this.id && other.name == this.name); +} + +class AccountsCompanion extends UpdateCompanion { + final Value id; + final Value name; + const AccountsCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + }); + AccountsCompanion.insert({ + this.id = const Value.absent(), + required String name, + }) : name = Value(name); + static Insertable custom({ + Expression? id, + Expression? name, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + }); + } + + AccountsCompanion copyWith({Value? id, Value? name}) { + return AccountsCompanion(id: id ?? this.id, name: name ?? this.name); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('AccountsCompanion(') + ..write('id: $id, ') + ..write('name: $name') + ..write(')')) + .toString(); + } +} + +class $BeneficiariesTable extends Beneficiaries + with TableInfo<$BeneficiariesTable, Beneficiary> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $BeneficiariesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE'), + ); + @override + late final GeneratedColumnWithTypeConverter type = + GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ).withConverter($BeneficiariesTable.$convertertype); + static const VerificationMeta _accountIdMeta = const VerificationMeta( + 'accountId', + ); + @override + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES accounts (id)', + ), + ); + static const VerificationMeta _imagePathMeta = const VerificationMeta( + 'imagePath', + ); + @override + late final GeneratedColumn imagePath = GeneratedColumn( + 'image_path', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [id, name, type, accountId, imagePath]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'beneficiaries'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, + name.isAcceptableOrUnknown(data['name']!, _nameMeta), + ); + } else if (isInserting) { + context.missing(_nameMeta); + } + if (data.containsKey('account_id')) { + context.handle( + _accountIdMeta, + accountId.isAcceptableOrUnknown(data['account_id']!, _accountIdMeta), + ); + } + if (data.containsKey('image_path')) { + context.handle( + _imagePathMeta, + imagePath.isAcceptableOrUnknown(data['image_path']!, _imagePathMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + Beneficiary map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Beneficiary( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + name: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + )!, + type: $BeneficiariesTable.$convertertype.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}type'], + )!, + ), + accountId: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}account_id'], + ), + imagePath: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}image_path'], + ), + ); + } + + @override + $BeneficiariesTable createAlias(String alias) { + return $BeneficiariesTable(attachedDatabase, alias); + } + + static JsonTypeConverter2 $convertertype = + const EnumNameConverter(BeneficiaryType.values); +} + +class Beneficiary extends DataClass implements Insertable { + final int id; + final String name; + final BeneficiaryType type; + final int? accountId; + final String? imagePath; + const Beneficiary({ + required this.id, + required this.name, + required this.type, + this.accountId, + this.imagePath, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + { + map['type'] = Variable( + $BeneficiariesTable.$convertertype.toSql(type), + ); + } + if (!nullToAbsent || accountId != null) { + map['account_id'] = Variable(accountId); + } + if (!nullToAbsent || imagePath != null) { + map['image_path'] = Variable(imagePath); + } + return map; + } + + BeneficiariesCompanion toCompanion(bool nullToAbsent) { + return BeneficiariesCompanion( + id: Value(id), + name: Value(name), + type: Value(type), + accountId: + accountId == null && nullToAbsent + ? const Value.absent() + : Value(accountId), + imagePath: + imagePath == null && nullToAbsent + ? const Value.absent() + : Value(imagePath), + ); + } + + factory Beneficiary.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Beneficiary( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + type: $BeneficiariesTable.$convertertype.fromJson( + serializer.fromJson(json['type']), + ), + accountId: serializer.fromJson(json['accountId']), + imagePath: serializer.fromJson(json['imagePath']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'type': serializer.toJson( + $BeneficiariesTable.$convertertype.toJson(type), + ), + 'accountId': serializer.toJson(accountId), + 'imagePath': serializer.toJson(imagePath), + }; + } + + Beneficiary copyWith({ + int? id, + String? name, + BeneficiaryType? type, + Value accountId = const Value.absent(), + Value imagePath = const Value.absent(), + }) => Beneficiary( + id: id ?? this.id, + name: name ?? this.name, + type: type ?? this.type, + accountId: accountId.present ? accountId.value : this.accountId, + imagePath: imagePath.present ? imagePath.value : this.imagePath, + ); + Beneficiary copyWithCompanion(BeneficiariesCompanion data) { + return Beneficiary( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + type: data.type.present ? data.type.value : this.type, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + imagePath: data.imagePath.present ? data.imagePath.value : this.imagePath, + ); + } + + @override + String toString() { + return (StringBuffer('Beneficiary(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('type: $type, ') + ..write('accountId: $accountId, ') + ..write('imagePath: $imagePath') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, name, type, accountId, imagePath); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Beneficiary && + other.id == this.id && + other.name == this.name && + other.type == this.type && + other.accountId == this.accountId && + other.imagePath == this.imagePath); +} + +class BeneficiariesCompanion extends UpdateCompanion { + final Value id; + final Value name; + final Value type; + final Value accountId; + final Value imagePath; + const BeneficiariesCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + this.type = const Value.absent(), + this.accountId = const Value.absent(), + this.imagePath = const Value.absent(), + }); + BeneficiariesCompanion.insert({ + this.id = const Value.absent(), + required String name, + required BeneficiaryType type, + this.accountId = const Value.absent(), + this.imagePath = const Value.absent(), + }) : name = Value(name), + type = Value(type); + static Insertable custom({ + Expression? id, + Expression? name, + Expression? type, + Expression? accountId, + Expression? imagePath, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + if (type != null) 'type': type, + if (accountId != null) 'account_id': accountId, + if (imagePath != null) 'image_path': imagePath, + }); + } + + BeneficiariesCompanion copyWith({ + Value? id, + Value? name, + Value? type, + Value? accountId, + Value? imagePath, + }) { + return BeneficiariesCompanion( + id: id ?? this.id, + name: name ?? this.name, + type: type ?? this.type, + accountId: accountId ?? this.accountId, + imagePath: imagePath ?? this.imagePath, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (type.present) { + map['type'] = Variable( + $BeneficiariesTable.$convertertype.toSql(type.value), + ); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + if (imagePath.present) { + map['image_path'] = Variable(imagePath.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('BeneficiariesCompanion(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('type: $type, ') + ..write('accountId: $accountId, ') + ..write('imagePath: $imagePath') + ..write(')')) + .toString(); + } +} + +class $BudgetsTable extends Budgets with TableInfo<$BudgetsTable, Budget> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $BudgetsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + @override + late final GeneratedColumnWithTypeConverter period = + GeneratedColumn( + 'period', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ).withConverter($BudgetsTable.$converterperiod); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _incomeMeta = const VerificationMeta('income'); + @override + late final GeneratedColumn income = GeneratedColumn( + 'income', + aliasedName, + false, + type: DriftSqlType.double, + requiredDuringInsert: true, + ); + static const VerificationMeta _includeOtherSpendingsMeta = + const VerificationMeta('includeOtherSpendings'); + @override + late final GeneratedColumn includeOtherSpendings = + GeneratedColumn( + 'include_other_spendings', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("include_other_spendings" IN (0, 1))', + ), + ); + static const VerificationMeta _accountIdMeta = const VerificationMeta( + 'accountId', + ); + @override + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES accounts (id)', + ), + ); + @override + List get $columns => [ + id, + period, + name, + income, + includeOtherSpendings, + accountId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'budgets'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, + name.isAcceptableOrUnknown(data['name']!, _nameMeta), + ); + } else if (isInserting) { + context.missing(_nameMeta); + } + if (data.containsKey('income')) { + context.handle( + _incomeMeta, + income.isAcceptableOrUnknown(data['income']!, _incomeMeta), + ); + } else if (isInserting) { + context.missing(_incomeMeta); + } + if (data.containsKey('include_other_spendings')) { + context.handle( + _includeOtherSpendingsMeta, + includeOtherSpendings.isAcceptableOrUnknown( + data['include_other_spendings']!, + _includeOtherSpendingsMeta, + ), + ); + } else if (isInserting) { + context.missing(_includeOtherSpendingsMeta); + } + if (data.containsKey('account_id')) { + context.handle( + _accountIdMeta, + accountId.isAcceptableOrUnknown(data['account_id']!, _accountIdMeta), + ); + } else if (isInserting) { + context.missing(_accountIdMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + Budget map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Budget( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + period: $BudgetsTable.$converterperiod.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}period'], + )!, + ), + name: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + )!, + income: + attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}income'], + )!, + includeOtherSpendings: + attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}include_other_spendings'], + )!, + accountId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}account_id'], + )!, + ); + } + + @override + $BudgetsTable createAlias(String alias) { + return $BudgetsTable(attachedDatabase, alias); + } + + static JsonTypeConverter2 $converterperiod = + const EnumNameConverter(BudgetPeriod.values); +} + +class Budget extends DataClass implements Insertable { + final int id; + final BudgetPeriod period; + final String name; + final double income; + final bool includeOtherSpendings; + final int accountId; + const Budget({ + required this.id, + required this.period, + required this.name, + required this.income, + required this.includeOtherSpendings, + required this.accountId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + { + map['period'] = Variable( + $BudgetsTable.$converterperiod.toSql(period), + ); + } + map['name'] = Variable(name); + map['income'] = Variable(income); + map['include_other_spendings'] = Variable(includeOtherSpendings); + map['account_id'] = Variable(accountId); + return map; + } + + BudgetsCompanion toCompanion(bool nullToAbsent) { + return BudgetsCompanion( + id: Value(id), + period: Value(period), + name: Value(name), + income: Value(income), + includeOtherSpendings: Value(includeOtherSpendings), + accountId: Value(accountId), + ); + } + + factory Budget.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Budget( + id: serializer.fromJson(json['id']), + period: $BudgetsTable.$converterperiod.fromJson( + serializer.fromJson(json['period']), + ), + name: serializer.fromJson(json['name']), + income: serializer.fromJson(json['income']), + includeOtherSpendings: serializer.fromJson( + json['includeOtherSpendings'], + ), + accountId: serializer.fromJson(json['accountId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'period': serializer.toJson( + $BudgetsTable.$converterperiod.toJson(period), + ), + 'name': serializer.toJson(name), + 'income': serializer.toJson(income), + 'includeOtherSpendings': serializer.toJson(includeOtherSpendings), + 'accountId': serializer.toJson(accountId), + }; + } + + Budget copyWith({ + int? id, + BudgetPeriod? period, + String? name, + double? income, + bool? includeOtherSpendings, + int? accountId, + }) => Budget( + id: id ?? this.id, + period: period ?? this.period, + name: name ?? this.name, + income: income ?? this.income, + includeOtherSpendings: includeOtherSpendings ?? this.includeOtherSpendings, + accountId: accountId ?? this.accountId, + ); + Budget copyWithCompanion(BudgetsCompanion data) { + return Budget( + id: data.id.present ? data.id.value : this.id, + period: data.period.present ? data.period.value : this.period, + name: data.name.present ? data.name.value : this.name, + income: data.income.present ? data.income.value : this.income, + includeOtherSpendings: + data.includeOtherSpendings.present + ? data.includeOtherSpendings.value + : this.includeOtherSpendings, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + ); + } + + @override + String toString() { + return (StringBuffer('Budget(') + ..write('id: $id, ') + ..write('period: $period, ') + ..write('name: $name, ') + ..write('income: $income, ') + ..write('includeOtherSpendings: $includeOtherSpendings, ') + ..write('accountId: $accountId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(id, period, name, income, includeOtherSpendings, accountId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Budget && + other.id == this.id && + other.period == this.period && + other.name == this.name && + other.income == this.income && + other.includeOtherSpendings == this.includeOtherSpendings && + other.accountId == this.accountId); +} + +class BudgetsCompanion extends UpdateCompanion { + final Value id; + final Value period; + final Value name; + final Value income; + final Value includeOtherSpendings; + final Value accountId; + const BudgetsCompanion({ + this.id = const Value.absent(), + this.period = const Value.absent(), + this.name = const Value.absent(), + this.income = const Value.absent(), + this.includeOtherSpendings = const Value.absent(), + this.accountId = const Value.absent(), + }); + BudgetsCompanion.insert({ + this.id = const Value.absent(), + required BudgetPeriod period, + required String name, + required double income, + required bool includeOtherSpendings, + required int accountId, + }) : period = Value(period), + name = Value(name), + income = Value(income), + includeOtherSpendings = Value(includeOtherSpendings), + accountId = Value(accountId); + static Insertable custom({ + Expression? id, + Expression? period, + Expression? name, + Expression? income, + Expression? includeOtherSpendings, + Expression? accountId, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (period != null) 'period': period, + if (name != null) 'name': name, + if (income != null) 'income': income, + if (includeOtherSpendings != null) + 'include_other_spendings': includeOtherSpendings, + if (accountId != null) 'account_id': accountId, + }); + } + + BudgetsCompanion copyWith({ + Value? id, + Value? period, + Value? name, + Value? income, + Value? includeOtherSpendings, + Value? accountId, + }) { + return BudgetsCompanion( + id: id ?? this.id, + period: period ?? this.period, + name: name ?? this.name, + income: income ?? this.income, + includeOtherSpendings: + includeOtherSpendings ?? this.includeOtherSpendings, + accountId: accountId ?? this.accountId, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (period.present) { + map['period'] = Variable( + $BudgetsTable.$converterperiod.toSql(period.value), + ); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (income.present) { + map['income'] = Variable(income.value); + } + if (includeOtherSpendings.present) { + map['include_other_spendings'] = Variable( + includeOtherSpendings.value, + ); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('BudgetsCompanion(') + ..write('id: $id, ') + ..write('period: $period, ') + ..write('name: $name, ') + ..write('income: $income, ') + ..write('includeOtherSpendings: $includeOtherSpendings, ') + ..write('accountId: $accountId') + ..write(')')) + .toString(); + } +} + +class $ExpenseCategoriesTable extends ExpenseCategories + with TableInfo<$ExpenseCategoriesTable, ExpenseCategory> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ExpenseCategoriesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + @override + List get $columns => [id, name]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'expense_categories'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, + name.isAcceptableOrUnknown(data['name']!, _nameMeta), + ); + } else if (isInserting) { + context.missing(_nameMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ExpenseCategory map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ExpenseCategory( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + name: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + )!, + ); + } + + @override + $ExpenseCategoriesTable createAlias(String alias) { + return $ExpenseCategoriesTable(attachedDatabase, alias); + } +} + +class ExpenseCategory extends DataClass implements Insertable { + final int id; + final String name; + const ExpenseCategory({required this.id, required this.name}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + return map; + } + + ExpenseCategoriesCompanion toCompanion(bool nullToAbsent) { + return ExpenseCategoriesCompanion(id: Value(id), name: Value(name)); + } + + factory ExpenseCategory.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ExpenseCategory( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + }; + } + + ExpenseCategory copyWith({int? id, String? name}) => + ExpenseCategory(id: id ?? this.id, name: name ?? this.name); + ExpenseCategory copyWithCompanion(ExpenseCategoriesCompanion data) { + return ExpenseCategory( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + ); + } + + @override + String toString() { + return (StringBuffer('ExpenseCategory(') + ..write('id: $id, ') + ..write('name: $name') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, name); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ExpenseCategory && + other.id == this.id && + other.name == this.name); +} + +class ExpenseCategoriesCompanion extends UpdateCompanion { + final Value id; + final Value name; + const ExpenseCategoriesCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + }); + ExpenseCategoriesCompanion.insert({ + this.id = const Value.absent(), + required String name, + }) : name = Value(name); + static Insertable custom({ + Expression? id, + Expression? name, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + }); + } + + ExpenseCategoriesCompanion copyWith({Value? id, Value? name}) { + return ExpenseCategoriesCompanion( + id: id ?? this.id, + name: name ?? this.name, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ExpenseCategoriesCompanion(') + ..write('id: $id, ') + ..write('name: $name') + ..write(')')) + .toString(); + } +} + +class $BudgetItemsTable extends BudgetItems + with TableInfo<$BudgetItemsTable, BudgetItem> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $BudgetItemsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _amountMeta = const VerificationMeta('amount'); + @override + late final GeneratedColumn amount = GeneratedColumn( + 'amount', + aliasedName, + false, + type: DriftSqlType.double, + requiredDuringInsert: true, + ); + static const VerificationMeta _expenseCategoryIdMeta = const VerificationMeta( + 'expenseCategoryId', + ); + @override + late final GeneratedColumn expenseCategoryId = GeneratedColumn( + 'expense_category_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES expense_categories (id)', + ), + ); + static const VerificationMeta _budgetIdMeta = const VerificationMeta( + 'budgetId', + ); + @override + late final GeneratedColumn budgetId = GeneratedColumn( + 'budget_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES budgets (id)', + ), + ); + @override + List get $columns => [ + id, + amount, + expenseCategoryId, + budgetId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'budget_items'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('amount')) { + context.handle( + _amountMeta, + amount.isAcceptableOrUnknown(data['amount']!, _amountMeta), + ); + } else if (isInserting) { + context.missing(_amountMeta); + } + if (data.containsKey('expense_category_id')) { + context.handle( + _expenseCategoryIdMeta, + expenseCategoryId.isAcceptableOrUnknown( + data['expense_category_id']!, + _expenseCategoryIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_expenseCategoryIdMeta); + } + if (data.containsKey('budget_id')) { + context.handle( + _budgetIdMeta, + budgetId.isAcceptableOrUnknown(data['budget_id']!, _budgetIdMeta), + ); + } else if (isInserting) { + context.missing(_budgetIdMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + BudgetItem map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return BudgetItem( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + amount: + attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}amount'], + )!, + expenseCategoryId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}expense_category_id'], + )!, + budgetId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}budget_id'], + )!, + ); + } + + @override + $BudgetItemsTable createAlias(String alias) { + return $BudgetItemsTable(attachedDatabase, alias); + } +} + +class BudgetItem extends DataClass implements Insertable { + final int id; + final double amount; + final int expenseCategoryId; + final int budgetId; + const BudgetItem({ + required this.id, + required this.amount, + required this.expenseCategoryId, + required this.budgetId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['amount'] = Variable(amount); + map['expense_category_id'] = Variable(expenseCategoryId); + map['budget_id'] = Variable(budgetId); + return map; + } + + BudgetItemsCompanion toCompanion(bool nullToAbsent) { + return BudgetItemsCompanion( + id: Value(id), + amount: Value(amount), + expenseCategoryId: Value(expenseCategoryId), + budgetId: Value(budgetId), + ); + } + + factory BudgetItem.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return BudgetItem( + id: serializer.fromJson(json['id']), + amount: serializer.fromJson(json['amount']), + expenseCategoryId: serializer.fromJson(json['expenseCategoryId']), + budgetId: serializer.fromJson(json['budgetId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'amount': serializer.toJson(amount), + 'expenseCategoryId': serializer.toJson(expenseCategoryId), + 'budgetId': serializer.toJson(budgetId), + }; + } + + BudgetItem copyWith({ + int? id, + double? amount, + int? expenseCategoryId, + int? budgetId, + }) => BudgetItem( + id: id ?? this.id, + amount: amount ?? this.amount, + expenseCategoryId: expenseCategoryId ?? this.expenseCategoryId, + budgetId: budgetId ?? this.budgetId, + ); + BudgetItem copyWithCompanion(BudgetItemsCompanion data) { + return BudgetItem( + id: data.id.present ? data.id.value : this.id, + amount: data.amount.present ? data.amount.value : this.amount, + expenseCategoryId: + data.expenseCategoryId.present + ? data.expenseCategoryId.value + : this.expenseCategoryId, + budgetId: data.budgetId.present ? data.budgetId.value : this.budgetId, + ); + } + + @override + String toString() { + return (StringBuffer('BudgetItem(') + ..write('id: $id, ') + ..write('amount: $amount, ') + ..write('expenseCategoryId: $expenseCategoryId, ') + ..write('budgetId: $budgetId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, amount, expenseCategoryId, budgetId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is BudgetItem && + other.id == this.id && + other.amount == this.amount && + other.expenseCategoryId == this.expenseCategoryId && + other.budgetId == this.budgetId); +} + +class BudgetItemsCompanion extends UpdateCompanion { + final Value id; + final Value amount; + final Value expenseCategoryId; + final Value budgetId; + const BudgetItemsCompanion({ + this.id = const Value.absent(), + this.amount = const Value.absent(), + this.expenseCategoryId = const Value.absent(), + this.budgetId = const Value.absent(), + }); + BudgetItemsCompanion.insert({ + this.id = const Value.absent(), + required double amount, + required int expenseCategoryId, + required int budgetId, + }) : amount = Value(amount), + expenseCategoryId = Value(expenseCategoryId), + budgetId = Value(budgetId); + static Insertable custom({ + Expression? id, + Expression? amount, + Expression? expenseCategoryId, + Expression? budgetId, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (amount != null) 'amount': amount, + if (expenseCategoryId != null) 'expense_category_id': expenseCategoryId, + if (budgetId != null) 'budget_id': budgetId, + }); + } + + BudgetItemsCompanion copyWith({ + Value? id, + Value? amount, + Value? expenseCategoryId, + Value? budgetId, + }) { + return BudgetItemsCompanion( + id: id ?? this.id, + amount: amount ?? this.amount, + expenseCategoryId: expenseCategoryId ?? this.expenseCategoryId, + budgetId: budgetId ?? this.budgetId, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (expenseCategoryId.present) { + map['expense_category_id'] = Variable(expenseCategoryId.value); + } + if (budgetId.present) { + map['budget_id'] = Variable(budgetId.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('BudgetItemsCompanion(') + ..write('id: $id, ') + ..write('amount: $amount, ') + ..write('expenseCategoryId: $expenseCategoryId, ') + ..write('budgetId: $budgetId') + ..write(')')) + .toString(); + } +} + +class $LoansTable extends Loans with TableInfo<$LoansTable, Loan> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $LoansTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _beneficiaryIdMeta = const VerificationMeta( + 'beneficiaryId', + ); + @override + late final GeneratedColumn beneficiaryId = GeneratedColumn( + 'beneficiary_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES beneficiaries (id)', + ), + ); + @override + List get $columns => [id, beneficiaryId]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'loans'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('beneficiary_id')) { + context.handle( + _beneficiaryIdMeta, + beneficiaryId.isAcceptableOrUnknown( + data['beneficiary_id']!, + _beneficiaryIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_beneficiaryIdMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + Loan map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Loan( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + beneficiaryId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}beneficiary_id'], + )!, + ); + } + + @override + $LoansTable createAlias(String alias) { + return $LoansTable(attachedDatabase, alias); + } +} + +class Loan extends DataClass implements Insertable { + final int id; + final int beneficiaryId; + const Loan({required this.id, required this.beneficiaryId}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['beneficiary_id'] = Variable(beneficiaryId); + return map; + } + + LoansCompanion toCompanion(bool nullToAbsent) { + return LoansCompanion(id: Value(id), beneficiaryId: Value(beneficiaryId)); + } + + factory Loan.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Loan( + id: serializer.fromJson(json['id']), + beneficiaryId: serializer.fromJson(json['beneficiaryId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'beneficiaryId': serializer.toJson(beneficiaryId), + }; + } + + Loan copyWith({int? id, int? beneficiaryId}) => Loan( + id: id ?? this.id, + beneficiaryId: beneficiaryId ?? this.beneficiaryId, + ); + Loan copyWithCompanion(LoansCompanion data) { + return Loan( + id: data.id.present ? data.id.value : this.id, + beneficiaryId: + data.beneficiaryId.present + ? data.beneficiaryId.value + : this.beneficiaryId, + ); + } + + @override + String toString() { + return (StringBuffer('Loan(') + ..write('id: $id, ') + ..write('beneficiaryId: $beneficiaryId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, beneficiaryId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Loan && + other.id == this.id && + other.beneficiaryId == this.beneficiaryId); +} + +class LoansCompanion extends UpdateCompanion { + final Value id; + final Value beneficiaryId; + const LoansCompanion({ + this.id = const Value.absent(), + this.beneficiaryId = const Value.absent(), + }); + LoansCompanion.insert({ + this.id = const Value.absent(), + required int beneficiaryId, + }) : beneficiaryId = Value(beneficiaryId); + static Insertable custom({ + Expression? id, + Expression? beneficiaryId, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (beneficiaryId != null) 'beneficiary_id': beneficiaryId, + }); + } + + LoansCompanion copyWith({Value? id, Value? beneficiaryId}) { + return LoansCompanion( + id: id ?? this.id, + beneficiaryId: beneficiaryId ?? this.beneficiaryId, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (beneficiaryId.present) { + map['beneficiary_id'] = Variable(beneficiaryId.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('LoansCompanion(') + ..write('id: $id, ') + ..write('beneficiaryId: $beneficiaryId') + ..write(')')) + .toString(); + } +} + +class $LoanChangesTable extends LoanChanges + with TableInfo<$LoanChangesTable, LoanChange> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $LoanChangesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _loanIdMeta = const VerificationMeta('loanId'); + @override + late final GeneratedColumn loanId = GeneratedColumn( + 'loan_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES loans (id)', + ), + ); + static const VerificationMeta _amountMeta = const VerificationMeta('amount'); + @override + late final GeneratedColumn amount = GeneratedColumn( + 'amount', + aliasedName, + false, + type: DriftSqlType.double, + requiredDuringInsert: true, + ); + static const VerificationMeta _dateMeta = const VerificationMeta('date'); + @override + late final GeneratedColumn date = GeneratedColumn( + 'date', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + @override + List get $columns => [id, loanId, amount, date]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'loan_changes'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('loan_id')) { + context.handle( + _loanIdMeta, + loanId.isAcceptableOrUnknown(data['loan_id']!, _loanIdMeta), + ); + } else if (isInserting) { + context.missing(_loanIdMeta); + } + if (data.containsKey('amount')) { + context.handle( + _amountMeta, + amount.isAcceptableOrUnknown(data['amount']!, _amountMeta), + ); + } else if (isInserting) { + context.missing(_amountMeta); + } + if (data.containsKey('date')) { + context.handle( + _dateMeta, + date.isAcceptableOrUnknown(data['date']!, _dateMeta), + ); + } else if (isInserting) { + context.missing(_dateMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + LoanChange map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return LoanChange( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + loanId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}loan_id'], + )!, + amount: + attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}amount'], + )!, + date: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}date'], + )!, + ); + } + + @override + $LoanChangesTable createAlias(String alias) { + return $LoanChangesTable(attachedDatabase, alias); + } +} + +class LoanChange extends DataClass implements Insertable { + final int id; + final int loanId; + final double amount; + final DateTime date; + const LoanChange({ + required this.id, + required this.loanId, + required this.amount, + required this.date, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['loan_id'] = Variable(loanId); + map['amount'] = Variable(amount); + map['date'] = Variable(date); + return map; + } + + LoanChangesCompanion toCompanion(bool nullToAbsent) { + return LoanChangesCompanion( + id: Value(id), + loanId: Value(loanId), + amount: Value(amount), + date: Value(date), + ); + } + + factory LoanChange.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return LoanChange( + id: serializer.fromJson(json['id']), + loanId: serializer.fromJson(json['loanId']), + amount: serializer.fromJson(json['amount']), + date: serializer.fromJson(json['date']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'loanId': serializer.toJson(loanId), + 'amount': serializer.toJson(amount), + 'date': serializer.toJson(date), + }; + } + + LoanChange copyWith({int? id, int? loanId, double? amount, DateTime? date}) => + LoanChange( + id: id ?? this.id, + loanId: loanId ?? this.loanId, + amount: amount ?? this.amount, + date: date ?? this.date, + ); + LoanChange copyWithCompanion(LoanChangesCompanion data) { + return LoanChange( + id: data.id.present ? data.id.value : this.id, + loanId: data.loanId.present ? data.loanId.value : this.loanId, + amount: data.amount.present ? data.amount.value : this.amount, + date: data.date.present ? data.date.value : this.date, + ); + } + + @override + String toString() { + return (StringBuffer('LoanChange(') + ..write('id: $id, ') + ..write('loanId: $loanId, ') + ..write('amount: $amount, ') + ..write('date: $date') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, loanId, amount, date); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is LoanChange && + other.id == this.id && + other.loanId == this.loanId && + other.amount == this.amount && + other.date == this.date); +} + +class LoanChangesCompanion extends UpdateCompanion { + final Value id; + final Value loanId; + final Value amount; + final Value date; + const LoanChangesCompanion({ + this.id = const Value.absent(), + this.loanId = const Value.absent(), + this.amount = const Value.absent(), + this.date = const Value.absent(), + }); + LoanChangesCompanion.insert({ + this.id = const Value.absent(), + required int loanId, + required double amount, + required DateTime date, + }) : loanId = Value(loanId), + amount = Value(amount), + date = Value(date); + static Insertable custom({ + Expression? id, + Expression? loanId, + Expression? amount, + Expression? date, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (loanId != null) 'loan_id': loanId, + if (amount != null) 'amount': amount, + if (date != null) 'date': date, + }); + } + + LoanChangesCompanion copyWith({ + Value? id, + Value? loanId, + Value? amount, + Value? date, + }) { + return LoanChangesCompanion( + id: id ?? this.id, + loanId: loanId ?? this.loanId, + amount: amount ?? this.amount, + date: date ?? this.date, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (loanId.present) { + map['loan_id'] = Variable(loanId.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (date.present) { + map['date'] = Variable(date.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('LoanChangesCompanion(') + ..write('id: $id, ') + ..write('loanId: $loanId, ') + ..write('amount: $amount, ') + ..write('date: $date') + ..write(')')) + .toString(); + } +} + +class $TransactionTemplatesTable extends TransactionTemplates + with TableInfo<$TransactionTemplatesTable, TransactionTemplate> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $TransactionTemplatesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _amountMeta = const VerificationMeta('amount'); + @override + late final GeneratedColumn amount = GeneratedColumn( + 'amount', + aliasedName, + false, + type: DriftSqlType.double, + requiredDuringInsert: true, + ); + static const VerificationMeta _recurringMeta = const VerificationMeta( + 'recurring', + ); + @override + late final GeneratedColumn recurring = GeneratedColumn( + 'recurring', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("recurring" IN (0, 1))', + ), + ); + static const VerificationMeta _expenseCategoryIdMeta = const VerificationMeta( + 'expenseCategoryId', + ); + @override + late final GeneratedColumn expenseCategoryId = GeneratedColumn( + 'expense_category_id', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES expense_categories (id)', + ), + ); + static const VerificationMeta _beneficiaryIdMeta = const VerificationMeta( + 'beneficiaryId', + ); + @override + late final GeneratedColumn beneficiaryId = GeneratedColumn( + 'beneficiary_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES beneficiaries (id)', + ), + ); + static const VerificationMeta _accountIdMeta = const VerificationMeta( + 'accountId', + ); + @override + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES accounts (id)', + ), + ); + @override + List get $columns => [ + id, + name, + amount, + recurring, + expenseCategoryId, + beneficiaryId, + accountId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'transaction_templates'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, + name.isAcceptableOrUnknown(data['name']!, _nameMeta), + ); + } else if (isInserting) { + context.missing(_nameMeta); + } + if (data.containsKey('amount')) { + context.handle( + _amountMeta, + amount.isAcceptableOrUnknown(data['amount']!, _amountMeta), + ); + } else if (isInserting) { + context.missing(_amountMeta); + } + if (data.containsKey('recurring')) { + context.handle( + _recurringMeta, + recurring.isAcceptableOrUnknown(data['recurring']!, _recurringMeta), + ); + } else if (isInserting) { + context.missing(_recurringMeta); + } + if (data.containsKey('expense_category_id')) { + context.handle( + _expenseCategoryIdMeta, + expenseCategoryId.isAcceptableOrUnknown( + data['expense_category_id']!, + _expenseCategoryIdMeta, + ), + ); + } + if (data.containsKey('beneficiary_id')) { + context.handle( + _beneficiaryIdMeta, + beneficiaryId.isAcceptableOrUnknown( + data['beneficiary_id']!, + _beneficiaryIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_beneficiaryIdMeta); + } + if (data.containsKey('account_id')) { + context.handle( + _accountIdMeta, + accountId.isAcceptableOrUnknown(data['account_id']!, _accountIdMeta), + ); + } else if (isInserting) { + context.missing(_accountIdMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + TransactionTemplate map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return TransactionTemplate( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + name: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + )!, + amount: + attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}amount'], + )!, + recurring: + attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}recurring'], + )!, + expenseCategoryId: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}expense_category_id'], + ), + beneficiaryId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}beneficiary_id'], + )!, + accountId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}account_id'], + )!, + ); + } + + @override + $TransactionTemplatesTable createAlias(String alias) { + return $TransactionTemplatesTable(attachedDatabase, alias); + } +} + +class TransactionTemplate extends DataClass + implements Insertable { + final int id; + final String name; + final double amount; + final bool recurring; + final int? expenseCategoryId; + final int beneficiaryId; + final int accountId; + const TransactionTemplate({ + required this.id, + required this.name, + required this.amount, + required this.recurring, + this.expenseCategoryId, + required this.beneficiaryId, + required this.accountId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + map['amount'] = Variable(amount); + map['recurring'] = Variable(recurring); + if (!nullToAbsent || expenseCategoryId != null) { + map['expense_category_id'] = Variable(expenseCategoryId); + } + map['beneficiary_id'] = Variable(beneficiaryId); + map['account_id'] = Variable(accountId); + return map; + } + + TransactionTemplatesCompanion toCompanion(bool nullToAbsent) { + return TransactionTemplatesCompanion( + id: Value(id), + name: Value(name), + amount: Value(amount), + recurring: Value(recurring), + expenseCategoryId: + expenseCategoryId == null && nullToAbsent + ? const Value.absent() + : Value(expenseCategoryId), + beneficiaryId: Value(beneficiaryId), + accountId: Value(accountId), + ); + } + + factory TransactionTemplate.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return TransactionTemplate( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + amount: serializer.fromJson(json['amount']), + recurring: serializer.fromJson(json['recurring']), + expenseCategoryId: serializer.fromJson(json['expenseCategoryId']), + beneficiaryId: serializer.fromJson(json['beneficiaryId']), + accountId: serializer.fromJson(json['accountId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'amount': serializer.toJson(amount), + 'recurring': serializer.toJson(recurring), + 'expenseCategoryId': serializer.toJson(expenseCategoryId), + 'beneficiaryId': serializer.toJson(beneficiaryId), + 'accountId': serializer.toJson(accountId), + }; + } + + TransactionTemplate copyWith({ + int? id, + String? name, + double? amount, + bool? recurring, + Value expenseCategoryId = const Value.absent(), + int? beneficiaryId, + int? accountId, + }) => TransactionTemplate( + id: id ?? this.id, + name: name ?? this.name, + amount: amount ?? this.amount, + recurring: recurring ?? this.recurring, + expenseCategoryId: + expenseCategoryId.present + ? expenseCategoryId.value + : this.expenseCategoryId, + beneficiaryId: beneficiaryId ?? this.beneficiaryId, + accountId: accountId ?? this.accountId, + ); + TransactionTemplate copyWithCompanion(TransactionTemplatesCompanion data) { + return TransactionTemplate( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + amount: data.amount.present ? data.amount.value : this.amount, + recurring: data.recurring.present ? data.recurring.value : this.recurring, + expenseCategoryId: + data.expenseCategoryId.present + ? data.expenseCategoryId.value + : this.expenseCategoryId, + beneficiaryId: + data.beneficiaryId.present + ? data.beneficiaryId.value + : this.beneficiaryId, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + ); + } + + @override + String toString() { + return (StringBuffer('TransactionTemplate(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('amount: $amount, ') + ..write('recurring: $recurring, ') + ..write('expenseCategoryId: $expenseCategoryId, ') + ..write('beneficiaryId: $beneficiaryId, ') + ..write('accountId: $accountId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + name, + amount, + recurring, + expenseCategoryId, + beneficiaryId, + accountId, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is TransactionTemplate && + other.id == this.id && + other.name == this.name && + other.amount == this.amount && + other.recurring == this.recurring && + other.expenseCategoryId == this.expenseCategoryId && + other.beneficiaryId == this.beneficiaryId && + other.accountId == this.accountId); +} + +class TransactionTemplatesCompanion + extends UpdateCompanion { + final Value id; + final Value name; + final Value amount; + final Value recurring; + final Value expenseCategoryId; + final Value beneficiaryId; + final Value accountId; + const TransactionTemplatesCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + this.amount = const Value.absent(), + this.recurring = const Value.absent(), + this.expenseCategoryId = const Value.absent(), + this.beneficiaryId = const Value.absent(), + this.accountId = const Value.absent(), + }); + TransactionTemplatesCompanion.insert({ + this.id = const Value.absent(), + required String name, + required double amount, + required bool recurring, + this.expenseCategoryId = const Value.absent(), + required int beneficiaryId, + required int accountId, + }) : name = Value(name), + amount = Value(amount), + recurring = Value(recurring), + beneficiaryId = Value(beneficiaryId), + accountId = Value(accountId); + static Insertable custom({ + Expression? id, + Expression? name, + Expression? amount, + Expression? recurring, + Expression? expenseCategoryId, + Expression? beneficiaryId, + Expression? accountId, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + if (amount != null) 'amount': amount, + if (recurring != null) 'recurring': recurring, + if (expenseCategoryId != null) 'expense_category_id': expenseCategoryId, + if (beneficiaryId != null) 'beneficiary_id': beneficiaryId, + if (accountId != null) 'account_id': accountId, + }); + } + + TransactionTemplatesCompanion copyWith({ + Value? id, + Value? name, + Value? amount, + Value? recurring, + Value? expenseCategoryId, + Value? beneficiaryId, + Value? accountId, + }) { + return TransactionTemplatesCompanion( + id: id ?? this.id, + name: name ?? this.name, + amount: amount ?? this.amount, + recurring: recurring ?? this.recurring, + expenseCategoryId: expenseCategoryId ?? this.expenseCategoryId, + beneficiaryId: beneficiaryId ?? this.beneficiaryId, + accountId: accountId ?? this.accountId, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (recurring.present) { + map['recurring'] = Variable(recurring.value); + } + if (expenseCategoryId.present) { + map['expense_category_id'] = Variable(expenseCategoryId.value); + } + if (beneficiaryId.present) { + map['beneficiary_id'] = Variable(beneficiaryId.value); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('TransactionTemplatesCompanion(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('amount: $amount, ') + ..write('recurring: $recurring, ') + ..write('expenseCategoryId: $expenseCategoryId, ') + ..write('beneficiaryId: $beneficiaryId, ') + ..write('accountId: $accountId') + ..write(')')) + .toString(); + } +} + +class $RecurringTransactionsTable extends RecurringTransactions + with TableInfo<$RecurringTransactionsTable, RecurringTransaction> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $RecurringTransactionsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _daysMeta = const VerificationMeta('days'); + @override + late final GeneratedColumn days = GeneratedColumn( + 'days', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _lastExecutionMeta = const VerificationMeta( + 'lastExecution', + ); + @override + late final GeneratedColumn lastExecution = + GeneratedColumn( + 'last_execution', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _templateIdMeta = const VerificationMeta( + 'templateId', + ); + @override + late final GeneratedColumn templateId = GeneratedColumn( + 'template_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES transaction_templates (id)', + ), + ); + static const VerificationMeta _accountIdMeta = const VerificationMeta( + 'accountId', + ); + @override + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES accounts (id)', + ), + ); + @override + List get $columns => [ + id, + days, + lastExecution, + templateId, + accountId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'recurring_transactions'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('days')) { + context.handle( + _daysMeta, + days.isAcceptableOrUnknown(data['days']!, _daysMeta), + ); + } else if (isInserting) { + context.missing(_daysMeta); + } + if (data.containsKey('last_execution')) { + context.handle( + _lastExecutionMeta, + lastExecution.isAcceptableOrUnknown( + data['last_execution']!, + _lastExecutionMeta, + ), + ); + } + if (data.containsKey('template_id')) { + context.handle( + _templateIdMeta, + templateId.isAcceptableOrUnknown(data['template_id']!, _templateIdMeta), + ); + } else if (isInserting) { + context.missing(_templateIdMeta); + } + if (data.containsKey('account_id')) { + context.handle( + _accountIdMeta, + accountId.isAcceptableOrUnknown(data['account_id']!, _accountIdMeta), + ); + } else if (isInserting) { + context.missing(_accountIdMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + RecurringTransaction map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return RecurringTransaction( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + days: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}days'], + )!, + lastExecution: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_execution'], + ), + templateId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}template_id'], + )!, + accountId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}account_id'], + )!, + ); + } + + @override + $RecurringTransactionsTable createAlias(String alias) { + return $RecurringTransactionsTable(attachedDatabase, alias); + } +} + +class RecurringTransaction extends DataClass + implements Insertable { + final int id; + final int days; + final DateTime? lastExecution; + final int templateId; + final int accountId; + const RecurringTransaction({ + required this.id, + required this.days, + this.lastExecution, + required this.templateId, + required this.accountId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['days'] = Variable(days); + if (!nullToAbsent || lastExecution != null) { + map['last_execution'] = Variable(lastExecution); + } + map['template_id'] = Variable(templateId); + map['account_id'] = Variable(accountId); + return map; + } + + RecurringTransactionsCompanion toCompanion(bool nullToAbsent) { + return RecurringTransactionsCompanion( + id: Value(id), + days: Value(days), + lastExecution: + lastExecution == null && nullToAbsent + ? const Value.absent() + : Value(lastExecution), + templateId: Value(templateId), + accountId: Value(accountId), + ); + } + + factory RecurringTransaction.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return RecurringTransaction( + id: serializer.fromJson(json['id']), + days: serializer.fromJson(json['days']), + lastExecution: serializer.fromJson(json['lastExecution']), + templateId: serializer.fromJson(json['templateId']), + accountId: serializer.fromJson(json['accountId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'days': serializer.toJson(days), + 'lastExecution': serializer.toJson(lastExecution), + 'templateId': serializer.toJson(templateId), + 'accountId': serializer.toJson(accountId), + }; + } + + RecurringTransaction copyWith({ + int? id, + int? days, + Value lastExecution = const Value.absent(), + int? templateId, + int? accountId, + }) => RecurringTransaction( + id: id ?? this.id, + days: days ?? this.days, + lastExecution: + lastExecution.present ? lastExecution.value : this.lastExecution, + templateId: templateId ?? this.templateId, + accountId: accountId ?? this.accountId, + ); + RecurringTransaction copyWithCompanion(RecurringTransactionsCompanion data) { + return RecurringTransaction( + id: data.id.present ? data.id.value : this.id, + days: data.days.present ? data.days.value : this.days, + lastExecution: + data.lastExecution.present + ? data.lastExecution.value + : this.lastExecution, + templateId: + data.templateId.present ? data.templateId.value : this.templateId, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + ); + } + + @override + String toString() { + return (StringBuffer('RecurringTransaction(') + ..write('id: $id, ') + ..write('days: $days, ') + ..write('lastExecution: $lastExecution, ') + ..write('templateId: $templateId, ') + ..write('accountId: $accountId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(id, days, lastExecution, templateId, accountId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is RecurringTransaction && + other.id == this.id && + other.days == this.days && + other.lastExecution == this.lastExecution && + other.templateId == this.templateId && + other.accountId == this.accountId); +} + +class RecurringTransactionsCompanion + extends UpdateCompanion { + final Value id; + final Value days; + final Value lastExecution; + final Value templateId; + final Value accountId; + const RecurringTransactionsCompanion({ + this.id = const Value.absent(), + this.days = const Value.absent(), + this.lastExecution = const Value.absent(), + this.templateId = const Value.absent(), + this.accountId = const Value.absent(), + }); + RecurringTransactionsCompanion.insert({ + this.id = const Value.absent(), + required int days, + this.lastExecution = const Value.absent(), + required int templateId, + required int accountId, + }) : days = Value(days), + templateId = Value(templateId), + accountId = Value(accountId); + static Insertable custom({ + Expression? id, + Expression? days, + Expression? lastExecution, + Expression? templateId, + Expression? accountId, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (days != null) 'days': days, + if (lastExecution != null) 'last_execution': lastExecution, + if (templateId != null) 'template_id': templateId, + if (accountId != null) 'account_id': accountId, + }); + } + + RecurringTransactionsCompanion copyWith({ + Value? id, + Value? days, + Value? lastExecution, + Value? templateId, + Value? accountId, + }) { + return RecurringTransactionsCompanion( + id: id ?? this.id, + days: days ?? this.days, + lastExecution: lastExecution ?? this.lastExecution, + templateId: templateId ?? this.templateId, + accountId: accountId ?? this.accountId, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (days.present) { + map['days'] = Variable(days.value); + } + if (lastExecution.present) { + map['last_execution'] = Variable(lastExecution.value); + } + if (templateId.present) { + map['template_id'] = Variable(templateId.value); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('RecurringTransactionsCompanion(') + ..write('id: $id, ') + ..write('days: $days, ') + ..write('lastExecution: $lastExecution, ') + ..write('templateId: $templateId, ') + ..write('accountId: $accountId') + ..write(')')) + .toString(); + } +} + +class $TransactionsTable extends Transactions + with TableInfo<$TransactionsTable, Transaction> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $TransactionsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'PRIMARY KEY AUTOINCREMENT', + ), + ); + static const VerificationMeta _amountMeta = const VerificationMeta('amount'); + @override + late final GeneratedColumn amount = GeneratedColumn( + 'amount', + aliasedName, + false, + type: DriftSqlType.double, + requiredDuringInsert: true, + ); + static const VerificationMeta _dateMeta = const VerificationMeta('date'); + @override + late final GeneratedColumn date = GeneratedColumn( + 'date', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _expenseCategoryIdMeta = const VerificationMeta( + 'expenseCategoryId', + ); + @override + late final GeneratedColumn expenseCategoryId = GeneratedColumn( + 'expense_category_id', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES expense_categories (id)', + ), + ); + static const VerificationMeta _accountIdMeta = const VerificationMeta( + 'accountId', + ); + @override + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES accounts (id)', + ), + ); + static const VerificationMeta _beneficiaryIdMeta = const VerificationMeta( + 'beneficiaryId', + ); + @override + late final GeneratedColumn beneficiaryId = GeneratedColumn( + 'beneficiary_id', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES beneficiaries (id)', + ), + ); + @override + List get $columns => [ + id, + amount, + date, + expenseCategoryId, + accountId, + beneficiaryId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'transactions'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('amount')) { + context.handle( + _amountMeta, + amount.isAcceptableOrUnknown(data['amount']!, _amountMeta), + ); + } else if (isInserting) { + context.missing(_amountMeta); + } + if (data.containsKey('date')) { + context.handle( + _dateMeta, + date.isAcceptableOrUnknown(data['date']!, _dateMeta), + ); + } else if (isInserting) { + context.missing(_dateMeta); + } + if (data.containsKey('expense_category_id')) { + context.handle( + _expenseCategoryIdMeta, + expenseCategoryId.isAcceptableOrUnknown( + data['expense_category_id']!, + _expenseCategoryIdMeta, + ), + ); + } + if (data.containsKey('account_id')) { + context.handle( + _accountIdMeta, + accountId.isAcceptableOrUnknown(data['account_id']!, _accountIdMeta), + ); + } else if (isInserting) { + context.missing(_accountIdMeta); + } + if (data.containsKey('beneficiary_id')) { + context.handle( + _beneficiaryIdMeta, + beneficiaryId.isAcceptableOrUnknown( + data['beneficiary_id']!, + _beneficiaryIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_beneficiaryIdMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + Transaction map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Transaction( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}id'], + )!, + amount: + attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}amount'], + )!, + date: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}date'], + )!, + expenseCategoryId: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}expense_category_id'], + ), + accountId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}account_id'], + )!, + beneficiaryId: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}beneficiary_id'], + )!, + ); + } + + @override + $TransactionsTable createAlias(String alias) { + return $TransactionsTable(attachedDatabase, alias); + } +} + +class Transaction extends DataClass implements Insertable { + final int id; + final double amount; + final DateTime date; + final int? expenseCategoryId; + final int accountId; + final int beneficiaryId; + const Transaction({ + required this.id, + required this.amount, + required this.date, + this.expenseCategoryId, + required this.accountId, + required this.beneficiaryId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['amount'] = Variable(amount); + map['date'] = Variable(date); + if (!nullToAbsent || expenseCategoryId != null) { + map['expense_category_id'] = Variable(expenseCategoryId); + } + map['account_id'] = Variable(accountId); + map['beneficiary_id'] = Variable(beneficiaryId); + return map; + } + + TransactionsCompanion toCompanion(bool nullToAbsent) { + return TransactionsCompanion( + id: Value(id), + amount: Value(amount), + date: Value(date), + expenseCategoryId: + expenseCategoryId == null && nullToAbsent + ? const Value.absent() + : Value(expenseCategoryId), + accountId: Value(accountId), + beneficiaryId: Value(beneficiaryId), + ); + } + + factory Transaction.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Transaction( + id: serializer.fromJson(json['id']), + amount: serializer.fromJson(json['amount']), + date: serializer.fromJson(json['date']), + expenseCategoryId: serializer.fromJson(json['expenseCategoryId']), + accountId: serializer.fromJson(json['accountId']), + beneficiaryId: serializer.fromJson(json['beneficiaryId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'amount': serializer.toJson(amount), + 'date': serializer.toJson(date), + 'expenseCategoryId': serializer.toJson(expenseCategoryId), + 'accountId': serializer.toJson(accountId), + 'beneficiaryId': serializer.toJson(beneficiaryId), + }; + } + + Transaction copyWith({ + int? id, + double? amount, + DateTime? date, + Value expenseCategoryId = const Value.absent(), + int? accountId, + int? beneficiaryId, + }) => Transaction( + id: id ?? this.id, + amount: amount ?? this.amount, + date: date ?? this.date, + expenseCategoryId: + expenseCategoryId.present + ? expenseCategoryId.value + : this.expenseCategoryId, + accountId: accountId ?? this.accountId, + beneficiaryId: beneficiaryId ?? this.beneficiaryId, + ); + Transaction copyWithCompanion(TransactionsCompanion data) { + return Transaction( + id: data.id.present ? data.id.value : this.id, + amount: data.amount.present ? data.amount.value : this.amount, + date: data.date.present ? data.date.value : this.date, + expenseCategoryId: + data.expenseCategoryId.present + ? data.expenseCategoryId.value + : this.expenseCategoryId, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + beneficiaryId: + data.beneficiaryId.present + ? data.beneficiaryId.value + : this.beneficiaryId, + ); + } + + @override + String toString() { + return (StringBuffer('Transaction(') + ..write('id: $id, ') + ..write('amount: $amount, ') + ..write('date: $date, ') + ..write('expenseCategoryId: $expenseCategoryId, ') + ..write('accountId: $accountId, ') + ..write('beneficiaryId: $beneficiaryId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + amount, + date, + expenseCategoryId, + accountId, + beneficiaryId, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Transaction && + other.id == this.id && + other.amount == this.amount && + other.date == this.date && + other.expenseCategoryId == this.expenseCategoryId && + other.accountId == this.accountId && + other.beneficiaryId == this.beneficiaryId); +} + +class TransactionsCompanion extends UpdateCompanion { + final Value id; + final Value amount; + final Value date; + final Value expenseCategoryId; + final Value accountId; + final Value beneficiaryId; + const TransactionsCompanion({ + this.id = const Value.absent(), + this.amount = const Value.absent(), + this.date = const Value.absent(), + this.expenseCategoryId = const Value.absent(), + this.accountId = const Value.absent(), + this.beneficiaryId = const Value.absent(), + }); + TransactionsCompanion.insert({ + this.id = const Value.absent(), + required double amount, + required DateTime date, + this.expenseCategoryId = const Value.absent(), + required int accountId, + required int beneficiaryId, + }) : amount = Value(amount), + date = Value(date), + accountId = Value(accountId), + beneficiaryId = Value(beneficiaryId); + static Insertable custom({ + Expression? id, + Expression? amount, + Expression? date, + Expression? expenseCategoryId, + Expression? accountId, + Expression? beneficiaryId, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (amount != null) 'amount': amount, + if (date != null) 'date': date, + if (expenseCategoryId != null) 'expense_category_id': expenseCategoryId, + if (accountId != null) 'account_id': accountId, + if (beneficiaryId != null) 'beneficiary_id': beneficiaryId, + }); + } + + TransactionsCompanion copyWith({ + Value? id, + Value? amount, + Value? date, + Value? expenseCategoryId, + Value? accountId, + Value? beneficiaryId, + }) { + return TransactionsCompanion( + id: id ?? this.id, + amount: amount ?? this.amount, + date: date ?? this.date, + expenseCategoryId: expenseCategoryId ?? this.expenseCategoryId, + accountId: accountId ?? this.accountId, + beneficiaryId: beneficiaryId ?? this.beneficiaryId, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (date.present) { + map['date'] = Variable(date.value); + } + if (expenseCategoryId.present) { + map['expense_category_id'] = Variable(expenseCategoryId.value); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + if (beneficiaryId.present) { + map['beneficiary_id'] = Variable(beneficiaryId.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('TransactionsCompanion(') + ..write('id: $id, ') + ..write('amount: $amount, ') + ..write('date: $date, ') + ..write('expenseCategoryId: $expenseCategoryId, ') + ..write('accountId: $accountId, ') + ..write('beneficiaryId: $beneficiaryId') + ..write(')')) + .toString(); + } +} + +abstract class _$OkaneDatabase extends GeneratedDatabase { + _$OkaneDatabase(QueryExecutor e) : super(e); + $OkaneDatabaseManager get managers => $OkaneDatabaseManager(this); + late final $AccountsTable accounts = $AccountsTable(this); + late final $BeneficiariesTable beneficiaries = $BeneficiariesTable(this); + late final $BudgetsTable budgets = $BudgetsTable(this); + late final $ExpenseCategoriesTable expenseCategories = + $ExpenseCategoriesTable(this); + late final $BudgetItemsTable budgetItems = $BudgetItemsTable(this); + late final $LoansTable loans = $LoansTable(this); + late final $LoanChangesTable loanChanges = $LoanChangesTable(this); + late final $TransactionTemplatesTable transactionTemplates = + $TransactionTemplatesTable(this); + late final $RecurringTransactionsTable recurringTransactions = + $RecurringTransactionsTable(this); + late final $TransactionsTable transactions = $TransactionsTable(this); + late final AccountsDao accountsDao = AccountsDao(this as OkaneDatabase); + late final BeneficiariesDao beneficiariesDao = BeneficiariesDao( + this as OkaneDatabase, + ); + late final BudgetsDao budgetsDao = BudgetsDao(this as OkaneDatabase); + late final ExpenseCategoriesDao expenseCategoriesDao = ExpenseCategoriesDao( + this as OkaneDatabase, + ); + late final LoansDao loansDao = LoansDao(this as OkaneDatabase); + late final RecurringTransactionsDao recurringTransactionsDao = + RecurringTransactionsDao(this as OkaneDatabase); + late final TransactionTemplatesDao transactionTemplatesDao = + TransactionTemplatesDao(this as OkaneDatabase); + late final TransactionsDao transactionsDao = TransactionsDao( + this as OkaneDatabase, + ); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + accounts, + beneficiaries, + budgets, + expenseCategories, + budgetItems, + loans, + loanChanges, + transactionTemplates, + recurringTransactions, + transactions, + ]; +} + +typedef $$AccountsTableCreateCompanionBuilder = + AccountsCompanion Function({Value id, required String name}); +typedef $$AccountsTableUpdateCompanionBuilder = + AccountsCompanion Function({Value id, Value name}); + +final class $$AccountsTableReferences + extends BaseReferences<_$OkaneDatabase, $AccountsTable, Account> { + $$AccountsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static MultiTypedResultKey<$BeneficiariesTable, List> + _beneficiariesRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.beneficiaries, + aliasName: $_aliasNameGenerator(db.accounts.id, db.beneficiaries.accountId), + ); + + $$BeneficiariesTableProcessedTableManager get beneficiariesRefs { + final manager = $$BeneficiariesTableTableManager( + $_db, + $_db.beneficiaries, + ).filter((f) => f.accountId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_beneficiariesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey<$BudgetsTable, List> _budgetsRefsTable( + _$OkaneDatabase db, + ) => MultiTypedResultKey.fromTable( + db.budgets, + aliasName: $_aliasNameGenerator(db.accounts.id, db.budgets.accountId), + ); + + $$BudgetsTableProcessedTableManager get budgetsRefs { + final manager = $$BudgetsTableTableManager( + $_db, + $_db.budgets, + ).filter((f) => f.accountId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_budgetsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey< + $TransactionTemplatesTable, + List + > + _transactionTemplatesRefsTable(_$OkaneDatabase db) => + MultiTypedResultKey.fromTable( + db.transactionTemplates, + aliasName: $_aliasNameGenerator( + db.accounts.id, + db.transactionTemplates.accountId, + ), + ); + + $$TransactionTemplatesTableProcessedTableManager + get transactionTemplatesRefs { + final manager = $$TransactionTemplatesTableTableManager( + $_db, + $_db.transactionTemplates, + ).filter((f) => f.accountId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull( + _transactionTemplatesRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey< + $RecurringTransactionsTable, + List + > + _recurringTransactionsRefsTable(_$OkaneDatabase db) => + MultiTypedResultKey.fromTable( + db.recurringTransactions, + aliasName: $_aliasNameGenerator( + db.accounts.id, + db.recurringTransactions.accountId, + ), + ); + + $$RecurringTransactionsTableProcessedTableManager + get recurringTransactionsRefs { + final manager = $$RecurringTransactionsTableTableManager( + $_db, + $_db.recurringTransactions, + ).filter((f) => f.accountId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull( + _recurringTransactionsRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey<$TransactionsTable, List> + _transactionsRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.transactions, + aliasName: $_aliasNameGenerator(db.accounts.id, db.transactions.accountId), + ); + + $$TransactionsTableProcessedTableManager get transactionsRefs { + final manager = $$TransactionsTableTableManager( + $_db, + $_db.transactions, + ).filter((f) => f.accountId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_transactionsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$AccountsTableFilterComposer + extends Composer<_$OkaneDatabase, $AccountsTable> { + $$AccountsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnFilters(column), + ); + + Expression beneficiariesRefs( + Expression Function($$BeneficiariesTableFilterComposer f) f, + ) { + final $$BeneficiariesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableFilterComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression budgetsRefs( + Expression Function($$BudgetsTableFilterComposer f) f, + ) { + final $$BudgetsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.budgets, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetsTableFilterComposer( + $db: $db, + $table: $db.budgets, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionTemplatesRefs( + Expression Function($$TransactionTemplatesTableFilterComposer f) f, + ) { + final $$TransactionTemplatesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableFilterComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression recurringTransactionsRefs( + Expression Function($$RecurringTransactionsTableFilterComposer f) f, + ) { + final $$RecurringTransactionsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.recurringTransactions, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$RecurringTransactionsTableFilterComposer( + $db: $db, + $table: $db.recurringTransactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionsRefs( + Expression Function($$TransactionsTableFilterComposer f) f, + ) { + final $$TransactionsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactions, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionsTableFilterComposer( + $db: $db, + $table: $db.transactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$AccountsTableOrderingComposer + extends Composer<_$OkaneDatabase, $AccountsTable> { + $$AccountsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$AccountsTableAnnotationComposer + extends Composer<_$OkaneDatabase, $AccountsTable> { + $$AccountsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + Expression beneficiariesRefs( + Expression Function($$BeneficiariesTableAnnotationComposer a) f, + ) { + final $$BeneficiariesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableAnnotationComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression budgetsRefs( + Expression Function($$BudgetsTableAnnotationComposer a) f, + ) { + final $$BudgetsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.budgets, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetsTableAnnotationComposer( + $db: $db, + $table: $db.budgets, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionTemplatesRefs( + Expression Function($$TransactionTemplatesTableAnnotationComposer a) f, + ) { + final $$TransactionTemplatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableAnnotationComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression recurringTransactionsRefs( + Expression Function($$RecurringTransactionsTableAnnotationComposer a) f, + ) { + final $$RecurringTransactionsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.recurringTransactions, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$RecurringTransactionsTableAnnotationComposer( + $db: $db, + $table: $db.recurringTransactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionsRefs( + Expression Function($$TransactionsTableAnnotationComposer a) f, + ) { + final $$TransactionsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactions, + getReferencedColumn: (t) => t.accountId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionsTableAnnotationComposer( + $db: $db, + $table: $db.transactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$AccountsTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $AccountsTable, + Account, + $$AccountsTableFilterComposer, + $$AccountsTableOrderingComposer, + $$AccountsTableAnnotationComposer, + $$AccountsTableCreateCompanionBuilder, + $$AccountsTableUpdateCompanionBuilder, + (Account, $$AccountsTableReferences), + Account, + PrefetchHooks Function({ + bool beneficiariesRefs, + bool budgetsRefs, + bool transactionTemplatesRefs, + bool recurringTransactionsRefs, + bool transactionsRefs, + }) + > { + $$AccountsTableTableManager(_$OkaneDatabase db, $AccountsTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$AccountsTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$AccountsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $$AccountsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + }) => AccountsCompanion(id: id, name: name), + createCompanionCallback: + ({Value id = const Value.absent(), required String name}) => + AccountsCompanion.insert(id: id, name: name), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$AccountsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + beneficiariesRefs = false, + budgetsRefs = false, + transactionTemplatesRefs = false, + recurringTransactionsRefs = false, + transactionsRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (beneficiariesRefs) db.beneficiaries, + if (budgetsRefs) db.budgets, + if (transactionTemplatesRefs) db.transactionTemplates, + if (recurringTransactionsRefs) db.recurringTransactions, + if (transactionsRefs) db.transactions, + ], + addJoins: null, + getPrefetchedDataCallback: (items) async { + return [ + if (beneficiariesRefs) + await $_getPrefetchedData< + Account, + $AccountsTable, + Beneficiary + >( + currentTable: table, + referencedTable: $$AccountsTableReferences + ._beneficiariesRefsTable(db), + managerFromTypedResult: + (p0) => + $$AccountsTableReferences( + db, + table, + p0, + ).beneficiariesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.accountId == item.id, + ), + typedResults: items, + ), + if (budgetsRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$AccountsTableReferences + ._budgetsRefsTable(db), + managerFromTypedResult: + (p0) => + $$AccountsTableReferences( + db, + table, + p0, + ).budgetsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.accountId == item.id, + ), + typedResults: items, + ), + if (transactionTemplatesRefs) + await $_getPrefetchedData< + Account, + $AccountsTable, + TransactionTemplate + >( + currentTable: table, + referencedTable: $$AccountsTableReferences + ._transactionTemplatesRefsTable(db), + managerFromTypedResult: + (p0) => + $$AccountsTableReferences( + db, + table, + p0, + ).transactionTemplatesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.accountId == item.id, + ), + typedResults: items, + ), + if (recurringTransactionsRefs) + await $_getPrefetchedData< + Account, + $AccountsTable, + RecurringTransaction + >( + currentTable: table, + referencedTable: $$AccountsTableReferences + ._recurringTransactionsRefsTable(db), + managerFromTypedResult: + (p0) => + $$AccountsTableReferences( + db, + table, + p0, + ).recurringTransactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.accountId == item.id, + ), + typedResults: items, + ), + if (transactionsRefs) + await $_getPrefetchedData< + Account, + $AccountsTable, + Transaction + >( + currentTable: table, + referencedTable: $$AccountsTableReferences + ._transactionsRefsTable(db), + managerFromTypedResult: + (p0) => + $$AccountsTableReferences( + db, + table, + p0, + ).transactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.accountId == item.id, + ), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$AccountsTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $AccountsTable, + Account, + $$AccountsTableFilterComposer, + $$AccountsTableOrderingComposer, + $$AccountsTableAnnotationComposer, + $$AccountsTableCreateCompanionBuilder, + $$AccountsTableUpdateCompanionBuilder, + (Account, $$AccountsTableReferences), + Account, + PrefetchHooks Function({ + bool beneficiariesRefs, + bool budgetsRefs, + bool transactionTemplatesRefs, + bool recurringTransactionsRefs, + bool transactionsRefs, + }) + >; +typedef $$BeneficiariesTableCreateCompanionBuilder = + BeneficiariesCompanion Function({ + Value id, + required String name, + required BeneficiaryType type, + Value accountId, + Value imagePath, + }); +typedef $$BeneficiariesTableUpdateCompanionBuilder = + BeneficiariesCompanion Function({ + Value id, + Value name, + Value type, + Value accountId, + Value imagePath, + }); + +final class $$BeneficiariesTableReferences + extends BaseReferences<_$OkaneDatabase, $BeneficiariesTable, Beneficiary> { + $$BeneficiariesTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $AccountsTable _accountIdTable(_$OkaneDatabase db) => + db.accounts.createAlias( + $_aliasNameGenerator(db.beneficiaries.accountId, db.accounts.id), + ); + + $$AccountsTableProcessedTableManager? get accountId { + final $_column = $_itemColumn('account_id'); + if ($_column == null) return null; + final manager = $$AccountsTableTableManager( + $_db, + $_db.accounts, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_accountIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static MultiTypedResultKey<$LoansTable, List> _loansRefsTable( + _$OkaneDatabase db, + ) => MultiTypedResultKey.fromTable( + db.loans, + aliasName: $_aliasNameGenerator( + db.beneficiaries.id, + db.loans.beneficiaryId, + ), + ); + + $$LoansTableProcessedTableManager get loansRefs { + final manager = $$LoansTableTableManager( + $_db, + $_db.loans, + ).filter((f) => f.beneficiaryId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_loansRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey< + $TransactionTemplatesTable, + List + > + _transactionTemplatesRefsTable(_$OkaneDatabase db) => + MultiTypedResultKey.fromTable( + db.transactionTemplates, + aliasName: $_aliasNameGenerator( + db.beneficiaries.id, + db.transactionTemplates.beneficiaryId, + ), + ); + + $$TransactionTemplatesTableProcessedTableManager + get transactionTemplatesRefs { + final manager = $$TransactionTemplatesTableTableManager( + $_db, + $_db.transactionTemplates, + ).filter((f) => f.beneficiaryId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull( + _transactionTemplatesRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey<$TransactionsTable, List> + _transactionsRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.transactions, + aliasName: $_aliasNameGenerator( + db.beneficiaries.id, + db.transactions.beneficiaryId, + ), + ); + + $$TransactionsTableProcessedTableManager get transactionsRefs { + final manager = $$TransactionsTableTableManager( + $_db, + $_db.transactions, + ).filter((f) => f.beneficiaryId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_transactionsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$BeneficiariesTableFilterComposer + extends Composer<_$OkaneDatabase, $BeneficiariesTable> { + $$BeneficiariesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters + get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnFilters(column), + ); + + $$AccountsTableFilterComposer get accountId { + final $$AccountsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableFilterComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression loansRefs( + Expression Function($$LoansTableFilterComposer f) f, + ) { + final $$LoansTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.loans, + getReferencedColumn: (t) => t.beneficiaryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoansTableFilterComposer( + $db: $db, + $table: $db.loans, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionTemplatesRefs( + Expression Function($$TransactionTemplatesTableFilterComposer f) f, + ) { + final $$TransactionTemplatesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.beneficiaryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableFilterComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionsRefs( + Expression Function($$TransactionsTableFilterComposer f) f, + ) { + final $$TransactionsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactions, + getReferencedColumn: (t) => t.beneficiaryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionsTableFilterComposer( + $db: $db, + $table: $db.transactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$BeneficiariesTableOrderingComposer + extends Composer<_$OkaneDatabase, $BeneficiariesTable> { + $$BeneficiariesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get imagePath => $composableBuilder( + column: $table.imagePath, + builder: (column) => ColumnOrderings(column), + ); + + $$AccountsTableOrderingComposer get accountId { + final $$AccountsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableOrderingComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$BeneficiariesTableAnnotationComposer + extends Composer<_$OkaneDatabase, $BeneficiariesTable> { + $$BeneficiariesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + GeneratedColumnWithTypeConverter get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumn get imagePath => + $composableBuilder(column: $table.imagePath, builder: (column) => column); + + $$AccountsTableAnnotationComposer get accountId { + final $$AccountsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableAnnotationComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression loansRefs( + Expression Function($$LoansTableAnnotationComposer a) f, + ) { + final $$LoansTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.loans, + getReferencedColumn: (t) => t.beneficiaryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoansTableAnnotationComposer( + $db: $db, + $table: $db.loans, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionTemplatesRefs( + Expression Function($$TransactionTemplatesTableAnnotationComposer a) f, + ) { + final $$TransactionTemplatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.beneficiaryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableAnnotationComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionsRefs( + Expression Function($$TransactionsTableAnnotationComposer a) f, + ) { + final $$TransactionsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactions, + getReferencedColumn: (t) => t.beneficiaryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionsTableAnnotationComposer( + $db: $db, + $table: $db.transactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$BeneficiariesTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $BeneficiariesTable, + Beneficiary, + $$BeneficiariesTableFilterComposer, + $$BeneficiariesTableOrderingComposer, + $$BeneficiariesTableAnnotationComposer, + $$BeneficiariesTableCreateCompanionBuilder, + $$BeneficiariesTableUpdateCompanionBuilder, + (Beneficiary, $$BeneficiariesTableReferences), + Beneficiary, + PrefetchHooks Function({ + bool accountId, + bool loansRefs, + bool transactionTemplatesRefs, + bool transactionsRefs, + }) + > { + $$BeneficiariesTableTableManager( + _$OkaneDatabase db, + $BeneficiariesTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$BeneficiariesTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => + $$BeneficiariesTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $$BeneficiariesTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + Value type = const Value.absent(), + Value accountId = const Value.absent(), + Value imagePath = const Value.absent(), + }) => BeneficiariesCompanion( + id: id, + name: name, + type: type, + accountId: accountId, + imagePath: imagePath, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required String name, + required BeneficiaryType type, + Value accountId = const Value.absent(), + Value imagePath = const Value.absent(), + }) => BeneficiariesCompanion.insert( + id: id, + name: name, + type: type, + accountId: accountId, + imagePath: imagePath, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$BeneficiariesTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + accountId = false, + loansRefs = false, + transactionTemplatesRefs = false, + transactionsRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (loansRefs) db.loans, + if (transactionTemplatesRefs) db.transactionTemplates, + if (transactionsRefs) db.transactions, + ], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (accountId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.accountId, + referencedTable: $$BeneficiariesTableReferences + ._accountIdTable(db), + referencedColumn: + $$BeneficiariesTableReferences + ._accountIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return [ + if (loansRefs) + await $_getPrefetchedData< + Beneficiary, + $BeneficiariesTable, + Loan + >( + currentTable: table, + referencedTable: $$BeneficiariesTableReferences + ._loansRefsTable(db), + managerFromTypedResult: + (p0) => + $$BeneficiariesTableReferences( + db, + table, + p0, + ).loansRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.beneficiaryId == item.id, + ), + typedResults: items, + ), + if (transactionTemplatesRefs) + await $_getPrefetchedData< + Beneficiary, + $BeneficiariesTable, + TransactionTemplate + >( + currentTable: table, + referencedTable: $$BeneficiariesTableReferences + ._transactionTemplatesRefsTable(db), + managerFromTypedResult: + (p0) => + $$BeneficiariesTableReferences( + db, + table, + p0, + ).transactionTemplatesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.beneficiaryId == item.id, + ), + typedResults: items, + ), + if (transactionsRefs) + await $_getPrefetchedData< + Beneficiary, + $BeneficiariesTable, + Transaction + >( + currentTable: table, + referencedTable: $$BeneficiariesTableReferences + ._transactionsRefsTable(db), + managerFromTypedResult: + (p0) => + $$BeneficiariesTableReferences( + db, + table, + p0, + ).transactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.beneficiaryId == item.id, + ), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$BeneficiariesTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $BeneficiariesTable, + Beneficiary, + $$BeneficiariesTableFilterComposer, + $$BeneficiariesTableOrderingComposer, + $$BeneficiariesTableAnnotationComposer, + $$BeneficiariesTableCreateCompanionBuilder, + $$BeneficiariesTableUpdateCompanionBuilder, + (Beneficiary, $$BeneficiariesTableReferences), + Beneficiary, + PrefetchHooks Function({ + bool accountId, + bool loansRefs, + bool transactionTemplatesRefs, + bool transactionsRefs, + }) + >; +typedef $$BudgetsTableCreateCompanionBuilder = + BudgetsCompanion Function({ + Value id, + required BudgetPeriod period, + required String name, + required double income, + required bool includeOtherSpendings, + required int accountId, + }); +typedef $$BudgetsTableUpdateCompanionBuilder = + BudgetsCompanion Function({ + Value id, + Value period, + Value name, + Value income, + Value includeOtherSpendings, + Value accountId, + }); + +final class $$BudgetsTableReferences + extends BaseReferences<_$OkaneDatabase, $BudgetsTable, Budget> { + $$BudgetsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $AccountsTable _accountIdTable(_$OkaneDatabase db) => db.accounts + .createAlias($_aliasNameGenerator(db.budgets.accountId, db.accounts.id)); + + $$AccountsTableProcessedTableManager get accountId { + final $_column = $_itemColumn('account_id')!; + + final manager = $$AccountsTableTableManager( + $_db, + $_db.accounts, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_accountIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static MultiTypedResultKey<$BudgetItemsTable, List> + _budgetItemsRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.budgetItems, + aliasName: $_aliasNameGenerator(db.budgets.id, db.budgetItems.budgetId), + ); + + $$BudgetItemsTableProcessedTableManager get budgetItemsRefs { + final manager = $$BudgetItemsTableTableManager( + $_db, + $_db.budgetItems, + ).filter((f) => f.budgetId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_budgetItemsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$BudgetsTableFilterComposer + extends Composer<_$OkaneDatabase, $BudgetsTable> { + $$BudgetsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters + get period => $composableBuilder( + column: $table.period, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get income => $composableBuilder( + column: $table.income, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get includeOtherSpendings => $composableBuilder( + column: $table.includeOtherSpendings, + builder: (column) => ColumnFilters(column), + ); + + $$AccountsTableFilterComposer get accountId { + final $$AccountsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableFilterComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression budgetItemsRefs( + Expression Function($$BudgetItemsTableFilterComposer f) f, + ) { + final $$BudgetItemsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.budgetItems, + getReferencedColumn: (t) => t.budgetId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetItemsTableFilterComposer( + $db: $db, + $table: $db.budgetItems, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$BudgetsTableOrderingComposer + extends Composer<_$OkaneDatabase, $BudgetsTable> { + $$BudgetsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get period => $composableBuilder( + column: $table.period, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get income => $composableBuilder( + column: $table.income, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get includeOtherSpendings => $composableBuilder( + column: $table.includeOtherSpendings, + builder: (column) => ColumnOrderings(column), + ); + + $$AccountsTableOrderingComposer get accountId { + final $$AccountsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableOrderingComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$BudgetsTableAnnotationComposer + extends Composer<_$OkaneDatabase, $BudgetsTable> { + $$BudgetsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumnWithTypeConverter get period => + $composableBuilder(column: $table.period, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + GeneratedColumn get income => + $composableBuilder(column: $table.income, builder: (column) => column); + + GeneratedColumn get includeOtherSpendings => $composableBuilder( + column: $table.includeOtherSpendings, + builder: (column) => column, + ); + + $$AccountsTableAnnotationComposer get accountId { + final $$AccountsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableAnnotationComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression budgetItemsRefs( + Expression Function($$BudgetItemsTableAnnotationComposer a) f, + ) { + final $$BudgetItemsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.budgetItems, + getReferencedColumn: (t) => t.budgetId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetItemsTableAnnotationComposer( + $db: $db, + $table: $db.budgetItems, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$BudgetsTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $BudgetsTable, + Budget, + $$BudgetsTableFilterComposer, + $$BudgetsTableOrderingComposer, + $$BudgetsTableAnnotationComposer, + $$BudgetsTableCreateCompanionBuilder, + $$BudgetsTableUpdateCompanionBuilder, + (Budget, $$BudgetsTableReferences), + Budget, + PrefetchHooks Function({bool accountId, bool budgetItemsRefs}) + > { + $$BudgetsTableTableManager(_$OkaneDatabase db, $BudgetsTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$BudgetsTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$BudgetsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $$BudgetsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value period = const Value.absent(), + Value name = const Value.absent(), + Value income = const Value.absent(), + Value includeOtherSpendings = const Value.absent(), + Value accountId = const Value.absent(), + }) => BudgetsCompanion( + id: id, + period: period, + name: name, + income: income, + includeOtherSpendings: includeOtherSpendings, + accountId: accountId, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required BudgetPeriod period, + required String name, + required double income, + required bool includeOtherSpendings, + required int accountId, + }) => BudgetsCompanion.insert( + id: id, + period: period, + name: name, + income: income, + includeOtherSpendings: includeOtherSpendings, + accountId: accountId, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$BudgetsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + accountId = false, + budgetItemsRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [if (budgetItemsRefs) db.budgetItems], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (accountId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.accountId, + referencedTable: $$BudgetsTableReferences + ._accountIdTable(db), + referencedColumn: + $$BudgetsTableReferences._accountIdTable(db).id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return [ + if (budgetItemsRefs) + await $_getPrefetchedData< + Budget, + $BudgetsTable, + BudgetItem + >( + currentTable: table, + referencedTable: $$BudgetsTableReferences + ._budgetItemsRefsTable(db), + managerFromTypedResult: + (p0) => + $$BudgetsTableReferences( + db, + table, + p0, + ).budgetItemsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.budgetId == item.id, + ), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$BudgetsTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $BudgetsTable, + Budget, + $$BudgetsTableFilterComposer, + $$BudgetsTableOrderingComposer, + $$BudgetsTableAnnotationComposer, + $$BudgetsTableCreateCompanionBuilder, + $$BudgetsTableUpdateCompanionBuilder, + (Budget, $$BudgetsTableReferences), + Budget, + PrefetchHooks Function({bool accountId, bool budgetItemsRefs}) + >; +typedef $$ExpenseCategoriesTableCreateCompanionBuilder = + ExpenseCategoriesCompanion Function({Value id, required String name}); +typedef $$ExpenseCategoriesTableUpdateCompanionBuilder = + ExpenseCategoriesCompanion Function({Value id, Value name}); + +final class $$ExpenseCategoriesTableReferences + extends + BaseReferences< + _$OkaneDatabase, + $ExpenseCategoriesTable, + ExpenseCategory + > { + $$ExpenseCategoriesTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static MultiTypedResultKey<$BudgetItemsTable, List> + _budgetItemsRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.budgetItems, + aliasName: $_aliasNameGenerator( + db.expenseCategories.id, + db.budgetItems.expenseCategoryId, + ), + ); + + $$BudgetItemsTableProcessedTableManager get budgetItemsRefs { + final manager = $$BudgetItemsTableTableManager( + $_db, + $_db.budgetItems, + ).filter((f) => f.expenseCategoryId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_budgetItemsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey< + $TransactionTemplatesTable, + List + > + _transactionTemplatesRefsTable(_$OkaneDatabase db) => + MultiTypedResultKey.fromTable( + db.transactionTemplates, + aliasName: $_aliasNameGenerator( + db.expenseCategories.id, + db.transactionTemplates.expenseCategoryId, + ), + ); + + $$TransactionTemplatesTableProcessedTableManager + get transactionTemplatesRefs { + final manager = $$TransactionTemplatesTableTableManager( + $_db, + $_db.transactionTemplates, + ).filter((f) => f.expenseCategoryId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull( + _transactionTemplatesRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey<$TransactionsTable, List> + _transactionsRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.transactions, + aliasName: $_aliasNameGenerator( + db.expenseCategories.id, + db.transactions.expenseCategoryId, + ), + ); + + $$TransactionsTableProcessedTableManager get transactionsRefs { + final manager = $$TransactionsTableTableManager( + $_db, + $_db.transactions, + ).filter((f) => f.expenseCategoryId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_transactionsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$ExpenseCategoriesTableFilterComposer + extends Composer<_$OkaneDatabase, $ExpenseCategoriesTable> { + $$ExpenseCategoriesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnFilters(column), + ); + + Expression budgetItemsRefs( + Expression Function($$BudgetItemsTableFilterComposer f) f, + ) { + final $$BudgetItemsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.budgetItems, + getReferencedColumn: (t) => t.expenseCategoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetItemsTableFilterComposer( + $db: $db, + $table: $db.budgetItems, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionTemplatesRefs( + Expression Function($$TransactionTemplatesTableFilterComposer f) f, + ) { + final $$TransactionTemplatesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.expenseCategoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableFilterComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionsRefs( + Expression Function($$TransactionsTableFilterComposer f) f, + ) { + final $$TransactionsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactions, + getReferencedColumn: (t) => t.expenseCategoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionsTableFilterComposer( + $db: $db, + $table: $db.transactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$ExpenseCategoriesTableOrderingComposer + extends Composer<_$OkaneDatabase, $ExpenseCategoriesTable> { + $$ExpenseCategoriesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$ExpenseCategoriesTableAnnotationComposer + extends Composer<_$OkaneDatabase, $ExpenseCategoriesTable> { + $$ExpenseCategoriesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + Expression budgetItemsRefs( + Expression Function($$BudgetItemsTableAnnotationComposer a) f, + ) { + final $$BudgetItemsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.budgetItems, + getReferencedColumn: (t) => t.expenseCategoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetItemsTableAnnotationComposer( + $db: $db, + $table: $db.budgetItems, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionTemplatesRefs( + Expression Function($$TransactionTemplatesTableAnnotationComposer a) f, + ) { + final $$TransactionTemplatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.expenseCategoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableAnnotationComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression transactionsRefs( + Expression Function($$TransactionsTableAnnotationComposer a) f, + ) { + final $$TransactionsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.transactions, + getReferencedColumn: (t) => t.expenseCategoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionsTableAnnotationComposer( + $db: $db, + $table: $db.transactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$ExpenseCategoriesTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $ExpenseCategoriesTable, + ExpenseCategory, + $$ExpenseCategoriesTableFilterComposer, + $$ExpenseCategoriesTableOrderingComposer, + $$ExpenseCategoriesTableAnnotationComposer, + $$ExpenseCategoriesTableCreateCompanionBuilder, + $$ExpenseCategoriesTableUpdateCompanionBuilder, + (ExpenseCategory, $$ExpenseCategoriesTableReferences), + ExpenseCategory, + PrefetchHooks Function({ + bool budgetItemsRefs, + bool transactionTemplatesRefs, + bool transactionsRefs, + }) + > { + $$ExpenseCategoriesTableTableManager( + _$OkaneDatabase db, + $ExpenseCategoriesTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$ExpenseCategoriesTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: + () => $$ExpenseCategoriesTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: + () => $$ExpenseCategoriesTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + }) => ExpenseCategoriesCompanion(id: id, name: name), + createCompanionCallback: + ({Value id = const Value.absent(), required String name}) => + ExpenseCategoriesCompanion.insert(id: id, name: name), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$ExpenseCategoriesTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + budgetItemsRefs = false, + transactionTemplatesRefs = false, + transactionsRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (budgetItemsRefs) db.budgetItems, + if (transactionTemplatesRefs) db.transactionTemplates, + if (transactionsRefs) db.transactions, + ], + addJoins: null, + getPrefetchedDataCallback: (items) async { + return [ + if (budgetItemsRefs) + await $_getPrefetchedData< + ExpenseCategory, + $ExpenseCategoriesTable, + BudgetItem + >( + currentTable: table, + referencedTable: $$ExpenseCategoriesTableReferences + ._budgetItemsRefsTable(db), + managerFromTypedResult: + (p0) => + $$ExpenseCategoriesTableReferences( + db, + table, + p0, + ).budgetItemsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.expenseCategoryId == item.id, + ), + typedResults: items, + ), + if (transactionTemplatesRefs) + await $_getPrefetchedData< + ExpenseCategory, + $ExpenseCategoriesTable, + TransactionTemplate + >( + currentTable: table, + referencedTable: $$ExpenseCategoriesTableReferences + ._transactionTemplatesRefsTable(db), + managerFromTypedResult: + (p0) => + $$ExpenseCategoriesTableReferences( + db, + table, + p0, + ).transactionTemplatesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.expenseCategoryId == item.id, + ), + typedResults: items, + ), + if (transactionsRefs) + await $_getPrefetchedData< + ExpenseCategory, + $ExpenseCategoriesTable, + Transaction + >( + currentTable: table, + referencedTable: $$ExpenseCategoriesTableReferences + ._transactionsRefsTable(db), + managerFromTypedResult: + (p0) => + $$ExpenseCategoriesTableReferences( + db, + table, + p0, + ).transactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.expenseCategoryId == item.id, + ), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$ExpenseCategoriesTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $ExpenseCategoriesTable, + ExpenseCategory, + $$ExpenseCategoriesTableFilterComposer, + $$ExpenseCategoriesTableOrderingComposer, + $$ExpenseCategoriesTableAnnotationComposer, + $$ExpenseCategoriesTableCreateCompanionBuilder, + $$ExpenseCategoriesTableUpdateCompanionBuilder, + (ExpenseCategory, $$ExpenseCategoriesTableReferences), + ExpenseCategory, + PrefetchHooks Function({ + bool budgetItemsRefs, + bool transactionTemplatesRefs, + bool transactionsRefs, + }) + >; +typedef $$BudgetItemsTableCreateCompanionBuilder = + BudgetItemsCompanion Function({ + Value id, + required double amount, + required int expenseCategoryId, + required int budgetId, + }); +typedef $$BudgetItemsTableUpdateCompanionBuilder = + BudgetItemsCompanion Function({ + Value id, + Value amount, + Value expenseCategoryId, + Value budgetId, + }); + +final class $$BudgetItemsTableReferences + extends BaseReferences<_$OkaneDatabase, $BudgetItemsTable, BudgetItem> { + $$BudgetItemsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ExpenseCategoriesTable _expenseCategoryIdTable(_$OkaneDatabase db) => + db.expenseCategories.createAlias( + $_aliasNameGenerator( + db.budgetItems.expenseCategoryId, + db.expenseCategories.id, + ), + ); + + $$ExpenseCategoriesTableProcessedTableManager get expenseCategoryId { + final $_column = $_itemColumn('expense_category_id')!; + + final manager = $$ExpenseCategoriesTableTableManager( + $_db, + $_db.expenseCategories, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_expenseCategoryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $BudgetsTable _budgetIdTable(_$OkaneDatabase db) => + db.budgets.createAlias( + $_aliasNameGenerator(db.budgetItems.budgetId, db.budgets.id), + ); + + $$BudgetsTableProcessedTableManager get budgetId { + final $_column = $_itemColumn('budget_id')!; + + final manager = $$BudgetsTableTableManager( + $_db, + $_db.budgets, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_budgetIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$BudgetItemsTableFilterComposer + extends Composer<_$OkaneDatabase, $BudgetItemsTable> { + $$BudgetItemsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnFilters(column), + ); + + $$ExpenseCategoriesTableFilterComposer get expenseCategoryId { + final $$ExpenseCategoriesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableFilterComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BudgetsTableFilterComposer get budgetId { + final $$BudgetsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.budgetId, + referencedTable: $db.budgets, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetsTableFilterComposer( + $db: $db, + $table: $db.budgets, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$BudgetItemsTableOrderingComposer + extends Composer<_$OkaneDatabase, $BudgetItemsTable> { + $$BudgetItemsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnOrderings(column), + ); + + $$ExpenseCategoriesTableOrderingComposer get expenseCategoryId { + final $$ExpenseCategoriesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableOrderingComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BudgetsTableOrderingComposer get budgetId { + final $$BudgetsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.budgetId, + referencedTable: $db.budgets, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetsTableOrderingComposer( + $db: $db, + $table: $db.budgets, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$BudgetItemsTableAnnotationComposer + extends Composer<_$OkaneDatabase, $BudgetItemsTable> { + $$BudgetItemsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get amount => + $composableBuilder(column: $table.amount, builder: (column) => column); + + $$ExpenseCategoriesTableAnnotationComposer get expenseCategoryId { + final $$ExpenseCategoriesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableAnnotationComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BudgetsTableAnnotationComposer get budgetId { + final $$BudgetsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.budgetId, + referencedTable: $db.budgets, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BudgetsTableAnnotationComposer( + $db: $db, + $table: $db.budgets, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$BudgetItemsTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $BudgetItemsTable, + BudgetItem, + $$BudgetItemsTableFilterComposer, + $$BudgetItemsTableOrderingComposer, + $$BudgetItemsTableAnnotationComposer, + $$BudgetItemsTableCreateCompanionBuilder, + $$BudgetItemsTableUpdateCompanionBuilder, + (BudgetItem, $$BudgetItemsTableReferences), + BudgetItem, + PrefetchHooks Function({bool expenseCategoryId, bool budgetId}) + > { + $$BudgetItemsTableTableManager(_$OkaneDatabase db, $BudgetItemsTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$BudgetItemsTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$BudgetItemsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => + $$BudgetItemsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value amount = const Value.absent(), + Value expenseCategoryId = const Value.absent(), + Value budgetId = const Value.absent(), + }) => BudgetItemsCompanion( + id: id, + amount: amount, + expenseCategoryId: expenseCategoryId, + budgetId: budgetId, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required double amount, + required int expenseCategoryId, + required int budgetId, + }) => BudgetItemsCompanion.insert( + id: id, + amount: amount, + expenseCategoryId: expenseCategoryId, + budgetId: budgetId, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$BudgetItemsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + expenseCategoryId = false, + budgetId = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (expenseCategoryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.expenseCategoryId, + referencedTable: $$BudgetItemsTableReferences + ._expenseCategoryIdTable(db), + referencedColumn: + $$BudgetItemsTableReferences + ._expenseCategoryIdTable(db) + .id, + ) + as T; + } + if (budgetId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.budgetId, + referencedTable: $$BudgetItemsTableReferences + ._budgetIdTable(db), + referencedColumn: + $$BudgetItemsTableReferences + ._budgetIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$BudgetItemsTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $BudgetItemsTable, + BudgetItem, + $$BudgetItemsTableFilterComposer, + $$BudgetItemsTableOrderingComposer, + $$BudgetItemsTableAnnotationComposer, + $$BudgetItemsTableCreateCompanionBuilder, + $$BudgetItemsTableUpdateCompanionBuilder, + (BudgetItem, $$BudgetItemsTableReferences), + BudgetItem, + PrefetchHooks Function({bool expenseCategoryId, bool budgetId}) + >; +typedef $$LoansTableCreateCompanionBuilder = + LoansCompanion Function({Value id, required int beneficiaryId}); +typedef $$LoansTableUpdateCompanionBuilder = + LoansCompanion Function({Value id, Value beneficiaryId}); + +final class $$LoansTableReferences + extends BaseReferences<_$OkaneDatabase, $LoansTable, Loan> { + $$LoansTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $BeneficiariesTable _beneficiaryIdTable(_$OkaneDatabase db) => + db.beneficiaries.createAlias( + $_aliasNameGenerator(db.loans.beneficiaryId, db.beneficiaries.id), + ); + + $$BeneficiariesTableProcessedTableManager get beneficiaryId { + final $_column = $_itemColumn('beneficiary_id')!; + + final manager = $$BeneficiariesTableTableManager( + $_db, + $_db.beneficiaries, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_beneficiaryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static MultiTypedResultKey<$LoanChangesTable, List> + _loanChangesRefsTable(_$OkaneDatabase db) => MultiTypedResultKey.fromTable( + db.loanChanges, + aliasName: $_aliasNameGenerator(db.loans.id, db.loanChanges.loanId), + ); + + $$LoanChangesTableProcessedTableManager get loanChangesRefs { + final manager = $$LoanChangesTableTableManager( + $_db, + $_db.loanChanges, + ).filter((f) => f.loanId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_loanChangesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$LoansTableFilterComposer + extends Composer<_$OkaneDatabase, $LoansTable> { + $$LoansTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + $$BeneficiariesTableFilterComposer get beneficiaryId { + final $$BeneficiariesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableFilterComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression loanChangesRefs( + Expression Function($$LoanChangesTableFilterComposer f) f, + ) { + final $$LoanChangesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.loanChanges, + getReferencedColumn: (t) => t.loanId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoanChangesTableFilterComposer( + $db: $db, + $table: $db.loanChanges, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$LoansTableOrderingComposer + extends Composer<_$OkaneDatabase, $LoansTable> { + $$LoansTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + $$BeneficiariesTableOrderingComposer get beneficiaryId { + final $$BeneficiariesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableOrderingComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$LoansTableAnnotationComposer + extends Composer<_$OkaneDatabase, $LoansTable> { + $$LoansTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + $$BeneficiariesTableAnnotationComposer get beneficiaryId { + final $$BeneficiariesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableAnnotationComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression loanChangesRefs( + Expression Function($$LoanChangesTableAnnotationComposer a) f, + ) { + final $$LoanChangesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.loanChanges, + getReferencedColumn: (t) => t.loanId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoanChangesTableAnnotationComposer( + $db: $db, + $table: $db.loanChanges, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$LoansTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $LoansTable, + Loan, + $$LoansTableFilterComposer, + $$LoansTableOrderingComposer, + $$LoansTableAnnotationComposer, + $$LoansTableCreateCompanionBuilder, + $$LoansTableUpdateCompanionBuilder, + (Loan, $$LoansTableReferences), + Loan, + PrefetchHooks Function({bool beneficiaryId, bool loanChangesRefs}) + > { + $$LoansTableTableManager(_$OkaneDatabase db, $LoansTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$LoansTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$LoansTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $$LoansTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value beneficiaryId = const Value.absent(), + }) => LoansCompanion(id: id, beneficiaryId: beneficiaryId), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required int beneficiaryId, + }) => LoansCompanion.insert(id: id, beneficiaryId: beneficiaryId), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$LoansTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + beneficiaryId = false, + loanChangesRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [if (loanChangesRefs) db.loanChanges], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (beneficiaryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.beneficiaryId, + referencedTable: $$LoansTableReferences + ._beneficiaryIdTable(db), + referencedColumn: + $$LoansTableReferences + ._beneficiaryIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return [ + if (loanChangesRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$LoansTableReferences + ._loanChangesRefsTable(db), + managerFromTypedResult: + (p0) => + $$LoansTableReferences( + db, + table, + p0, + ).loanChangesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => + referencedItems.where((e) => e.loanId == item.id), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$LoansTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $LoansTable, + Loan, + $$LoansTableFilterComposer, + $$LoansTableOrderingComposer, + $$LoansTableAnnotationComposer, + $$LoansTableCreateCompanionBuilder, + $$LoansTableUpdateCompanionBuilder, + (Loan, $$LoansTableReferences), + Loan, + PrefetchHooks Function({bool beneficiaryId, bool loanChangesRefs}) + >; +typedef $$LoanChangesTableCreateCompanionBuilder = + LoanChangesCompanion Function({ + Value id, + required int loanId, + required double amount, + required DateTime date, + }); +typedef $$LoanChangesTableUpdateCompanionBuilder = + LoanChangesCompanion Function({ + Value id, + Value loanId, + Value amount, + Value date, + }); + +final class $$LoanChangesTableReferences + extends BaseReferences<_$OkaneDatabase, $LoanChangesTable, LoanChange> { + $$LoanChangesTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $LoansTable _loanIdTable(_$OkaneDatabase db) => db.loans.createAlias( + $_aliasNameGenerator(db.loanChanges.loanId, db.loans.id), + ); + + $$LoansTableProcessedTableManager get loanId { + final $_column = $_itemColumn('loan_id')!; + + final manager = $$LoansTableTableManager( + $_db, + $_db.loans, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_loanIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$LoanChangesTableFilterComposer + extends Composer<_$OkaneDatabase, $LoanChangesTable> { + $$LoanChangesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get date => $composableBuilder( + column: $table.date, + builder: (column) => ColumnFilters(column), + ); + + $$LoansTableFilterComposer get loanId { + final $$LoansTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.loanId, + referencedTable: $db.loans, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoansTableFilterComposer( + $db: $db, + $table: $db.loans, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$LoanChangesTableOrderingComposer + extends Composer<_$OkaneDatabase, $LoanChangesTable> { + $$LoanChangesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get date => $composableBuilder( + column: $table.date, + builder: (column) => ColumnOrderings(column), + ); + + $$LoansTableOrderingComposer get loanId { + final $$LoansTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.loanId, + referencedTable: $db.loans, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoansTableOrderingComposer( + $db: $db, + $table: $db.loans, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$LoanChangesTableAnnotationComposer + extends Composer<_$OkaneDatabase, $LoanChangesTable> { + $$LoanChangesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get amount => + $composableBuilder(column: $table.amount, builder: (column) => column); + + GeneratedColumn get date => + $composableBuilder(column: $table.date, builder: (column) => column); + + $$LoansTableAnnotationComposer get loanId { + final $$LoansTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.loanId, + referencedTable: $db.loans, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$LoansTableAnnotationComposer( + $db: $db, + $table: $db.loans, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$LoanChangesTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $LoanChangesTable, + LoanChange, + $$LoanChangesTableFilterComposer, + $$LoanChangesTableOrderingComposer, + $$LoanChangesTableAnnotationComposer, + $$LoanChangesTableCreateCompanionBuilder, + $$LoanChangesTableUpdateCompanionBuilder, + (LoanChange, $$LoanChangesTableReferences), + LoanChange, + PrefetchHooks Function({bool loanId}) + > { + $$LoanChangesTableTableManager(_$OkaneDatabase db, $LoanChangesTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$LoanChangesTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$LoanChangesTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => + $$LoanChangesTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value loanId = const Value.absent(), + Value amount = const Value.absent(), + Value date = const Value.absent(), + }) => LoanChangesCompanion( + id: id, + loanId: loanId, + amount: amount, + date: date, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required int loanId, + required double amount, + required DateTime date, + }) => LoanChangesCompanion.insert( + id: id, + loanId: loanId, + amount: amount, + date: date, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$LoanChangesTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({loanId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (loanId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.loanId, + referencedTable: $$LoanChangesTableReferences + ._loanIdTable(db), + referencedColumn: + $$LoanChangesTableReferences + ._loanIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$LoanChangesTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $LoanChangesTable, + LoanChange, + $$LoanChangesTableFilterComposer, + $$LoanChangesTableOrderingComposer, + $$LoanChangesTableAnnotationComposer, + $$LoanChangesTableCreateCompanionBuilder, + $$LoanChangesTableUpdateCompanionBuilder, + (LoanChange, $$LoanChangesTableReferences), + LoanChange, + PrefetchHooks Function({bool loanId}) + >; +typedef $$TransactionTemplatesTableCreateCompanionBuilder = + TransactionTemplatesCompanion Function({ + Value id, + required String name, + required double amount, + required bool recurring, + Value expenseCategoryId, + required int beneficiaryId, + required int accountId, + }); +typedef $$TransactionTemplatesTableUpdateCompanionBuilder = + TransactionTemplatesCompanion Function({ + Value id, + Value name, + Value amount, + Value recurring, + Value expenseCategoryId, + Value beneficiaryId, + Value accountId, + }); + +final class $$TransactionTemplatesTableReferences + extends + BaseReferences< + _$OkaneDatabase, + $TransactionTemplatesTable, + TransactionTemplate + > { + $$TransactionTemplatesTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $ExpenseCategoriesTable _expenseCategoryIdTable(_$OkaneDatabase db) => + db.expenseCategories.createAlias( + $_aliasNameGenerator( + db.transactionTemplates.expenseCategoryId, + db.expenseCategories.id, + ), + ); + + $$ExpenseCategoriesTableProcessedTableManager? get expenseCategoryId { + final $_column = $_itemColumn('expense_category_id'); + if ($_column == null) return null; + final manager = $$ExpenseCategoriesTableTableManager( + $_db, + $_db.expenseCategories, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_expenseCategoryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $BeneficiariesTable _beneficiaryIdTable(_$OkaneDatabase db) => + db.beneficiaries.createAlias( + $_aliasNameGenerator( + db.transactionTemplates.beneficiaryId, + db.beneficiaries.id, + ), + ); + + $$BeneficiariesTableProcessedTableManager get beneficiaryId { + final $_column = $_itemColumn('beneficiary_id')!; + + final manager = $$BeneficiariesTableTableManager( + $_db, + $_db.beneficiaries, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_beneficiaryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $AccountsTable _accountIdTable(_$OkaneDatabase db) => + db.accounts.createAlias( + $_aliasNameGenerator(db.transactionTemplates.accountId, db.accounts.id), + ); + + $$AccountsTableProcessedTableManager get accountId { + final $_column = $_itemColumn('account_id')!; + + final manager = $$AccountsTableTableManager( + $_db, + $_db.accounts, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_accountIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static MultiTypedResultKey< + $RecurringTransactionsTable, + List + > + _recurringTransactionsRefsTable(_$OkaneDatabase db) => + MultiTypedResultKey.fromTable( + db.recurringTransactions, + aliasName: $_aliasNameGenerator( + db.transactionTemplates.id, + db.recurringTransactions.templateId, + ), + ); + + $$RecurringTransactionsTableProcessedTableManager + get recurringTransactionsRefs { + final manager = $$RecurringTransactionsTableTableManager( + $_db, + $_db.recurringTransactions, + ).filter((f) => f.templateId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull( + _recurringTransactionsRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$TransactionTemplatesTableFilterComposer + extends Composer<_$OkaneDatabase, $TransactionTemplatesTable> { + $$TransactionTemplatesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get recurring => $composableBuilder( + column: $table.recurring, + builder: (column) => ColumnFilters(column), + ); + + $$ExpenseCategoriesTableFilterComposer get expenseCategoryId { + final $$ExpenseCategoriesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableFilterComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BeneficiariesTableFilterComposer get beneficiaryId { + final $$BeneficiariesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableFilterComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableFilterComposer get accountId { + final $$AccountsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableFilterComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression recurringTransactionsRefs( + Expression Function($$RecurringTransactionsTableFilterComposer f) f, + ) { + final $$RecurringTransactionsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.recurringTransactions, + getReferencedColumn: (t) => t.templateId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$RecurringTransactionsTableFilterComposer( + $db: $db, + $table: $db.recurringTransactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$TransactionTemplatesTableOrderingComposer + extends Composer<_$OkaneDatabase, $TransactionTemplatesTable> { + $$TransactionTemplatesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get recurring => $composableBuilder( + column: $table.recurring, + builder: (column) => ColumnOrderings(column), + ); + + $$ExpenseCategoriesTableOrderingComposer get expenseCategoryId { + final $$ExpenseCategoriesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableOrderingComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BeneficiariesTableOrderingComposer get beneficiaryId { + final $$BeneficiariesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableOrderingComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableOrderingComposer get accountId { + final $$AccountsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableOrderingComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$TransactionTemplatesTableAnnotationComposer + extends Composer<_$OkaneDatabase, $TransactionTemplatesTable> { + $$TransactionTemplatesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + GeneratedColumn get amount => + $composableBuilder(column: $table.amount, builder: (column) => column); + + GeneratedColumn get recurring => + $composableBuilder(column: $table.recurring, builder: (column) => column); + + $$ExpenseCategoriesTableAnnotationComposer get expenseCategoryId { + final $$ExpenseCategoriesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableAnnotationComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BeneficiariesTableAnnotationComposer get beneficiaryId { + final $$BeneficiariesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableAnnotationComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableAnnotationComposer get accountId { + final $$AccountsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableAnnotationComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression recurringTransactionsRefs( + Expression Function($$RecurringTransactionsTableAnnotationComposer a) f, + ) { + final $$RecurringTransactionsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.recurringTransactions, + getReferencedColumn: (t) => t.templateId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$RecurringTransactionsTableAnnotationComposer( + $db: $db, + $table: $db.recurringTransactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$TransactionTemplatesTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $TransactionTemplatesTable, + TransactionTemplate, + $$TransactionTemplatesTableFilterComposer, + $$TransactionTemplatesTableOrderingComposer, + $$TransactionTemplatesTableAnnotationComposer, + $$TransactionTemplatesTableCreateCompanionBuilder, + $$TransactionTemplatesTableUpdateCompanionBuilder, + (TransactionTemplate, $$TransactionTemplatesTableReferences), + TransactionTemplate, + PrefetchHooks Function({ + bool expenseCategoryId, + bool beneficiaryId, + bool accountId, + bool recurringTransactionsRefs, + }) + > { + $$TransactionTemplatesTableTableManager( + _$OkaneDatabase db, + $TransactionTemplatesTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$TransactionTemplatesTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: + () => $$TransactionTemplatesTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: + () => $$TransactionTemplatesTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + Value amount = const Value.absent(), + Value recurring = const Value.absent(), + Value expenseCategoryId = const Value.absent(), + Value beneficiaryId = const Value.absent(), + Value accountId = const Value.absent(), + }) => TransactionTemplatesCompanion( + id: id, + name: name, + amount: amount, + recurring: recurring, + expenseCategoryId: expenseCategoryId, + beneficiaryId: beneficiaryId, + accountId: accountId, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required String name, + required double amount, + required bool recurring, + Value expenseCategoryId = const Value.absent(), + required int beneficiaryId, + required int accountId, + }) => TransactionTemplatesCompanion.insert( + id: id, + name: name, + amount: amount, + recurring: recurring, + expenseCategoryId: expenseCategoryId, + beneficiaryId: beneficiaryId, + accountId: accountId, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$TransactionTemplatesTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + expenseCategoryId = false, + beneficiaryId = false, + accountId = false, + recurringTransactionsRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (recurringTransactionsRefs) db.recurringTransactions, + ], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (expenseCategoryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.expenseCategoryId, + referencedTable: + $$TransactionTemplatesTableReferences + ._expenseCategoryIdTable(db), + referencedColumn: + $$TransactionTemplatesTableReferences + ._expenseCategoryIdTable(db) + .id, + ) + as T; + } + if (beneficiaryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.beneficiaryId, + referencedTable: + $$TransactionTemplatesTableReferences + ._beneficiaryIdTable(db), + referencedColumn: + $$TransactionTemplatesTableReferences + ._beneficiaryIdTable(db) + .id, + ) + as T; + } + if (accountId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.accountId, + referencedTable: + $$TransactionTemplatesTableReferences + ._accountIdTable(db), + referencedColumn: + $$TransactionTemplatesTableReferences + ._accountIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return [ + if (recurringTransactionsRefs) + await $_getPrefetchedData< + TransactionTemplate, + $TransactionTemplatesTable, + RecurringTransaction + >( + currentTable: table, + referencedTable: $$TransactionTemplatesTableReferences + ._recurringTransactionsRefsTable(db), + managerFromTypedResult: + (p0) => + $$TransactionTemplatesTableReferences( + db, + table, + p0, + ).recurringTransactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.templateId == item.id, + ), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$TransactionTemplatesTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $TransactionTemplatesTable, + TransactionTemplate, + $$TransactionTemplatesTableFilterComposer, + $$TransactionTemplatesTableOrderingComposer, + $$TransactionTemplatesTableAnnotationComposer, + $$TransactionTemplatesTableCreateCompanionBuilder, + $$TransactionTemplatesTableUpdateCompanionBuilder, + (TransactionTemplate, $$TransactionTemplatesTableReferences), + TransactionTemplate, + PrefetchHooks Function({ + bool expenseCategoryId, + bool beneficiaryId, + bool accountId, + bool recurringTransactionsRefs, + }) + >; +typedef $$RecurringTransactionsTableCreateCompanionBuilder = + RecurringTransactionsCompanion Function({ + Value id, + required int days, + Value lastExecution, + required int templateId, + required int accountId, + }); +typedef $$RecurringTransactionsTableUpdateCompanionBuilder = + RecurringTransactionsCompanion Function({ + Value id, + Value days, + Value lastExecution, + Value templateId, + Value accountId, + }); + +final class $$RecurringTransactionsTableReferences + extends + BaseReferences< + _$OkaneDatabase, + $RecurringTransactionsTable, + RecurringTransaction + > { + $$RecurringTransactionsTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $TransactionTemplatesTable _templateIdTable(_$OkaneDatabase db) => + db.transactionTemplates.createAlias( + $_aliasNameGenerator( + db.recurringTransactions.templateId, + db.transactionTemplates.id, + ), + ); + + $$TransactionTemplatesTableProcessedTableManager get templateId { + final $_column = $_itemColumn('template_id')!; + + final manager = $$TransactionTemplatesTableTableManager( + $_db, + $_db.transactionTemplates, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_templateIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $AccountsTable _accountIdTable(_$OkaneDatabase db) => + db.accounts.createAlias( + $_aliasNameGenerator( + db.recurringTransactions.accountId, + db.accounts.id, + ), + ); + + $$AccountsTableProcessedTableManager get accountId { + final $_column = $_itemColumn('account_id')!; + + final manager = $$AccountsTableTableManager( + $_db, + $_db.accounts, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_accountIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$RecurringTransactionsTableFilterComposer + extends Composer<_$OkaneDatabase, $RecurringTransactionsTable> { + $$RecurringTransactionsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get days => $composableBuilder( + column: $table.days, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastExecution => $composableBuilder( + column: $table.lastExecution, + builder: (column) => ColumnFilters(column), + ); + + $$TransactionTemplatesTableFilterComposer get templateId { + final $$TransactionTemplatesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.templateId, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableFilterComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableFilterComposer get accountId { + final $$AccountsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableFilterComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$RecurringTransactionsTableOrderingComposer + extends Composer<_$OkaneDatabase, $RecurringTransactionsTable> { + $$RecurringTransactionsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get days => $composableBuilder( + column: $table.days, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastExecution => $composableBuilder( + column: $table.lastExecution, + builder: (column) => ColumnOrderings(column), + ); + + $$TransactionTemplatesTableOrderingComposer get templateId { + final $$TransactionTemplatesTableOrderingComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.templateId, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableOrderingComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableOrderingComposer get accountId { + final $$AccountsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableOrderingComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$RecurringTransactionsTableAnnotationComposer + extends Composer<_$OkaneDatabase, $RecurringTransactionsTable> { + $$RecurringTransactionsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get days => + $composableBuilder(column: $table.days, builder: (column) => column); + + GeneratedColumn get lastExecution => $composableBuilder( + column: $table.lastExecution, + builder: (column) => column, + ); + + $$TransactionTemplatesTableAnnotationComposer get templateId { + final $$TransactionTemplatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.templateId, + referencedTable: $db.transactionTemplates, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$TransactionTemplatesTableAnnotationComposer( + $db: $db, + $table: $db.transactionTemplates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableAnnotationComposer get accountId { + final $$AccountsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableAnnotationComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$RecurringTransactionsTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $RecurringTransactionsTable, + RecurringTransaction, + $$RecurringTransactionsTableFilterComposer, + $$RecurringTransactionsTableOrderingComposer, + $$RecurringTransactionsTableAnnotationComposer, + $$RecurringTransactionsTableCreateCompanionBuilder, + $$RecurringTransactionsTableUpdateCompanionBuilder, + (RecurringTransaction, $$RecurringTransactionsTableReferences), + RecurringTransaction, + PrefetchHooks Function({bool templateId, bool accountId}) + > { + $$RecurringTransactionsTableTableManager( + _$OkaneDatabase db, + $RecurringTransactionsTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$RecurringTransactionsTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: + () => $$RecurringTransactionsTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: + () => $$RecurringTransactionsTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value days = const Value.absent(), + Value lastExecution = const Value.absent(), + Value templateId = const Value.absent(), + Value accountId = const Value.absent(), + }) => RecurringTransactionsCompanion( + id: id, + days: days, + lastExecution: lastExecution, + templateId: templateId, + accountId: accountId, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required int days, + Value lastExecution = const Value.absent(), + required int templateId, + required int accountId, + }) => RecurringTransactionsCompanion.insert( + id: id, + days: days, + lastExecution: lastExecution, + templateId: templateId, + accountId: accountId, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$RecurringTransactionsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({templateId = false, accountId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (templateId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.templateId, + referencedTable: + $$RecurringTransactionsTableReferences + ._templateIdTable(db), + referencedColumn: + $$RecurringTransactionsTableReferences + ._templateIdTable(db) + .id, + ) + as T; + } + if (accountId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.accountId, + referencedTable: + $$RecurringTransactionsTableReferences + ._accountIdTable(db), + referencedColumn: + $$RecurringTransactionsTableReferences + ._accountIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$RecurringTransactionsTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $RecurringTransactionsTable, + RecurringTransaction, + $$RecurringTransactionsTableFilterComposer, + $$RecurringTransactionsTableOrderingComposer, + $$RecurringTransactionsTableAnnotationComposer, + $$RecurringTransactionsTableCreateCompanionBuilder, + $$RecurringTransactionsTableUpdateCompanionBuilder, + (RecurringTransaction, $$RecurringTransactionsTableReferences), + RecurringTransaction, + PrefetchHooks Function({bool templateId, bool accountId}) + >; +typedef $$TransactionsTableCreateCompanionBuilder = + TransactionsCompanion Function({ + Value id, + required double amount, + required DateTime date, + Value expenseCategoryId, + required int accountId, + required int beneficiaryId, + }); +typedef $$TransactionsTableUpdateCompanionBuilder = + TransactionsCompanion Function({ + Value id, + Value amount, + Value date, + Value expenseCategoryId, + Value accountId, + Value beneficiaryId, + }); + +final class $$TransactionsTableReferences + extends BaseReferences<_$OkaneDatabase, $TransactionsTable, Transaction> { + $$TransactionsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ExpenseCategoriesTable _expenseCategoryIdTable(_$OkaneDatabase db) => + db.expenseCategories.createAlias( + $_aliasNameGenerator( + db.transactions.expenseCategoryId, + db.expenseCategories.id, + ), + ); + + $$ExpenseCategoriesTableProcessedTableManager? get expenseCategoryId { + final $_column = $_itemColumn('expense_category_id'); + if ($_column == null) return null; + final manager = $$ExpenseCategoriesTableTableManager( + $_db, + $_db.expenseCategories, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_expenseCategoryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $AccountsTable _accountIdTable(_$OkaneDatabase db) => + db.accounts.createAlias( + $_aliasNameGenerator(db.transactions.accountId, db.accounts.id), + ); + + $$AccountsTableProcessedTableManager get accountId { + final $_column = $_itemColumn('account_id')!; + + final manager = $$AccountsTableTableManager( + $_db, + $_db.accounts, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_accountIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $BeneficiariesTable _beneficiaryIdTable(_$OkaneDatabase db) => + db.beneficiaries.createAlias( + $_aliasNameGenerator( + db.transactions.beneficiaryId, + db.beneficiaries.id, + ), + ); + + $$BeneficiariesTableProcessedTableManager get beneficiaryId { + final $_column = $_itemColumn('beneficiary_id')!; + + final manager = $$BeneficiariesTableTableManager( + $_db, + $_db.beneficiaries, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_beneficiaryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$TransactionsTableFilterComposer + extends Composer<_$OkaneDatabase, $TransactionsTable> { + $$TransactionsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get date => $composableBuilder( + column: $table.date, + builder: (column) => ColumnFilters(column), + ); + + $$ExpenseCategoriesTableFilterComposer get expenseCategoryId { + final $$ExpenseCategoriesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableFilterComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableFilterComposer get accountId { + final $$AccountsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableFilterComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BeneficiariesTableFilterComposer get beneficiaryId { + final $$BeneficiariesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableFilterComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$TransactionsTableOrderingComposer + extends Composer<_$OkaneDatabase, $TransactionsTable> { + $$TransactionsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get amount => $composableBuilder( + column: $table.amount, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get date => $composableBuilder( + column: $table.date, + builder: (column) => ColumnOrderings(column), + ); + + $$ExpenseCategoriesTableOrderingComposer get expenseCategoryId { + final $$ExpenseCategoriesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableOrderingComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableOrderingComposer get accountId { + final $$AccountsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableOrderingComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BeneficiariesTableOrderingComposer get beneficiaryId { + final $$BeneficiariesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableOrderingComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$TransactionsTableAnnotationComposer + extends Composer<_$OkaneDatabase, $TransactionsTable> { + $$TransactionsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get amount => + $composableBuilder(column: $table.amount, builder: (column) => column); + + GeneratedColumn get date => + $composableBuilder(column: $table.date, builder: (column) => column); + + $$ExpenseCategoriesTableAnnotationComposer get expenseCategoryId { + final $$ExpenseCategoriesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.expenseCategoryId, + referencedTable: $db.expenseCategories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ExpenseCategoriesTableAnnotationComposer( + $db: $db, + $table: $db.expenseCategories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$AccountsTableAnnotationComposer get accountId { + final $$AccountsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.accountId, + referencedTable: $db.accounts, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$AccountsTableAnnotationComposer( + $db: $db, + $table: $db.accounts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$BeneficiariesTableAnnotationComposer get beneficiaryId { + final $$BeneficiariesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.beneficiaryId, + referencedTable: $db.beneficiaries, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$BeneficiariesTableAnnotationComposer( + $db: $db, + $table: $db.beneficiaries, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$TransactionsTableTableManager + extends + RootTableManager< + _$OkaneDatabase, + $TransactionsTable, + Transaction, + $$TransactionsTableFilterComposer, + $$TransactionsTableOrderingComposer, + $$TransactionsTableAnnotationComposer, + $$TransactionsTableCreateCompanionBuilder, + $$TransactionsTableUpdateCompanionBuilder, + (Transaction, $$TransactionsTableReferences), + Transaction, + PrefetchHooks Function({ + bool expenseCategoryId, + bool accountId, + bool beneficiaryId, + }) + > { + $$TransactionsTableTableManager(_$OkaneDatabase db, $TransactionsTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$TransactionsTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$TransactionsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => + $$TransactionsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value amount = const Value.absent(), + Value date = const Value.absent(), + Value expenseCategoryId = const Value.absent(), + Value accountId = const Value.absent(), + Value beneficiaryId = const Value.absent(), + }) => TransactionsCompanion( + id: id, + amount: amount, + date: date, + expenseCategoryId: expenseCategoryId, + accountId: accountId, + beneficiaryId: beneficiaryId, + ), + createCompanionCallback: + ({ + Value id = const Value.absent(), + required double amount, + required DateTime date, + Value expenseCategoryId = const Value.absent(), + required int accountId, + required int beneficiaryId, + }) => TransactionsCompanion.insert( + id: id, + amount: amount, + date: date, + expenseCategoryId: expenseCategoryId, + accountId: accountId, + beneficiaryId: beneficiaryId, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$TransactionsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + expenseCategoryId = false, + accountId = false, + beneficiaryId = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (expenseCategoryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.expenseCategoryId, + referencedTable: $$TransactionsTableReferences + ._expenseCategoryIdTable(db), + referencedColumn: + $$TransactionsTableReferences + ._expenseCategoryIdTable(db) + .id, + ) + as T; + } + if (accountId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.accountId, + referencedTable: $$TransactionsTableReferences + ._accountIdTable(db), + referencedColumn: + $$TransactionsTableReferences + ._accountIdTable(db) + .id, + ) + as T; + } + if (beneficiaryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.beneficiaryId, + referencedTable: $$TransactionsTableReferences + ._beneficiaryIdTable(db), + referencedColumn: + $$TransactionsTableReferences + ._beneficiaryIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$TransactionsTableProcessedTableManager = + ProcessedTableManager< + _$OkaneDatabase, + $TransactionsTable, + Transaction, + $$TransactionsTableFilterComposer, + $$TransactionsTableOrderingComposer, + $$TransactionsTableAnnotationComposer, + $$TransactionsTableCreateCompanionBuilder, + $$TransactionsTableUpdateCompanionBuilder, + (Transaction, $$TransactionsTableReferences), + Transaction, + PrefetchHooks Function({ + bool expenseCategoryId, + bool accountId, + bool beneficiaryId, + }) + >; + +class $OkaneDatabaseManager { + final _$OkaneDatabase _db; + $OkaneDatabaseManager(this._db); + $$AccountsTableTableManager get accounts => + $$AccountsTableTableManager(_db, _db.accounts); + $$BeneficiariesTableTableManager get beneficiaries => + $$BeneficiariesTableTableManager(_db, _db.beneficiaries); + $$BudgetsTableTableManager get budgets => + $$BudgetsTableTableManager(_db, _db.budgets); + $$ExpenseCategoriesTableTableManager get expenseCategories => + $$ExpenseCategoriesTableTableManager(_db, _db.expenseCategories); + $$BudgetItemsTableTableManager get budgetItems => + $$BudgetItemsTableTableManager(_db, _db.budgetItems); + $$LoansTableTableManager get loans => + $$LoansTableTableManager(_db, _db.loans); + $$LoanChangesTableTableManager get loanChanges => + $$LoanChangesTableTableManager(_db, _db.loanChanges); + $$TransactionTemplatesTableTableManager get transactionTemplates => + $$TransactionTemplatesTableTableManager(_db, _db.transactionTemplates); + $$RecurringTransactionsTableTableManager get recurringTransactions => + $$RecurringTransactionsTableTableManager(_db, _db.recurringTransactions); + $$TransactionsTableTableManager get transactions => + $$TransactionsTableTableManager(_db, _db.transactions); +} + +mixin _$AccountsDaoMixin on DatabaseAccessor { + $AccountsTable get accounts => attachedDatabase.accounts; +} +mixin _$BeneficiariesDaoMixin on DatabaseAccessor { + $AccountsTable get accounts => attachedDatabase.accounts; + $BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries; +} +mixin _$BudgetsDaoMixin on DatabaseAccessor { + $AccountsTable get accounts => attachedDatabase.accounts; + $BudgetsTable get budgets => attachedDatabase.budgets; + $ExpenseCategoriesTable get expenseCategories => + attachedDatabase.expenseCategories; + $BudgetItemsTable get budgetItems => attachedDatabase.budgetItems; +} +mixin _$ExpenseCategoriesDaoMixin on DatabaseAccessor { + $ExpenseCategoriesTable get expenseCategories => + attachedDatabase.expenseCategories; +} +mixin _$LoansDaoMixin on DatabaseAccessor { + $AccountsTable get accounts => attachedDatabase.accounts; + $BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries; + $LoansTable get loans => attachedDatabase.loans; + $LoanChangesTable get loanChanges => attachedDatabase.loanChanges; +} +mixin _$RecurringTransactionsDaoMixin on DatabaseAccessor { + $ExpenseCategoriesTable get expenseCategories => + attachedDatabase.expenseCategories; + $AccountsTable get accounts => attachedDatabase.accounts; + $BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries; + $TransactionTemplatesTable get transactionTemplates => + attachedDatabase.transactionTemplates; + $RecurringTransactionsTable get recurringTransactions => + attachedDatabase.recurringTransactions; +} +mixin _$TransactionTemplatesDaoMixin on DatabaseAccessor { + $ExpenseCategoriesTable get expenseCategories => + attachedDatabase.expenseCategories; + $AccountsTable get accounts => attachedDatabase.accounts; + $BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries; + $TransactionTemplatesTable get transactionTemplates => + attachedDatabase.transactionTemplates; +} +mixin _$TransactionsDaoMixin on DatabaseAccessor { + $ExpenseCategoriesTable get expenseCategories => + attachedDatabase.expenseCategories; + $AccountsTable get accounts => attachedDatabase.accounts; + $BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries; + $TransactionsTable get transactions => attachedDatabase.transactions; +} diff --git a/lib/main.dart b/lib/main.dart index f586db9..ff0130d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,8 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:isar/isar.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/navigation.dart'; @@ -24,7 +23,7 @@ Future main() async { await settings.loadSettings(); GetIt.I.registerSingleton(settings); GetIt.I.registerSingleton(CoreCubit()); - GetIt.I.registerSingleton(await openDatabase()); + GetIt.I.registerSingleton(OkaneDatabase()); runApp(const MyApp()); } diff --git a/lib/ui/pages/account/account.dart b/lib/ui/pages/account/account.dart index 25f3ebd..b2cad67 100644 --- a/lib/ui/pages/account/account.dart +++ b/lib/ui/pages/account/account.dart @@ -1,11 +1,9 @@ +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/ui/pages/account/breakdown_card.dart'; -import 'package:okane/ui/pages/account/delete_account.dart'; import 'package:okane/ui/pages/account/loan_card.dart'; import 'package:okane/ui/pages/account/total_balance_card.dart'; import 'package:okane/ui/pages/account/upcoming_transactions_card.dart'; @@ -27,7 +25,6 @@ class AccountListPageState extends State { @override Widget build(BuildContext context) { - final bloc = GetIt.I.get(); return Stack( children: [ ListView( @@ -66,9 +63,12 @@ class AccountListPageState extends State { children: [ Text(state.accounts[index].name!), FutureBuilder( - future: getTotalBalance( - state.accounts[index], - ), + future: GetIt.I + .get() + .transactionsDao + .getTotalBalance([ + state.accounts[index].id, + ]), builder: (context, snapshot) { if (!snapshot.hasData) { return Container(); @@ -141,16 +141,21 @@ class AccountListPageState extends State { onPressed: () async { if (_accountNameController.text.isEmpty) return; - final a = - Account()..name = _accountNameController.text; - final b = - Beneficiary() - ..name = _accountNameController.text - ..account.value = - GetIt.I.get().activeAccount - ..type = BeneficiaryType.account; - await upsertAccount(a); - await upsertBeneficiary(b); + final db = GetIt.I.get(); + print("Adding account"); + final accountId = await db.accountsDao + .upsertAccount( + AccountsCompanion( + name: Value(_accountNameController.text), + ), + ); + print("Adding beneficiary"); + final b = BeneficiariesCompanion( + name: Value(_accountNameController.text), + accountId: Value(accountId), + type: Value(BeneficiaryType.account), + ); + await db.beneficiariesDao.upsertBeneficiary(b); _accountNameController.text = ""; Navigator.of(context).pop(); }, diff --git a/lib/ui/pages/account/balance_graph_card.dart b/lib/ui/pages/account/balance_graph_card.dart index 8d21f48..73fb7c5 100644 --- a/lib/ui/pages/account/balance_graph_card.dart +++ b/lib/ui/pages/account/balance_graph_card.dart @@ -2,7 +2,7 @@ import 'dart:collection'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -26,21 +26,27 @@ class AccountBalanceGraphCard extends StatelessWidget { Future> getAccountBalance() async { final coreCubit = GetIt.I.get(); final today = toMidnight(DateTime.now()); - final transactions = await getLastTransactions( + final db = GetIt.I.get(); + print("Getting transactions"); + final transactions = await db.transactionsDao.getLastTransactions( coreCubit.activeAccount!, today, 30, ); - final totalBalance = await getTotalBalance(coreCubit.activeAccount!); + print("Got transactions. Getting balance"); + final totalBalance = await db.transactionsDao.getTotalBalance([ + coreCubit.activeAccount!.id, + ]); + print("Got balance"); // Compute the differences per day Map differences = Map.fromEntries( List.generate(30, (i) => i).map((i) => MapEntry(i, 0)), ); for (final item in transactions) { - final diff = today.difference(toMidnight(item.date)).inDays; + final diff = today.difference(toMidnight(item.transaction.date)).inDays; final balance = differences[diff]!; - differences[diff] = balance + item.amount; + differences[diff] = balance + item.transaction.amount; } // Compute the balance @@ -74,6 +80,7 @@ class AccountBalanceGraphCard extends StatelessWidget { child: FutureBuilder( future: getAccountBalance(), builder: (context, snapshot) { + print("SNAPSHOT: ${snapshot.data}"); if (!snapshot.hasData) { return CircularProgressIndicator(); } diff --git a/lib/ui/pages/account/breakdown_card.dart b/lib/ui/pages/account/breakdown_card.dart index 6d7350d..3d0f984 100644 --- a/lib/ui/pages/account/breakdown_card.dart +++ b/lib/ui/pages/account/breakdown_card.dart @@ -1,11 +1,8 @@ -import 'dart:math'; - import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/transaction.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -45,31 +42,31 @@ class LegendItem extends StatelessWidget { class BreakdownCard extends StatelessWidget { const BreakdownCard({super.key}); - LegendData _computeSections(List transactions) { + LegendData _computeSections(List transactions) { Map expenses = {}; Map colors = {}; double usableMoney = 0; transactions.forEach((t) { String category; - if (t.amount > 0) { + if (t.transaction.amount > 0) { category = CATEGORY_INCOME; colors[CATEGORY_INCOME] = Colors.green; } else { - if (t.expenseCategory.value?.name == null) { + if (t.expenseCategory?.name == null) { category = CATEGORY_OTHER; colors[category] = Colors.red; } else { - category = t.expenseCategory.value!.name; - colors[category] = colorHash(t.expenseCategory.value!.name); + category = t.expenseCategory!.name; + colors[category] = colorHash(t.expenseCategory!.name); } } expenses.update( category, - (value) => value + t.amount.abs(), - ifAbsent: () => t.amount.abs(), + (value) => value + t.transaction.amount.abs(), + ifAbsent: () => t.transaction.amount.abs().toDouble(), ); - usableMoney += t.amount; + usableMoney += t.transaction.amount; }); return (expenses: expenses, colors: colors, usable: usableMoney); } @@ -97,8 +94,13 @@ class BreakdownCard extends StatelessWidget { ); } + final db = GetIt.I.get(); return FutureBuilder( - future: getLastTransactions(bloc.activeAccount!, DateTime.now(), 30), + future: db.transactionsDao.getLastTransactions( + bloc.activeAccount!, + DateTime.now(), + 30, + ), builder: (context, snapshot) { if (!snapshot.hasData) { return _buildCard( diff --git a/lib/ui/pages/account/delete_account.dart b/lib/ui/pages/account/delete_account.dart index 23a5124..63aa7e9 100644 --- a/lib/ui/pages/account/delete_account.dart +++ b/lib/ui/pages/account/delete_account.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/account.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; @@ -39,7 +39,7 @@ class DeleteAccountPopup extends StatelessWidget { ) : Text( t.pages.accounts.deleteAccount.content( - name: account.name!, + name: account.name, ), ), actions: [ diff --git a/lib/ui/pages/account/loan_card.dart b/lib/ui/pages/account/loan_card.dart index d8eebc4..b0fe388 100644 --- a/lib/ui/pages/account/loan_card.dart +++ b/lib/ui/pages/account/loan_card.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:okane/database/database.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -18,7 +19,7 @@ class TotalLoanCard extends StatelessWidget { child: Padding( padding: EdgeInsets.all(16), child: FutureBuilder( - future: getTotalLoanSum(), + future: GetIt.I.get().loansDao.getTotalLoanSum(), builder: (context, snapshot) { return Text( snapshot.hasData diff --git a/lib/ui/pages/account/total_balance_card.dart b/lib/ui/pages/account/total_balance_card.dart index 9675d69..3f5b7e0 100644 --- a/lib/ui/pages/account/total_balance_card.dart +++ b/lib/ui/pages/account/total_balance_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/database.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -15,10 +15,13 @@ class TotalBalanceCard extends StatelessWidget { return 0; } - final results = await Future.wait(accounts.map(getTotalBalance).toList()); - final loanSum = await getTotalLoanSum(); + final db = GetIt.I.get(); + final totalBalance = await db.transactionsDao.getTotalBalance( + accounts.map((a) => a.id), + ); - return results.reduce((acc, val) => acc + val) + loanSum; + final loanSum = await db.loansDao.getTotalLoanSum(); + return totalBalance + loanSum; } @override @@ -32,6 +35,7 @@ class TotalBalanceCard extends StatelessWidget { child: FutureBuilder( future: _getTotalBalance(state.accounts), builder: (context, snapshot) { + print("SNAPSHOT: ${snapshot.data}"); return Text( snapshot.hasData ? formatCurrency(snapshot.data!) diff --git a/lib/ui/pages/account/upcoming_transactions_card.dart b/lib/ui/pages/account/upcoming_transactions_card.dart index 5d65ddd..053ff0e 100644 --- a/lib/ui/pages/account/upcoming_transactions_card.dart +++ b/lib/ui/pages/account/upcoming_transactions_card.dart @@ -1,9 +1,9 @@ import 'dart:math'; +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/recurrent.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -20,8 +20,10 @@ class UpcomingTransactionsCard extends StatelessWidget { builder: (context, state) { final today = DateTime.now(); final upcomingRaw = - state.recurringTransactions.where((t) => t.isDue(today)).toList(); - final List upcoming = + state.recurringTransactions + .where((t) => isTransactionDue(t.recurring, today)) + .toList(); + final List upcoming = upcomingRaw.isEmpty ? List.empty() : upcomingRaw.sublist(0, min(upcomingRaw.length, 3)); @@ -42,9 +44,9 @@ class UpcomingTransactionsCard extends StatelessWidget { (transaction) => ListTile( title: Text( t.pages.accounts.upcomingTransactions.items.title( - name: transaction.template.value!.name, + name: transaction.template.name, amount: - "${formatCurrency(transaction.template.value!.amount)}€", + "${formatCurrency(transaction.template.amount)}€", ), ), subtitle: Text( @@ -52,17 +54,18 @@ class UpcomingTransactionsCard extends StatelessWidget { number: today .difference( - transaction.lastExecution ?? today, + transaction.recurring.lastExecution ?? + today, ) .inDays, ), ), leading: Icon( - transaction.template.value!.amount < 0 + transaction.template.amount < 0 ? Icons.remove : Icons.add, color: - transaction.template.value!.amount < 0 + transaction.template.amount < 0 ? Colors.red : Colors.green, ), @@ -74,14 +77,27 @@ class UpcomingTransactionsCard extends StatelessWidget { builder: (context) => AddTransactionWidget( activeAccountItem: bloc.activeAccount!, - template: transaction.template.value!, + template: ( + template: transaction.template, + beneficiary: transaction.beneficiary, + expenseCategory: null, + ), onAdd: (newTransaction) async { // Update the recurring template - transaction.lastExecution = - newTransaction.date; - await upsertRecurringTransaction( - transaction, - ); + await GetIt.I + .get() + .recurringTransactionsDao + .upsertRecurringTransaction( + transaction.recurring + .copyWith( + lastExecution: Value( + newTransaction + .transaction + .date, + ), + ) + .toCompanion(true), + ); Navigator.of(context).pop(); }, ), diff --git a/lib/ui/pages/budgets/add_budget.dart b/lib/ui/pages/budgets/add_budget.dart index cf2fe0e..9c52c60 100644 --- a/lib/ui/pages/budgets/add_budget.dart +++ b/lib/ui/pages/budgets/add_budget.dart @@ -1,7 +1,7 @@ +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/budget.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; @@ -52,14 +52,17 @@ class AddBudgetState extends State { } final bloc = GetIt.I.get(); - final budget = - Budget() - ..name = _budgetNameEditController.text - ..period = BudgetPeriod.month - ..includeOtherSpendings = false - ..income = double.parse(_budgetIncomeEditController.text) - ..account.value = bloc.activeAccount!; - await upsertBudget(budget); + await GetIt.I.get().budgetsDao.upsertBudget( + BudgetsCompanion( + name: Value(_budgetNameEditController.text), + period: Value(BudgetPeriod.month), + includeOtherSpendings: Value(false), + income: Value( + double.parse(_budgetIncomeEditController.text), + ), + accountId: Value(bloc.activeAccount!.id), + ), + ); widget.onDone(); }, child: Text(t.modals.add), diff --git a/lib/ui/pages/budgets/add_budget_item.dart b/lib/ui/pages/budgets/add_budget_item.dart index a5e1c9c..2fab2be 100644 --- a/lib/ui/pages/budgets/add_budget_item.dart +++ b/lib/ui/pages/budgets/add_budget_item.dart @@ -1,16 +1,14 @@ +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/budget.dart'; -import 'package:okane/database/collections/expense_category.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; -import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; import 'package:okane/ui/widgets/add_expense_category.dart'; class AddBudgetItemPopup extends StatefulWidget { final VoidCallback onDone; - final Budget budget; + final BudgetsDto budget; const AddBudgetItemPopup({ super.key, @@ -74,26 +72,24 @@ class AddBudgetItemState extends State { _expenseCategory == null) { return; } - if (widget.budget.items + if (widget.budget.budgetItems .where( (i) => - i.expenseCategory.value!.name == - _expenseCategory!.name, + i.expenseCategory.name == _expenseCategory!.name, ) .firstOrNull != null) { return; } - final item = - BudgetItem() - ..expenseCategory.value = _expenseCategory - ..amount = double.parse( - _budgetItemAmountEditController.text, - ); - await upsertBudgetItem(item); - widget.budget.items.add(item); - await upsertBudget(widget.budget); + await GetIt.I.get().budgetsDao.upsertBudgetItem( + BudgetItemsCompanion( + expenseCategoryId: Value(_expenseCategory!.id), + amount: Value( + double.parse(_budgetItemAmountEditController.text), + ), + ), + ); widget.onDone(); }, child: Text(t.modals.add), diff --git a/lib/ui/pages/budgets/budget_details.dart b/lib/ui/pages/budgets/budget_details.dart index abd7553..cb58a6d 100644 --- a/lib/ui/pages/budgets/budget_details.dart +++ b/lib/ui/pages/budgets/budget_details.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/budget.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/pages/budgets/add_budget_item.dart'; import 'package:okane/ui/state/core.dart'; @@ -56,7 +55,7 @@ class BudgetDetailsPage extends StatelessWidget { return Text(t.pages.budgets.details.noBudgetSelected); } - if (state.activeBudget!.items.isEmpty) { + if (state.activeBudget!.budgetItems.isEmpty) { return Row( children: [ Text(t.pages.budgets.details.noBudgetItems), @@ -73,14 +72,15 @@ class BudgetDetailsPage extends StatelessWidget { final bloc = GetIt.I.get(); final today = DateTime.now(); + final db = GetIt.I.get(); return FutureBuilder( - future: getTransactionsInTimeframe( + future: db.transactionsDao.getTransactionsInTimeframe( bloc.activeAccount!, today, TransactionQueryDateOption.thisMonth, ), builder: (context, snapshot) { - final daysLeft = switch (state.activeBudget!.period) { + final daysLeft = switch (state.activeBudget!.budget.period) { BudgetPeriod.month => monthEnding(today).difference(today).inDays, }; @@ -95,16 +95,17 @@ class BudgetDetailsPage extends StatelessWidget { ), ListView.builder( shrinkWrap: true, - itemCount: state.activeBudget!.items.length, + itemCount: state.activeBudget!.budgetItems.length, itemBuilder: (context, index) { - final item = state.activeBudget!.items.elementAt( - index, - ); - final amount = formatCurrency(item.amount); + final item = state.activeBudget!.budgetItems + .elementAt(index); + final amount = formatCurrency(item.item.amount); return ListTile( title: Text( t.pages.budgets.details.items.title( - name: item.expenseCategory.value!.name, + // TODO + name: "lol", + //name: item.expenseCategory.value!.name, amount: amount, ), ), @@ -119,26 +120,28 @@ class BudgetDetailsPage extends StatelessWidget { } final categories = - state.activeBudget!.items - .map((i) => i.expenseCategory.value!.name) + state.activeBudget!.budgetItems + // TODO + //.map((i) => i.expenseCategory.value!.name) + .map((i) => "lol") .toList(); final spending = {}; for (final t in snapshot.data!) { String categoryName; - if (!categories.contains(t.expenseCategory.value?.name)) { - if (!state.activeBudget!.includeOtherSpendings) { + if (!categories.contains(t.expenseCategory?.name)) { + if (!state.activeBudget!.budget.includeOtherSpendings) { continue; } categoryName = "Other"; } else { - categoryName = t.expenseCategory.value!.name; + categoryName = t.expenseCategory!.name; } spending.update( categoryName, - (value) => value + t.amount, - ifAbsent: () => t.amount, + (value) => value + t.transaction.amount, + ifAbsent: () => t.transaction.amount, ); } @@ -146,8 +149,8 @@ class BudgetDetailsPage extends StatelessWidget { spending.isEmpty ? 0 : spending.values.reduce((acc, val) => acc + val); - final budgetTotal = state.activeBudget!.items - .map((i) => i.amount) + final budgetTotal = state.activeBudget!.budgetItems + .map((i) => i.item.amount) .reduce((acc, val) => acc + val); return Column( mainAxisSize: MainAxisSize.min, @@ -268,13 +271,13 @@ class BudgetDetailsPage extends StatelessWidget { fallbackText: "", valueConverter: formatCurrency, items: - state.activeBudget!.items + state.activeBudget!.budgetItems .map( (i) => ( - title: i.expenseCategory.value!.name, - value: i.amount, + title: i.expenseCategory.name, + value: i.item.amount, color: colorHash( - i.expenseCategory.value!.name, + i.expenseCategory.name, ), ), ) @@ -339,18 +342,16 @@ class BudgetDetailsPage extends StatelessWidget { padding: EdgeInsets.all(8), child: ListView.builder( shrinkWrap: true, - itemCount: state.activeBudget!.items.length, + itemCount: state.activeBudget!.budgetItems.length, itemBuilder: (context, index) { - final item = state.activeBudget!.items.elementAt( - index, - ); - final amount = formatCurrency(item.amount); - final spent = - spending[item.expenseCategory.value!.name]; + final item = state.activeBudget!.budgetItems + .elementAt(index); + final amount = formatCurrency(item.item.amount); + final spent = spending[item.expenseCategory.name]; final left = spent == null - ? item.amount - : item.amount + spent; + ? item.item.amount + : item.item.amount + spent; final subtitleText = left < 0 ? t.pages.budgets.details.items.over( @@ -361,7 +362,7 @@ class BudgetDetailsPage extends StatelessWidget { ); return ListTile( title: Text( - "${item.expenseCategory.value!.name} ($amount)", + "${item.expenseCategory.name} ($amount)", ), subtitle: Text( subtitleText, diff --git a/lib/ui/pages/budgets/budgets.dart b/lib/ui/pages/budgets/budgets.dart index 896079a..e38dbd3 100644 --- a/lib/ui/pages/budgets/budgets.dart +++ b/lib/ui/pages/budgets/budgets.dart @@ -28,7 +28,7 @@ class BudgetListPage extends StatelessWidget { itemCount: state.budgets.length, itemBuilder: (context, index) => ListTile( - title: Text(state.budgets[index].name), + title: Text(state.budgets[index].budget.name), selected: state.budgets[index] == state.activeBudget, trailing: Row( mainAxisSize: MainAxisSize.min, diff --git a/lib/ui/pages/budgets/edit_budget.dart b/lib/ui/pages/budgets/edit_budget.dart index dad29a6..68c3792 100644 --- a/lib/ui/pages/budgets/edit_budget.dart +++ b/lib/ui/pages/budgets/edit_budget.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:okane/database/collections/budget.dart'; -import 'package:okane/database/database.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; class EditBudgetPopup extends StatefulWidget { - final Budget budget; + final BudgetsDto budget; final VoidCallback onDone; @@ -27,8 +27,8 @@ class EditBudgetState extends State { void initState() { super.initState(); - _budgetNameEditController.text = widget.budget.name; - _includeOtherSpendings = widget.budget.includeOtherSpendings; + _budgetNameEditController.text = widget.budget.budget.name; + _includeOtherSpendings = widget.budget.budget.includeOtherSpendings; } @override @@ -61,17 +61,22 @@ class EditBudgetState extends State { if (_budgetNameEditController.text.isEmpty) { return; } - if (_budgetNameEditController.text == widget.budget.name && + if (_budgetNameEditController.text == + widget.budget.budget.name && _includeOtherSpendings == - widget.budget.includeOtherSpendings) { + widget.budget.budget.includeOtherSpendings) { widget.onDone(); return; } - widget.budget - ..name = _budgetNameEditController.text - ..includeOtherSpendings = _includeOtherSpendings; - await upsertBudget(widget.budget); + await GetIt.I.get().budgetsDao.upsertBudget( + widget.budget.budget + .copyWith( + name: _budgetNameEditController.text, + includeOtherSpendings: _includeOtherSpendings, + ) + .toCompanion(false), + ); widget.onDone(); }, child: Text(t.modals.save), diff --git a/lib/ui/pages/loans/add_loan.dart b/lib/ui/pages/loans/add_loan.dart index e54b00f..51e43c4 100644 --- a/lib/ui/pages/loans/add_loan.dart +++ b/lib/ui/pages/loans/add_loan.dart @@ -1,10 +1,8 @@ +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/budget.dart'; -import 'package:okane/database/collections/loan.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:searchfield/searchfield.dart'; @@ -47,7 +45,7 @@ class AddBudgetState extends State { .where((el) { final bloc = GetIt.I.get(); if (el.type == BeneficiaryType.account) { - return el.account.value?.id.toInt() == + return el.accountId == bloc.activeAccount?.id.toInt(); } return true; @@ -79,6 +77,7 @@ class AddBudgetState extends State { return; } + final db = GetIt.I.get(); Beneficiary? beneficiary = _selectedBeneficiary?.item; if (beneficiary == null || getBeneficiaryName(beneficiary) != beneficiaryName) { @@ -87,42 +86,49 @@ class AddBudgetState extends State { context: context, builder: (context) => AlertDialog( - title: Text(t.common.beneficiary.addBeneficiary.title), - content: Text( - t.common.beneficiary.addBeneficiary.body(name: beneficiaryName), - ), - actions: [ - TextButton( - style: TextButton.styleFrom( - textStyle: Theme.of(context).textTheme.labelLarge, + title: Text( + t.common.beneficiary.addBeneficiary.title, ), - child: Text(t.modals.add), - onPressed: () => Navigator.of(context).pop(true), - ), - TextButton( - style: TextButton.styleFrom( - textStyle: Theme.of(context).textTheme.labelLarge, + content: Text( + t.common.beneficiary.addBeneficiary.body( + name: beneficiaryName, + ), ), - child: Text(t.modals.cancel), - onPressed: () => Navigator.of(context).pop(false), + actions: [ + TextButton( + style: TextButton.styleFrom( + textStyle: + Theme.of(context).textTheme.labelLarge, + ), + child: Text(t.modals.add), + onPressed: () => Navigator.of(context).pop(true), + ), + TextButton( + style: TextButton.styleFrom( + textStyle: + Theme.of(context).textTheme.labelLarge, + ), + child: Text(t.modals.cancel), + onPressed: () => Navigator.of(context).pop(false), + ), + ], ), - ], - ), ); if (result == null || !result) { return; } - beneficiary = - Beneficiary() - ..name = beneficiaryName - ..type = BeneficiaryType.other; - await upsertBeneficiary(beneficiary); + beneficiary = await db.beneficiariesDao.upsertBeneficiary( + BeneficiariesCompanion( + name: Value(beneficiaryName), + type: Value(BeneficiaryType.other), + ), + ); } - final loan = - Loan()..beneficiary.value = beneficiary; - await upsertLoan(loan); + await db.loansDao.upsertLoan( + LoansCompanion(beneficiaryId: Value(beneficiary.id)), + ); widget.onDone(); }, child: Text(t.modals.add), diff --git a/lib/ui/pages/loans/add_loan_change.dart b/lib/ui/pages/loans/add_loan_change.dart index 882472b..0242edc 100644 --- a/lib/ui/pages/loans/add_loan_change.dart +++ b/lib/ui/pages/loans/add_loan_change.dart @@ -1,6 +1,7 @@ +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; -import 'package:okane/database/collections/loan.dart'; -import 'package:okane/database/database.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/utils.dart'; @@ -9,7 +10,7 @@ enum LoanChangeType { owe, loan } class AddLoanChangePopup extends StatefulWidget { final VoidCallback onDone; - final Loan loan; + final LoanDto loan; const AddLoanChangePopup({ super.key, @@ -84,13 +85,14 @@ class AddLoanPopupState extends State { LoanChangeType.owe => -1, LoanChangeType.loan => 1, }; - final loanChange = - LoanChange() - ..amount = sign * double.parse(_amountController.text).abs() - ..date = DateTime.now(); - await upsertLoanChange(loanChange); - widget.loan.changes.add(loanChange); - await upsertLoan(widget.loan); + await GetIt.I.get().loansDao.upsertLoanChange( + LoanChangesCompanion( + amount: Value( + sign * double.parse(_amountController.text).abs(), + ), + date: Value(DateTime.now()), + ), + ); widget.onDone(); }, child: Text(t.modals.add), diff --git a/lib/ui/pages/loans/loan_details.dart b/lib/ui/pages/loans/loan_details.dart index 9a48a6a..e352c2c 100644 --- a/lib/ui/pages/loans/loan_details.dart +++ b/lib/ui/pages/loans/loan_details.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:get_it/get_it.dart'; import 'package:grouped_list/grouped_list.dart'; -import 'package:okane/database/collections/loan.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/ui/pages/loans/add_loan_change.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -35,6 +35,7 @@ class LoanDetailsPage extends StatelessWidget { ], ), ), + Expanded( child: BlocBuilder( builder: (context, state) { @@ -55,11 +56,10 @@ class LoanDetailsPage extends StatelessWidget { child: Row( children: [ ImageWrapper( - title: state.activeLoan!.beneficiary.value!.name, - path: - state.activeLoan!.beneficiary.value!.imagePath, + title: state.activeLoan!.beneficiary.name, + path: state.activeLoan!.beneficiary.imagePath, ), - Text(state.activeLoan!.beneficiary.value!.name), + Text(state.activeLoan!.beneficiary.name), ], ), ), @@ -145,11 +145,10 @@ class LoanDetailsPage extends StatelessWidget { color: Colors.red, ), onPressed: () async { - state.activeLoan!.changes.remove( - item, - ); - await deleteLoanChange(item); - await upsertLoan(state.activeLoan!); + await GetIt.I + .get() + .loansDao + .deleteLoanChange(item.id); }, ), ), diff --git a/lib/ui/pages/loans/loan_list.dart b/lib/ui/pages/loans/loan_list.dart index dba0467..e6dd95b 100644 --- a/lib/ui/pages/loans/loan_list.dart +++ b/lib/ui/pages/loans/loan_list.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/database.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/pages/loans/add_loan.dart'; import 'package:okane/ui/state/core.dart'; @@ -21,7 +20,7 @@ class LoanListPage extends StatelessWidget { itemCount: state.loans.length, itemBuilder: (context, index) { final item = state.loans[index]; - final beneficiary = item.beneficiary.value!; + final beneficiary = item.beneficiary; return ListTile( leading: ImageWrapper( title: beneficiary.name, @@ -45,7 +44,8 @@ class LoanListPage extends StatelessWidget { return; } - await deleteLoan(item); + // TODO + // await deleteLoan(item); }, icon: Icon(Icons.delete, color: Colors.red), ), diff --git a/lib/ui/pages/template_list.dart b/lib/ui/pages/template_list.dart index 7e87447..a5ec8b1 100644 --- a/lib/ui/pages/template_list.dart +++ b/lib/ui/pages/template_list.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -21,7 +21,9 @@ class TemplateListState extends State { builder: (context, state) { final account = GetIt.I.get().activeAccount; final nonRecurringTemplates = - state.transactionTemplates.where((t) => !t.recurring).toList(); + state.transactionTemplates + .where((t) => !t.template.recurring) + .toList(); return Stack( children: [ CustomScrollView( @@ -34,7 +36,7 @@ class TemplateListState extends State { itemBuilder: (context, index) { final template = nonRecurringTemplates[index]; return ListTile( - title: Text(template.name), + title: Text(template.template.name), trailing: IconButton( icon: Icon(Icons.delete), color: Colors.red, @@ -43,14 +45,17 @@ class TemplateListState extends State { context, t.pages.templates.removeTemplate.title, t.pages.templates.removeTemplate.body( - name: template.name, + name: template.template.name, ), ); if (!result) { return; } - await deleteTransactionTemplate(template); + await GetIt.I + .get() + .transactionTemplatesDao + .deleteTemplate(template.template); }, ), ); @@ -64,7 +69,7 @@ class TemplateListState extends State { itemBuilder: (context, index) { final template = state.recurringTransactions[index]; return ListTile( - title: Text(template.template.value!.name), + title: Text(template.template.name), trailing: IconButton( icon: Icon(Icons.delete, color: Colors.red), onPressed: () async { @@ -72,14 +77,17 @@ class TemplateListState extends State { context, t.pages.templates.removeTemplate.title, t.pages.templates.removeTemplate.body( - name: template.template.value!.name, + name: template.template.name, ), ); if (!result) { return; } - await deleteRecurringTransactionTemplate(template); + await GetIt.I + .get() + .recurringTransactionsDao + .deleteTemplate(template); }, ), ); diff --git a/lib/ui/pages/transaction_details.dart b/lib/ui/pages/transaction_details.dart index 9049706..99994b2 100644 --- a/lib/ui/pages/transaction_details.dart +++ b/lib/ui/pages/transaction_details.dart @@ -1,11 +1,11 @@ import 'dart:io'; +import 'package:drift/drift.dart' show Value; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; @@ -43,8 +43,9 @@ class TransactionDetailsPage extends StatelessWidget { await File(file.path!).copy(imagePath); print("Updating DB"); - beneficiary.imagePath = imagePath; - await upsertBeneficiary(beneficiary); + await GetIt.I.get().beneficiariesDao.upsertBeneficiary( + beneficiary.copyWith(imagePath: Value(imagePath)).toCompanion(false), + ); } @override @@ -83,13 +84,16 @@ class TransactionDetailsPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ StreamBuilder( - stream: watchBeneficiaryObject( - state.activeTransaction!.beneficiary.value!.id, - ), + stream: GetIt.I + .get() + .beneficiariesDao + .watchBeneficiary( + state.activeTransaction!.beneficiary.id, + ), builder: (context, snapshot) { final obj = snapshot.data ?? - state.activeTransaction!.beneficiary.value!; + state.activeTransaction!.beneficiary; return ImageWrapper( title: obj.name, path: obj.imagePath, @@ -116,7 +120,6 @@ class TransactionDetailsPage extends StatelessWidget { state .activeTransaction! .beneficiary - .value! .name, ), ), @@ -150,16 +153,16 @@ class TransactionDetailsPage extends StatelessWidget { ], ), + // TODO + /* Wrap( spacing: 8, children: state.activeTransaction!.tags .map((tag) => Chip(label: Text(tag))) .toList(), - ), - - if (state.activeTransaction!.expenseCategory.value != - null) + ),*/ + if (state.activeTransaction!.expenseCategory != null) Padding( padding: EdgeInsets.symmetric(vertical: 8), child: Row( @@ -172,8 +175,7 @@ class TransactionDetailsPage extends StatelessWidget { label: Text( state .activeTransaction! - .expenseCategory - .value! + .expenseCategory! .name, ), ), @@ -186,11 +188,13 @@ class TransactionDetailsPage extends StatelessWidget { padding: EdgeInsets.symmetric(vertical: 8), child: Row( children: [ - state.activeTransaction!.amount > 0 + state.activeTransaction!.transaction.amount > 0 ? Icon(Icons.add) : Icon(Icons.remove), Text( - formatCurrency(state.activeTransaction!.amount), + formatCurrency( + state.activeTransaction!.transaction.amount, + ), ), ], ), diff --git a/lib/ui/pages/transaction_list.dart b/lib/ui/pages/transaction_list.dart index df0e773..d5d7928 100644 --- a/lib/ui/pages/transaction_list.dart +++ b/lib/ui/pages/transaction_list.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; import 'package:grouped_list/grouped_list.dart'; -import 'package:okane/database/collections/transaction.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/pages/account/balance_graph_card.dart'; import 'package:okane/ui/state/core.dart'; @@ -41,7 +41,9 @@ class TransactionListState extends State { physics: NeverScrollableScrollPhysics(), elements: state.transactions, reverse: true, - groupBy: (Transaction item) => formatDateTime(item.date), + groupBy: + (TransactionDto item) => + formatDateTime(item.transaction.date), groupHeaderBuilder: (item) => Row( mainAxisAlignment: MainAxisAlignment.center, @@ -54,7 +56,7 @@ class TransactionListState extends State { child: Padding( padding: EdgeInsets.all(4), child: Text( - formatDateTime(item.date), + formatDateTime(item.transaction.date), style: TextStyle(color: Colors.white), ), ), diff --git a/lib/ui/state/core.dart b/lib/ui/state/core.dart index 2b94bbd..a0cf612 100644 --- a/lib/ui/state/core.dart +++ b/lib/ui/state/core.dart @@ -1,15 +1,8 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/budget.dart'; -import 'package:okane/database/collections/expense_category.dart'; -import 'package:okane/database/collections/loan.dart'; -import 'package:okane/database/collections/recurrent.dart'; -import 'package:okane/database/collections/template.dart'; -import 'package:okane/database/collections/transaction.dart'; -import 'package:okane/database/database.dart' as db; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/ui/navigation.dart'; part 'core.freezed.dart'; @@ -19,17 +12,17 @@ abstract class CoreState with _$CoreState { const factory CoreState({ @Default(OkanePage.accounts) OkanePage activePage, int? activeAccountIndex, - @Default(null) Transaction? activeTransaction, + @Default(null) TransactionDto? activeTransaction, @Default([]) List accounts, - @Default([]) List recurringTransactions, - @Default([]) List transactions, - @Default([]) List transactionTemplates, + @Default([]) List recurringTransactions, + @Default([]) List transactions, + @Default([]) List transactionTemplates, @Default([]) List beneficiaries, @Default([]) List expenseCategories, - @Default([]) List budgets, - @Default(null) Budget? activeBudget, - @Default([]) List loans, - @Default(null) Loan? activeLoan, + @Default([]) List budgets, + @Default(null) BudgetsDto? activeBudget, + @Default([]) List loans, + @Default(null) LoanDto? activeLoan, @Default(false) bool isDeletingAccount, }) = _CoreState; } @@ -48,80 +41,65 @@ class CoreCubit extends Cubit { void setupAccountStream() { _accountsStreamSubscription?.cancel(); - _accountsStreamSubscription = db.watchAccounts().listen((_) async { - final resetStreams = state.activeAccountIndex == null; - final accounts = await db.getAccounts(); - emit( - state.copyWith( - accounts: accounts, - activeAccountIndex: state.activeAccountIndex ?? 0, - ), - ); - - if (resetStreams) { - setupStreams(accounts[0]); - } - }); + _accountsStreamSubscription = GetIt.I + .get() + .accountsDao + .accountsStream() + .listen((accounts) { + emit( + state.copyWith( + accounts: accounts, + activeAccountIndex: + accounts.isNotEmpty ? state.activeAccountIndex ?? 0 : null, + ), + ); + }); } void setupStreams(Account account) { + final db = GetIt.I.get(); setupAccountStream(); _recurringTransactionStreamSubscription?.cancel(); - _recurringTransactionStreamSubscription = db - .watchRecurringTransactions(activeAccount!) - .listen((_) async { - print("RECURRING UPDATE"); - emit( - state.copyWith( - recurringTransactions: await db.getRecurringTransactions( - activeAccount!, - ), - ), - ); + _recurringTransactionStreamSubscription = db.recurringTransactionsDao + .recurringTransactionsStream(account) + .listen((recurring) async { + emit(state.copyWith(recurringTransactions: recurring)); }); _transactionTemplatesStreamSubcription?.cancel(); - _transactionTemplatesStreamSubcription = db - .watchTransactionTemplates(activeAccount!) - .listen((_) async { - emit( - state.copyWith( - transactionTemplates: await db.getTransactionTemplates( - activeAccount!, - ), - ), - ); + _transactionTemplatesStreamSubcription = db.transactionTemplatesDao + .transactionTemplatesStream(account) + .listen((templates) async { + emit(state.copyWith(transactionTemplates: templates)); }); _transactionsStreamSubscription?.cancel(); - _transactionsStreamSubscription = db - .watchTransactions(activeAccount!) - .listen((_) async { - emit( - state.copyWith( - transactions: await db.getTransactions(activeAccount!), - ), - ); + _transactionsStreamSubscription = db.transactionsDao + .transactionsStream(activeAccount!) + .listen((transactions) async { + emit(state.copyWith(transactions: transactions)); }); _beneficiariesStreamSubscription?.cancel(); - _beneficiariesStreamSubscription = db.watchBeneficiaries().listen(( - _, - ) async { - emit(state.copyWith(beneficiaries: await db.getBeneficiaries())); - }); + _beneficiariesStreamSubscription = db.beneficiariesDao + .beneficiariesStream() + .listen((beneficiaries) async { + emit(state.copyWith(beneficiaries: beneficiaries)); + }); _expenseCategoryStreamSubscription?.cancel(); - _expenseCategoryStreamSubscription = db.watchExpenseCategory().listen(( - _, - ) async { - emit(state.copyWith(expenseCategories: await db.getExpenseCategories())); - }); + _expenseCategoryStreamSubscription = db.expenseCategoriesDao + .expenseCategoriesStream(account) + .listen((expenseCategories) async { + emit(state.copyWith(expenseCategories: expenseCategories)); + }); _budgetsStreamSubscription?.cancel(); - _budgetsStreamSubscription = db.watchBudgets(activeAccount!).listen(( - _, - ) async { - emit(state.copyWith(budgets: await db.getBudgets(activeAccount!))); - }); + _budgetsStreamSubscription = db.budgetsDao + .budgetsStream(activeAccount!) + .listen((budgets) async { + emit(state.copyWith(budgets: budgets)); + }); _loanStreamSubscription?.cancel(); - _loanStreamSubscription = db.watchLoans().listen((_) async { - emit(state.copyWith(loans: await db.getLoans())); + _loanStreamSubscription = db.loansDao.loansStream(account).listen(( + loans, + ) async { + emit(state.copyWith(loans: loans)); }); } @@ -137,23 +115,29 @@ class CoreCubit extends Cubit { } Future init() async { - final accounts = await db.getAccounts(); + final db = GetIt.I.get(); + final accounts = await db.accountsDao.getAccounts(); final account = accounts.isEmpty ? null : accounts[0]; emit( state.copyWith( accounts: accounts, activeAccountIndex: accounts.isEmpty ? null : 0, - transactions: await db.getTransactions(account), - beneficiaries: await db.getBeneficiaries(), - transactionTemplates: await db.getTransactionTemplates(account), - recurringTransactions: await db.getRecurringTransactions(account), - expenseCategories: await db.getExpenseCategories(), - budgets: await db.getBudgets(account), - loans: await db.getLoans(), + transactions: await db.transactionsDao.getTransactions(account), + beneficiaries: await db.beneficiariesDao.getBeneficiaries(), + transactionTemplates: await db.transactionTemplatesDao + .getTransactionTemplates(account), + recurringTransactions: await db.recurringTransactionsDao + .getRecurringTransactions(account), + expenseCategories: await db.expenseCategoriesDao.getExpenseCategories( + account, + ), + budgets: await db.budgetsDao.getBudgets(account), + loans: await db.loansDao.getLoans(account), ), ); if (account != null) { + setupAccountStream(); setupStreams(account); } else { setupAccountStream(); @@ -166,15 +150,18 @@ class CoreCubit extends Cubit { } Future setActiveAccountIndex(int index) async { + final db = GetIt.I.get(); final account = state.accounts[index]; emit( state.copyWith( activeAccountIndex: index, - transactions: await db.getTransactions(account), - beneficiaries: await db.getBeneficiaries(), - transactionTemplates: await db.getTransactionTemplates(account), - recurringTransactions: await db.getRecurringTransactions(account), - budgets: await db.getBudgets(account), + transactions: await db.transactionsDao.getTransactions(account), + beneficiaries: await db.beneficiariesDao.getBeneficiaries(), + transactionTemplates: await db.transactionTemplatesDao + .getTransactionTemplates(account), + recurringTransactions: await db.recurringTransactionsDao + .getRecurringTransactions(account), + budgets: await db.budgetsDao.getBudgets(account), activeBudget: null, activeTransaction: null, activeLoan: null, @@ -183,7 +170,7 @@ class CoreCubit extends Cubit { setupStreams(account); } - void setActiveTransaction(Transaction? item) { + void setActiveTransaction(TransactionDto? item) { emit(state.copyWith(activeTransaction: item)); } @@ -191,7 +178,7 @@ class CoreCubit extends Cubit { emit(state.copyWith(accounts: accounts)); } - void setActiveBudget(Budget? budget) { + void setActiveBudget(BudgetsDto? budget) { emit(state.copyWith(activeBudget: budget)); } @@ -203,14 +190,15 @@ class CoreCubit extends Cubit { cancelStreams(); try { - await db.deleteAccount(account); + // TODO + //await db.deleteAccount(account); } finally { emit(state.copyWith(isDeletingAccount: false)); } await init(); } - void setActiveLoan(Loan loan) { + void setActiveLoan(LoanDto loan) { emit(state.copyWith(activeLoan: loan)); } diff --git a/lib/ui/state/core.freezed.dart b/lib/ui/state/core.freezed.dart index 6b19976..0a3deaf 100644 --- a/lib/ui/state/core.freezed.dart +++ b/lib/ui/state/core.freezed.dart @@ -19,20 +19,20 @@ final _privateConstructorUsedError = UnsupportedError( mixin _$CoreState { OkanePage get activePage => throw _privateConstructorUsedError; int? get activeAccountIndex => throw _privateConstructorUsedError; - Transaction? get activeTransaction => throw _privateConstructorUsedError; + TransactionDto? get activeTransaction => throw _privateConstructorUsedError; List get accounts => throw _privateConstructorUsedError; - List get recurringTransactions => + List get recurringTransactions => throw _privateConstructorUsedError; - List get transactions => throw _privateConstructorUsedError; - List get transactionTemplates => + List get transactions => throw _privateConstructorUsedError; + List get transactionTemplates => throw _privateConstructorUsedError; List get beneficiaries => throw _privateConstructorUsedError; List get expenseCategories => throw _privateConstructorUsedError; - List get budgets => throw _privateConstructorUsedError; - Budget? get activeBudget => throw _privateConstructorUsedError; - List get loans => throw _privateConstructorUsedError; - Loan? get activeLoan => throw _privateConstructorUsedError; + List get budgets => throw _privateConstructorUsedError; + BudgetsDto? get activeBudget => throw _privateConstructorUsedError; + List get loans => throw _privateConstructorUsedError; + LoanDto? get activeLoan => throw _privateConstructorUsedError; bool get isDeletingAccount => throw _privateConstructorUsedError; @JsonKey(ignore: true) @@ -48,17 +48,17 @@ abstract class $CoreStateCopyWith<$Res> { $Res call({ OkanePage activePage, int? activeAccountIndex, - Transaction? activeTransaction, + TransactionDto? activeTransaction, List accounts, - List recurringTransactions, - List transactions, - List transactionTemplates, + List recurringTransactions, + List transactions, + List transactionTemplates, List beneficiaries, List expenseCategories, - List budgets, - Budget? activeBudget, - List loans, - Loan? activeLoan, + List budgets, + BudgetsDto? activeBudget, + List loans, + LoanDto? activeLoan, bool isDeletingAccount, }); } @@ -107,7 +107,7 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> freezed == activeTransaction ? _value.activeTransaction : activeTransaction // ignore: cast_nullable_to_non_nullable - as Transaction?, + as TransactionDto?, accounts: null == accounts ? _value.accounts @@ -117,17 +117,17 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> null == recurringTransactions ? _value.recurringTransactions : recurringTransactions // ignore: cast_nullable_to_non_nullable - as List, + as List, transactions: null == transactions ? _value.transactions : transactions // ignore: cast_nullable_to_non_nullable - as List, + as List, transactionTemplates: null == transactionTemplates ? _value.transactionTemplates : transactionTemplates // ignore: cast_nullable_to_non_nullable - as List, + as List, beneficiaries: null == beneficiaries ? _value.beneficiaries @@ -142,22 +142,22 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> null == budgets ? _value.budgets : budgets // ignore: cast_nullable_to_non_nullable - as List, + as List, activeBudget: freezed == activeBudget ? _value.activeBudget : activeBudget // ignore: cast_nullable_to_non_nullable - as Budget?, + as BudgetsDto?, loans: null == loans ? _value.loans : loans // ignore: cast_nullable_to_non_nullable - as List, + as List, activeLoan: freezed == activeLoan ? _value.activeLoan : activeLoan // ignore: cast_nullable_to_non_nullable - as Loan?, + as LoanDto?, isDeletingAccount: null == isDeletingAccount ? _value.isDeletingAccount @@ -181,17 +181,17 @@ abstract class _$$CoreStateImplCopyWith<$Res> $Res call({ OkanePage activePage, int? activeAccountIndex, - Transaction? activeTransaction, + TransactionDto? activeTransaction, List accounts, - List recurringTransactions, - List transactions, - List transactionTemplates, + List recurringTransactions, + List transactions, + List transactionTemplates, List beneficiaries, List expenseCategories, - List budgets, - Budget? activeBudget, - List loans, - Loan? activeLoan, + List budgets, + BudgetsDto? activeBudget, + List loans, + LoanDto? activeLoan, bool isDeletingAccount, }); } @@ -239,7 +239,7 @@ class __$$CoreStateImplCopyWithImpl<$Res> freezed == activeTransaction ? _value.activeTransaction : activeTransaction // ignore: cast_nullable_to_non_nullable - as Transaction?, + as TransactionDto?, accounts: null == accounts ? _value._accounts @@ -249,17 +249,17 @@ class __$$CoreStateImplCopyWithImpl<$Res> null == recurringTransactions ? _value._recurringTransactions : recurringTransactions // ignore: cast_nullable_to_non_nullable - as List, + as List, transactions: null == transactions ? _value._transactions : transactions // ignore: cast_nullable_to_non_nullable - as List, + as List, transactionTemplates: null == transactionTemplates ? _value._transactionTemplates : transactionTemplates // ignore: cast_nullable_to_non_nullable - as List, + as List, beneficiaries: null == beneficiaries ? _value._beneficiaries @@ -274,22 +274,22 @@ class __$$CoreStateImplCopyWithImpl<$Res> null == budgets ? _value._budgets : budgets // ignore: cast_nullable_to_non_nullable - as List, + as List, activeBudget: freezed == activeBudget ? _value.activeBudget : activeBudget // ignore: cast_nullable_to_non_nullable - as Budget?, + as BudgetsDto?, loans: null == loans ? _value._loans : loans // ignore: cast_nullable_to_non_nullable - as List, + as List, activeLoan: freezed == activeLoan ? _value.activeLoan : activeLoan // ignore: cast_nullable_to_non_nullable - as Loan?, + as LoanDto?, isDeletingAccount: null == isDeletingAccount ? _value.isDeletingAccount @@ -308,14 +308,14 @@ class _$CoreStateImpl implements _CoreState { this.activeAccountIndex, this.activeTransaction = null, final List accounts = const [], - final List recurringTransactions = const [], - final List transactions = const [], - final List transactionTemplates = const [], + final List recurringTransactions = const [], + final List transactions = const [], + final List transactionTemplates = const [], final List beneficiaries = const [], final List expenseCategories = const [], - final List budgets = const [], + final List budgets = const [], this.activeBudget = null, - final List loans = const [], + final List loans = const [], this.activeLoan = null, this.isDeletingAccount = false, }) : _accounts = accounts, @@ -334,7 +334,7 @@ class _$CoreStateImpl implements _CoreState { final int? activeAccountIndex; @override @JsonKey() - final Transaction? activeTransaction; + final TransactionDto? activeTransaction; final List _accounts; @override @JsonKey() @@ -344,29 +344,29 @@ class _$CoreStateImpl implements _CoreState { return EqualUnmodifiableListView(_accounts); } - final List _recurringTransactions; + final List _recurringTransactions; @override @JsonKey() - List get recurringTransactions { + List get recurringTransactions { if (_recurringTransactions is EqualUnmodifiableListView) return _recurringTransactions; // ignore: implicit_dynamic_type return EqualUnmodifiableListView(_recurringTransactions); } - final List _transactions; + final List _transactions; @override @JsonKey() - List get transactions { + List get transactions { if (_transactions is EqualUnmodifiableListView) return _transactions; // ignore: implicit_dynamic_type return EqualUnmodifiableListView(_transactions); } - final List _transactionTemplates; + final List _transactionTemplates; @override @JsonKey() - List get transactionTemplates { + List get transactionTemplates { if (_transactionTemplates is EqualUnmodifiableListView) return _transactionTemplates; // ignore: implicit_dynamic_type @@ -392,10 +392,10 @@ class _$CoreStateImpl implements _CoreState { return EqualUnmodifiableListView(_expenseCategories); } - final List _budgets; + final List _budgets; @override @JsonKey() - List get budgets { + List get budgets { if (_budgets is EqualUnmodifiableListView) return _budgets; // ignore: implicit_dynamic_type return EqualUnmodifiableListView(_budgets); @@ -403,11 +403,11 @@ class _$CoreStateImpl implements _CoreState { @override @JsonKey() - final Budget? activeBudget; - final List _loans; + final BudgetsDto? activeBudget; + final List _loans; @override @JsonKey() - List get loans { + List get loans { if (_loans is EqualUnmodifiableListView) return _loans; // ignore: implicit_dynamic_type return EqualUnmodifiableListView(_loans); @@ -415,7 +415,7 @@ class _$CoreStateImpl implements _CoreState { @override @JsonKey() - final Loan? activeLoan; + final LoanDto? activeLoan; @override @JsonKey() final bool isDeletingAccount; @@ -497,17 +497,17 @@ abstract class _CoreState implements CoreState { const factory _CoreState({ final OkanePage activePage, final int? activeAccountIndex, - final Transaction? activeTransaction, + final TransactionDto? activeTransaction, final List accounts, - final List recurringTransactions, - final List transactions, - final List transactionTemplates, + final List recurringTransactions, + final List transactions, + final List transactionTemplates, final List beneficiaries, final List expenseCategories, - final List budgets, - final Budget? activeBudget, - final List loans, - final Loan? activeLoan, + final List budgets, + final BudgetsDto? activeBudget, + final List loans, + final LoanDto? activeLoan, final bool isDeletingAccount, }) = _$CoreStateImpl; @@ -516,27 +516,27 @@ abstract class _CoreState implements CoreState { @override int? get activeAccountIndex; @override - Transaction? get activeTransaction; + TransactionDto? get activeTransaction; @override List get accounts; @override - List get recurringTransactions; + List get recurringTransactions; @override - List get transactions; + List get transactions; @override - List get transactionTemplates; + List get transactionTemplates; @override List get beneficiaries; @override List get expenseCategories; @override - List get budgets; + List get budgets; @override - Budget? get activeBudget; + BudgetsDto? get activeBudget; @override - List get loans; + List get loans; @override - Loan? get activeLoan; + LoanDto? get activeLoan; @override bool get isDeletingAccount; @override diff --git a/lib/ui/utils.dart b/lib/ui/utils.dart index 3f0af93..8beb229 100644 --- a/lib/ui/utils.dart +++ b/lib/ui/utils.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:okane/database/collections/template.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/state/core.dart'; @@ -47,8 +47,10 @@ Future showDialogOrModal({ }; } -Future selectTransactionTemplate(BuildContext context) { - return showDialogOrModal( +Future selectTransactionTemplate( + BuildContext context, +) { + return showDialogOrModal( context: context, builder: (context) { return BlocBuilder( @@ -64,7 +66,7 @@ Future selectTransactionTemplate(BuildContext context) { itemCount: state.transactionTemplates.length, itemBuilder: (context, index) => ListTile( - title: Text(state.transactionTemplates[index].name), + title: Text(state.transactionTemplates[index].template.name), onTap: () { Navigator.of( context, @@ -142,3 +144,17 @@ Future confirm(BuildContext context, String title, String body) async { ); return result ?? false; } + +bool isTransactionDue(RecurringTransaction r, DateTime now) { + if (r.lastExecution == null) { + return true; + } + + final expectedNextExecution = r.lastExecution!.add(Duration(days: r.days)); + if (now.isAfter(expectedNextExecution)) { + return true; + } + + return now.difference(expectedNextExecution).inDays.abs() <= + (r.days * 0.5).toInt(); +} diff --git a/lib/ui/widgets/add_expense_category.dart b/lib/ui/widgets/add_expense_category.dart index ae464ac..70fa798 100644 --- a/lib/ui/widgets/add_expense_category.dart +++ b/lib/ui/widgets/add_expense_category.dart @@ -1,7 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:okane/database/collections/expense_category.dart'; -import 'package:okane/database/database.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; @@ -50,12 +48,14 @@ class AddExpenseCategoryState extends State { Spacer(), OutlinedButton( onPressed: () async { + // TODO + /* final category = ExpenseCategory() ..name = _categoryNameController.text; await upsertExpenseCategory(category); _categoryNameController.text = ""; - Navigator.of(context).pop(category); + Navigator.of(context).pop(category);*/ }, child: Text(t.modals.add), ), diff --git a/lib/ui/widgets/add_template.dart b/lib/ui/widgets/add_template.dart index 2f6f6cd..fc40542 100644 --- a/lib/ui/widgets/add_template.dart +++ b/lib/ui/widgets/add_template.dart @@ -1,12 +1,8 @@ +import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/expense_category.dart'; -import 'package:okane/database/collections/recurrent.dart'; -import 'package:okane/database/collections/template.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/transaction.dart'; @@ -68,6 +64,7 @@ class _AddTransactionTemplateWidgetState return; } + final db = GetIt.I.get(); Beneficiary? beneficiary = _selectedBeneficiary?.item; if (beneficiary == null || getBeneficiaryName(beneficiary) != beneficiaryName) { @@ -101,12 +98,12 @@ class _AddTransactionTemplateWidgetState if (result == null || !result) { return; } - - beneficiary = - Beneficiary() - ..name = beneficiaryName - ..type = BeneficiaryType.other; - await upsertBeneficiary(beneficiary); + beneficiary = await db.beneficiariesDao.upsertBeneficiary( + BeneficiariesCompanion( + name: Value(beneficiaryName), + type: Value(BeneficiaryType.other), + ), + ); } final factor = switch (_selectedDirection) { @@ -114,15 +111,16 @@ class _AddTransactionTemplateWidgetState TransactionDirection.receive => 1, }; final amount = factor * double.parse(_amountTextController.text).abs(); - final template = - TransactionTemplate() - ..name = _templateNameController.text - ..account.value = widget.activeAccountItem - ..beneficiary.value = beneficiary - ..expenseCategory.value = _expenseCategory - ..recurring = _isRecurring - ..amount = amount; - await upsertTransactionTemplate(template); + final template = await db.transactionTemplatesDao.upsertTemplate( + TransactionTemplatesCompanion( + name: Value(_templateNameController.text), + accountId: Value(widget.activeAccountItem.id), + beneficiaryId: Value(beneficiary.id), + expenseCategoryId: Value(_expenseCategory?.id), + recurring: Value(_isRecurring), + amount: Value(amount), + ), + ); if (_isRecurring) { final days = switch (_selectedPeriod) { @@ -131,13 +129,14 @@ class _AddTransactionTemplateWidgetState Period.months => _periodSize * 31, Period.years => _periodSize * 365, }; - final recurringTransaction = - RecurringTransaction() - ..account.value = widget.activeAccountItem - ..template.value = template - ..lastExecution = null - ..days = days; - await upsertRecurringTransaction(recurringTransaction); + await db.recurringTransactionsDao.upsertRecurringTransaction( + RecurringTransactionsCompanion( + accountId: Value(widget.activeAccountItem.id), + templateId: Value(template.id), + lastExecution: Value(null), + days: Value(days), + ), + ); } widget.onAdd(); } @@ -190,8 +189,7 @@ class _AddTransactionTemplateWidgetState .where((el) { final bloc = GetIt.I.get(); if (el.type == BeneficiaryType.account) { - return el.account.value?.id != - bloc.activeAccount?.id; + return el.accountId != bloc.activeAccount?.id; } return true; }) diff --git a/lib/ui/widgets/add_transaction.dart b/lib/ui/widgets/add_transaction.dart index f36b01e..c920dfd 100644 --- a/lib/ui/widgets/add_transaction.dart +++ b/lib/ui/widgets/add_transaction.dart @@ -1,12 +1,8 @@ +import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; -import 'package:okane/database/collections/account.dart'; -import 'package:okane/database/collections/beneficiary.dart'; -import 'package:okane/database/collections/expense_category.dart'; -import 'package:okane/database/collections/template.dart'; -import 'package:okane/database/collections/transaction.dart'; -import 'package:okane/database/database.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/transaction.dart'; @@ -14,14 +10,14 @@ import 'package:okane/ui/utils.dart'; import 'package:okane/ui/widgets/add_expense_category.dart'; import 'package:searchfield/searchfield.dart'; -typedef AddTransactionCallback = void Function(Transaction); +typedef AddTransactionCallback = void Function(TransactionDto); class AddTransactionWidget extends StatefulWidget { final AddTransactionCallback onAdd; final Account activeAccountItem; - final TransactionTemplate? template; + final TransactionTemplateDto? template; const AddTransactionWidget({ super.key, @@ -51,6 +47,8 @@ class _AddTransactionWidgetState extends State { void initState() { super.initState(); + // TODO + /* if (widget.template != null) { _selectedDirection = widget.template!.amount > 0 @@ -58,12 +56,12 @@ class _AddTransactionWidgetState extends State { : TransactionDirection.send; _amountTextController.text = widget.template!.amount.toString(); _beneficiaryTextController.text = - widget.template!.beneficiary.value!.name; + widget.template!; _selectedBeneficiary = SearchFieldListItem( getBeneficiaryName(widget.template!.beneficiary.value!), item: widget.template!.beneficiary.value!, ); - } + }*/ } String getBeneficiaryName(Beneficiary item) { @@ -81,6 +79,7 @@ class _AddTransactionWidgetState extends State { return; } + final db = GetIt.I.get(); Beneficiary? beneficiary = _selectedBeneficiary?.item; if (beneficiary == null || getBeneficiaryName(beneficiary) != beneficiaryName) { @@ -115,11 +114,12 @@ class _AddTransactionWidgetState extends State { return; } - beneficiary = - Beneficiary() - ..name = beneficiaryName - ..type = BeneficiaryType.other; - await upsertBeneficiary(beneficiary); + beneficiary = await db.beneficiariesDao.upsertBeneficiary( + BeneficiariesCompanion( + name: Value(beneficiaryName), + type: Value(BeneficiaryType.other), + ), + ); } final factor = switch (_selectedDirection) { @@ -127,30 +127,38 @@ class _AddTransactionWidgetState extends State { TransactionDirection.receive => 1, }; final amount = factor * double.parse(_amountTextController.text).abs(); - final transaction = - Transaction() - ..account.value = widget.activeAccountItem - ..beneficiary.value = beneficiary - ..amount = amount - ..tags = [] - ..expenseCategory.value = _expenseCategory - ..date = _selectedDate; - await upsertTransaction(transaction); + final rawTransaction = TransactionsCompanion( + accountId: Value(widget.activeAccountItem.id), + beneficiaryId: Value(beneficiary.id), + amount: Value(amount), + // tags: [], + expenseCategoryId: Value(_expenseCategory?.id), + date: Value(_selectedDate), + ); + final transaction = await db.transactionsDao.upsertTransaction( + rawTransaction, + ); if (beneficiary.type == BeneficiaryType.account) { - final otherTransaction = - Transaction() - ..account.value = beneficiary.account.value! - ..beneficiary.value = await getAccountBeneficiary( - widget.activeAccountItem, - ) - ..date = _selectedDate - ..expenseCategory.value = _expenseCategory - ..amount = -1 * amount; - await upsertTransaction(otherTransaction); + final otherTransaction = rawTransaction.copyWith( + accountId: Value(beneficiary.accountId!), + beneficiaryId: Value( + (await db.beneficiariesDao.getAccountBeneficiary( + widget.activeAccountItem, + )).id, + ), + amount: Value(-1 * rawTransaction.amount.value), + ); + await db.transactionsDao.upsertTransaction(otherTransaction); } - widget.onAdd(transaction); + widget.onAdd( + TransactionDto( + transaction: transaction, + beneficiary: beneficiary, + expenseCategory: _expenseCategory, + ), + ); } @override @@ -167,17 +175,17 @@ class _AddTransactionWidgetState extends State { return; } - _amountTextController.text = template.amount.toString(); + _amountTextController.text = template.template.amount.toString(); _selectedDirection = - template.amount > 0 + template.template.amount > 0 ? TransactionDirection.receive : TransactionDirection.send; _selectedBeneficiary = SearchFieldListItem( - getBeneficiaryName(template.beneficiary.value!), - item: template.beneficiary.value!, + getBeneficiaryName(template.beneficiary), + item: template.beneficiary, ); _beneficiaryTextController.text = getBeneficiaryName( - template.beneficiary.value!, + template.beneficiary, ); }, child: Text(t.pages.transactions.addTransaction.useTemplate), @@ -216,7 +224,7 @@ class _AddTransactionWidgetState extends State { .where((el) { final bloc = GetIt.I.get(); if (el.type == BeneficiaryType.account) { - return el.account.value?.id.toInt() == + return el.accountId == bloc.activeAccount?.id.toInt(); } return true; diff --git a/lib/ui/widgets/transaction_card.dart b/lib/ui/widgets/transaction_card.dart index e0eee4c..9ca06b8 100644 --- a/lib/ui/widgets/transaction_card.dart +++ b/lib/ui/widgets/transaction_card.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:okane/database/collections/transaction.dart'; +import 'package:okane/database/sqlite.dart'; import 'package:okane/ui/utils.dart'; import 'package:okane/ui/widgets/image_wrapper.dart'; @@ -13,7 +13,7 @@ class TransactionCard extends StatelessWidget { this.subtitle, }); - final Transaction transaction; + final TransactionDto transaction; final VoidCallback onTap; @@ -24,19 +24,22 @@ class TransactionCard extends StatelessWidget { child: ListTile( onTap: onTap, leading: ImageWrapper( - title: transaction.beneficiary.value!.name, - path: transaction.beneficiary.value!.imagePath, + title: transaction.beneficiary.name, + path: transaction.beneficiary.imagePath, ), - trailing: Text(formatDateTime(transaction.date)), - title: Text(transaction.beneficiary.value!.name), + trailing: Text(formatDateTime(transaction.transaction.date)), + title: Text(transaction.beneficiary.name), subtitle: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - formatCurrency(transaction.amount), + formatCurrency(transaction.transaction.amount), style: TextStyle( - color: transaction.amount < 0 ? Colors.red : Colors.green, + color: + transaction.transaction.amount < 0 + ? Colors.red + : Colors.green, ), ), if (subtitle != null) subtitle!, diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index b898c8c..2c1ec4f 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,10 +6,10 @@ #include "generated_plugin_registrant.h" -#include +#include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) isar_flutter_libs_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "IsarFlutterLibsPlugin"); - isar_flutter_libs_plugin_register_with_registrar(isar_flutter_libs_registrar); + g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin"); + sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index cb083af..7ea2a80 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,7 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST - isar_flutter_libs + sqlite3_flutter_libs ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/pubspec.lock b/pubspec.lock index e565e15..d751cfe 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,23 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab" url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "76.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.3" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.11.0" args: dependency: transitive description: @@ -121,6 +126,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -129,6 +142,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -197,18 +218,34 @@ packages: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820" url: "https://pub.dev" source: hosted - version: "2.3.2" - dartx: - dependency: transitive + version: "2.3.8" + drift: + dependency: "direct main" description: - name: dartx - sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" + name: drift + sha256: b584ddeb2b74436735dd2cf746d2d021e19a9a6770f409212fd5cbc2814ada85 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "2.26.1" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: "0d3f8b33b76cf1c6a82ee34d9511c40957549c4674b8f1688609e6d6c7306588" + url: "https://pub.dev" + source: hosted + version: "2.26.0" + drift_flutter: + dependency: "direct main" + description: + name: drift_flutter + sha256: "0cadbf3b8733409a6cf61d18ba2e94e149df81df7de26f48ae0695b48fd71922" + url: "https://pub.dev" + source: hosted + version: "0.2.4" equatable: dependency: transitive description: @@ -392,30 +429,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" - isar: - dependency: "direct main" - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: "direct main" - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_generator: - dependency: "direct dev" - description: - name: isar_generator - sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -488,6 +501,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + macros: + dependency: transitive + description: + name: macros + sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656" + url: "https://pub.dev" + source: hosted + version: "0.1.3-main.0" matcher: dependency: transitive description: @@ -648,6 +669,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" searchfield: dependency: "direct main" description: @@ -781,6 +810,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.1" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e" + url: "https://pub.dev" + source: hosted + version: "2.7.5" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14" + url: "https://pub.dev" + source: hosted + version: "0.5.32" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "27dd0a9f0c02e22ac0eb42a23df9ea079ce69b52bb4a3b478d64e0ef34a263ee" + url: "https://pub.dev" + source: hosted + version: "0.41.0" stack_trace: dependency: transitive description: @@ -829,14 +882,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.4" - time: - dependency: transitive - description: - name: time - sha256: "370572cf5d1e58adcb3e354c47515da3f7469dac3a95b447117e728e7be6f461" - url: "https://pub.dev" - source: hosted - version: "2.1.5" timing: dependency: transitive description: @@ -917,14 +962,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - xxh3: - dependency: transitive - description: - name: xxh3 - sha256: "399a0438f5d426785723c99da6b16e136f4953fb1e9db0bf270bd41dd4619916" - url: "https://pub.dev" - source: hosted - version: "1.2.0" yaml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 09cf6e0..3c64c58 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: okane description: "A cross-platform finance tracker." -publish_to: 'none' +publish_to: "none" version: 1.0.0+3 environment: @@ -21,13 +21,13 @@ dependencies: path: ^1.9.1 fl_chart: ^0.71.0 flutter_picker_plus: ^1.5.1 - isar: ^3.1.0+1 - isar_flutter_libs: ^3.1.0+1 shared_preferences: ^2.5.3 json_annotation: ^4.9.0 more: 4.5.0 slang: ^3.0.0 slang_flutter: ^3.0.0 + drift: ^2.26.1 + drift_flutter: ^0.2.4 dev_dependencies: flutter_test: @@ -35,9 +35,9 @@ dev_dependencies: flutter_lints: ^5.0.0 build_runner: ^2.4.13 freezed: 2.5.0 - isar_generator: ^3.1.0+1 json_serializable: ^6.4.0 slang_build_runner: ^3.0.0 + drift_dev: ^2.20.1 flutter: uses-material-design: true