Start migration to sqlite using drift

This commit is contained in:
2025-05-17 23:51:51 +02:00
parent 4d267eff88
commit 5dc474407c
50 changed files with 9549 additions and 6972 deletions

View File

@@ -1,10 +0,0 @@
import 'package:isar/isar.dart';
part 'account.g.dart';
@collection
class Account {
Id id = Isar.autoIncrement;
String? name;
}

View File

@@ -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<Account> 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<int> offsets,
Map<Type, List<int>> 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<int> offsets,
Map<Type, List<int>> allOffsets,
) {
writer.writeString(offsets[0], object.name);
}
Account _accountDeserialize(
Id id,
IsarReader reader,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
final object = Account();
object.id = id;
object.name = reader.readStringOrNull(offsets[0]);
return object;
}
P _accountDeserializeProp<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _accountGetLinks(Account object) {
return [];
}
void _accountAttach(IsarCollection<dynamic> col, Id id, Account object) {
object.id = id;
}
extension AccountQueryWhereSort on QueryBuilder<Account, Account, QWhere> {
QueryBuilder<Account, Account, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension AccountQueryWhere on QueryBuilder<Account, Account, QWhereClause> {
QueryBuilder<Account, Account, QAfterWhereClause> idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<Account, Account, QAfterWhereClause> 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<Account, Account, QAfterWhereClause> idGreaterThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<Account, Account, QAfterWhereClause> idLessThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<Account, Account, QAfterWhereClause> 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<Account, Account, QFilterCondition> {
QueryBuilder<Account, Account, QAfterFilterCondition> idEqualTo(Id value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<Account, Account, 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<Account, Account, 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<Account, Account, 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<Account, Account, QAfterFilterCondition> nameIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
const FilterCondition.isNull(property: r'name'),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
const FilterCondition.isNotNull(property: r'name'),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameEqualTo(
String? value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> nameStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.startsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.endsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameContains(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.contains(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameMatches(
String pattern, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.matches(
property: r'name',
wildcard: pattern,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'name', value: ''),
);
});
}
QueryBuilder<Account, Account, QAfterFilterCondition> nameIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(property: r'name', value: ''),
);
});
}
}
extension AccountQueryObject
on QueryBuilder<Account, Account, QFilterCondition> {}
extension AccountQueryLinks
on QueryBuilder<Account, Account, QFilterCondition> {}
extension AccountQuerySortBy on QueryBuilder<Account, Account, QSortBy> {
QueryBuilder<Account, Account, QAfterSortBy> sortByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<Account, Account, QAfterSortBy> sortByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
}
extension AccountQuerySortThenBy
on QueryBuilder<Account, Account, QSortThenBy> {
QueryBuilder<Account, Account, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<Account, Account, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
QueryBuilder<Account, Account, QAfterSortBy> thenByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<Account, Account, QAfterSortBy> thenByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
}
extension AccountQueryWhereDistinct
on QueryBuilder<Account, Account, QDistinct> {
QueryBuilder<Account, Account, QDistinct> distinctByName({
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'name', caseSensitive: caseSensitive);
});
}
}
extension AccountQueryProperty
on QueryBuilder<Account, Account, QQueryProperty> {
QueryBuilder<Account, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<Account, String?, QQueryOperations> nameProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'name');
});
}
}

View File

@@ -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<Account>();
String? imagePath;
}

View File

@@ -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<Beneficiary> 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<int> offsets,
Map<Type, List<int>> 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<int> offsets,
Map<Type, List<int>> 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<int> offsets,
Map<Type, List<int>> 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<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _beneficiaryGetLinks(Beneficiary object) {
return [object.account];
}
void _beneficiaryAttach(
IsarCollection<dynamic> col,
Id id,
Beneficiary object,
) {
object.id = id;
object.account.attach(col, col.isar.collection<Account>(), r'account', id);
}
extension BeneficiaryQueryWhereSort
on QueryBuilder<Beneficiary, Beneficiary, QWhere> {
QueryBuilder<Beneficiary, Beneficiary, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension BeneficiaryQueryWhere
on QueryBuilder<Beneficiary, Beneficiary, QWhereClause> {
QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> 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<Beneficiary, Beneficiary, QAfterWhereClause> idGreaterThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> idLessThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> 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<Beneficiary, Beneficiary, QFilterCondition> {
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> idEqualTo(
Id value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, 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<Beneficiary, Beneficiary, 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<Beneficiary, Beneficiary, 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<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
const FilterCondition.isNull(property: r'imagePath'),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
const FilterCondition.isNotNull(property: r'imagePath'),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathEqualTo(String? value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(
property: r'imagePath',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
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<Beneficiary, Beneficiary, QAfterFilterCondition>
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<Beneficiary, Beneficiary, QAfterFilterCondition>
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<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathStartsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.startsWith(
property: r'imagePath',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathEndsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.endsWith(
property: r'imagePath',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.contains(
property: r'imagePath',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.matches(
property: r'imagePath',
wildcard: pattern,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'imagePath', value: ''),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
imagePathIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(property: r'imagePath', value: ''),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> nameEqualTo(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> nameStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.startsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> nameEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.endsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> nameContains(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.contains(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> nameMatches(
String pattern, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.matches(
property: r'name',
wildcard: pattern,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> nameIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'name', value: ''),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
nameIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(property: r'name', value: ''),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> typeEqualTo(
BeneficiaryType value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'type', value: value),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> typeGreaterThan(
BeneficiaryType value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(
include: include,
property: r'type',
value: value,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> typeLessThan(
BeneficiaryType value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.lessThan(
include: include,
property: r'type',
value: value,
),
);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QFilterCondition> {}
extension BeneficiaryQueryLinks
on QueryBuilder<Beneficiary, Beneficiary, QFilterCondition> {
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> account(
FilterQuery<Account> q,
) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'account');
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition>
accountIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'account', 0, true, 0, true);
});
}
}
extension BeneficiaryQuerySortBy
on QueryBuilder<Beneficiary, Beneficiary, QSortBy> {
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> sortByImagePath() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'imagePath', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> sortByImagePathDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'imagePath', Sort.desc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> sortByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> sortByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> sortByType() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'type', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> sortByTypeDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'type', Sort.desc);
});
}
}
extension BeneficiaryQuerySortThenBy
on QueryBuilder<Beneficiary, Beneficiary, QSortThenBy> {
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByImagePath() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'imagePath', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByImagePathDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'imagePath', Sort.desc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByType() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'type', Sort.asc);
});
}
QueryBuilder<Beneficiary, Beneficiary, QAfterSortBy> thenByTypeDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'type', Sort.desc);
});
}
}
extension BeneficiaryQueryWhereDistinct
on QueryBuilder<Beneficiary, Beneficiary, QDistinct> {
QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByImagePath({
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'imagePath', caseSensitive: caseSensitive);
});
}
QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByName({
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'name', caseSensitive: caseSensitive);
});
}
QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByType() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'type');
});
}
}
extension BeneficiaryQueryProperty
on QueryBuilder<Beneficiary, Beneficiary, QQueryProperty> {
QueryBuilder<Beneficiary, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<Beneficiary, String?, QQueryOperations> imagePathProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'imagePath');
});
}
QueryBuilder<Beneficiary, String, QQueryOperations> nameProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'name');
});
}
QueryBuilder<Beneficiary, BeneficiaryType, QQueryOperations> typeProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'type');
});
}
}

View File

@@ -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<ExpenseCategory>();
}
@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<Account>();
final items = IsarLinks<BudgetItem>();
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +0,0 @@
import 'package:isar/isar.dart';
part 'expense_category.g.dart';
@collection
class ExpenseCategory {
Id id = Isar.autoIncrement;
late String name;
}

View File

@@ -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<ExpenseCategory> 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<int> offsets,
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
bytesCount += 3 + object.name.length * 3;
return bytesCount;
}
void _expenseCategorySerialize(
ExpenseCategory object,
IsarWriter writer,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
writer.writeString(offsets[0], object.name);
}
ExpenseCategory _expenseCategoryDeserialize(
Id id,
IsarReader reader,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
final object = ExpenseCategory();
object.id = id;
object.name = reader.readString(offsets[0]);
return object;
}
P _expenseCategoryDeserializeProp<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _expenseCategoryGetLinks(ExpenseCategory object) {
return [];
}
void _expenseCategoryAttach(
IsarCollection<dynamic> col,
Id id,
ExpenseCategory object,
) {
object.id = id;
}
extension ExpenseCategoryQueryWhereSort
on QueryBuilder<ExpenseCategory, ExpenseCategory, QWhere> {
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension ExpenseCategoryQueryWhere
on QueryBuilder<ExpenseCategory, ExpenseCategory, QWhereClause> {
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterWhereClause> idEqualTo(
Id id,
) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterWhereClause>
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<ExpenseCategory, ExpenseCategory, QAfterWhereClause>
idGreaterThan(Id id, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterWhereClause> idLessThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterWhereClause> 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<ExpenseCategory, ExpenseCategory, QFilterCondition> {
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
idEqualTo(Id value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, 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<ExpenseCategory, ExpenseCategory, 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<ExpenseCategory, ExpenseCategory, 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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameEqualTo(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameStartsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.startsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameEndsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.endsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.contains(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.matches(
property: r'name',
wildcard: pattern,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'name', value: ''),
);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition>
nameIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(property: r'name', value: ''),
);
});
}
}
extension ExpenseCategoryQueryObject
on QueryBuilder<ExpenseCategory, ExpenseCategory, QFilterCondition> {}
extension ExpenseCategoryQueryLinks
on QueryBuilder<ExpenseCategory, ExpenseCategory, QFilterCondition> {}
extension ExpenseCategoryQuerySortBy
on QueryBuilder<ExpenseCategory, ExpenseCategory, QSortBy> {
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy> sortByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy>
sortByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
}
extension ExpenseCategoryQuerySortThenBy
on QueryBuilder<ExpenseCategory, ExpenseCategory, QSortThenBy> {
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy> thenByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy>
thenByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
}
extension ExpenseCategoryQueryWhereDistinct
on QueryBuilder<ExpenseCategory, ExpenseCategory, QDistinct> {
QueryBuilder<ExpenseCategory, ExpenseCategory, QDistinct> distinctByName({
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'name', caseSensitive: caseSensitive);
});
}
}
extension ExpenseCategoryQueryProperty
on QueryBuilder<ExpenseCategory, ExpenseCategory, QQueryProperty> {
QueryBuilder<ExpenseCategory, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<ExpenseCategory, String, QQueryOperations> nameProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'name');
});
}
}

View File

@@ -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<Beneficiary>();
final changes = IsarLinks<LoanChange>();
}
@collection
class LoanChange {
Id id = Isar.autoIncrement;
late double amount;
late DateTime date;
}

View File

@@ -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<Loan> 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<int> offsets,
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
return bytesCount;
}
void _loanSerialize(
Loan object,
IsarWriter writer,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {}
Loan _loanDeserialize(
Id id,
IsarReader reader,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
final object = Loan();
object.id = id;
return object;
}
P _loanDeserializeProp<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> allOffsets,
) {
switch (propertyId) {
default:
throw IsarError('Unknown property with id $propertyId');
}
}
Id _loanGetId(Loan object) {
return object.id;
}
List<IsarLinkBase<dynamic>> _loanGetLinks(Loan object) {
return [object.beneficiary, object.changes];
}
void _loanAttach(IsarCollection<dynamic> col, Id id, Loan object) {
object.id = id;
object.beneficiary.attach(
col,
col.isar.collection<Beneficiary>(),
r'beneficiary',
id,
);
object.changes.attach(col, col.isar.collection<LoanChange>(), r'changes', id);
}
extension LoanQueryWhereSort on QueryBuilder<Loan, Loan, QWhere> {
QueryBuilder<Loan, Loan, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension LoanQueryWhere on QueryBuilder<Loan, Loan, QWhereClause> {
QueryBuilder<Loan, Loan, QAfterWhereClause> idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<Loan, Loan, QAfterWhereClause> 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<Loan, Loan, QAfterWhereClause> idGreaterThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<Loan, Loan, QAfterWhereClause> idLessThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<Loan, Loan, QAfterWhereClause> 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<Loan, Loan, QFilterCondition> {
QueryBuilder<Loan, Loan, QAfterFilterCondition> idEqualTo(Id value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<Loan, Loan, 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<Loan, Loan, 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<Loan, Loan, 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,
),
);
});
}
}
extension LoanQueryObject on QueryBuilder<Loan, Loan, QFilterCondition> {}
extension LoanQueryLinks on QueryBuilder<Loan, Loan, QFilterCondition> {
QueryBuilder<Loan, Loan, QAfterFilterCondition> beneficiary(
FilterQuery<Beneficiary> q,
) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'beneficiary');
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> beneficiaryIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'beneficiary', 0, true, 0, true);
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> changes(
FilterQuery<LoanChange> q,
) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'changes');
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> changesLengthEqualTo(
int length,
) {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'changes', length, true, length, true);
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> changesIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'changes', 0, true, 0, true);
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> changesIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'changes', 0, false, 999999, true);
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> changesLengthLessThan(
int length, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'changes', 0, true, length, include);
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> changesLengthGreaterThan(
int length, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'changes', length, include, 999999, true);
});
}
QueryBuilder<Loan, Loan, QAfterFilterCondition> 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<Loan, Loan, QSortBy> {}
extension LoanQuerySortThenBy on QueryBuilder<Loan, Loan, QSortThenBy> {
QueryBuilder<Loan, Loan, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<Loan, Loan, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
}
extension LoanQueryWhereDistinct on QueryBuilder<Loan, Loan, QDistinct> {}
extension LoanQueryProperty on QueryBuilder<Loan, Loan, QQueryProperty> {
QueryBuilder<Loan, int, QQueryOperations> 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<LoanChange> 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<int> offsets,
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
return bytesCount;
}
void _loanChangeSerialize(
LoanChange object,
IsarWriter writer,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
writer.writeDouble(offsets[0], object.amount);
writer.writeDateTime(offsets[1], object.date);
}
LoanChange _loanChangeDeserialize(
Id id,
IsarReader reader,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
final object = LoanChange();
object.amount = reader.readDouble(offsets[0]);
object.date = reader.readDateTime(offsets[1]);
object.id = id;
return object;
}
P _loanChangeDeserializeProp<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _loanChangeGetLinks(LoanChange object) {
return [];
}
void _loanChangeAttach(IsarCollection<dynamic> col, Id id, LoanChange object) {
object.id = id;
}
extension LoanChangeQueryWhereSort
on QueryBuilder<LoanChange, LoanChange, QWhere> {
QueryBuilder<LoanChange, LoanChange, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension LoanChangeQueryWhere
on QueryBuilder<LoanChange, LoanChange, QWhereClause> {
QueryBuilder<LoanChange, LoanChange, QAfterWhereClause> idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<LoanChange, LoanChange, QAfterWhereClause> 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<LoanChange, LoanChange, QAfterWhereClause> idGreaterThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterWhereClause> idLessThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterWhereClause> 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<LoanChange, LoanChange, QFilterCondition> {
QueryBuilder<LoanChange, LoanChange, QAfterFilterCondition> 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<LoanChange, LoanChange, QAfterFilterCondition> 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<LoanChange, LoanChange, QAfterFilterCondition> 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<LoanChange, LoanChange, QAfterFilterCondition> 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<LoanChange, LoanChange, QAfterFilterCondition> dateEqualTo(
DateTime value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'date', value: value),
);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterFilterCondition> dateGreaterThan(
DateTime value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(
include: include,
property: r'date',
value: value,
),
);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterFilterCondition> dateLessThan(
DateTime value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.lessThan(
include: include,
property: r'date',
value: value,
),
);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterFilterCondition> 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<LoanChange, LoanChange, QAfterFilterCondition> idEqualTo(
Id value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<LoanChange, LoanChange, 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<LoanChange, LoanChange, 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<LoanChange, LoanChange, 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,
),
);
});
}
}
extension LoanChangeQueryObject
on QueryBuilder<LoanChange, LoanChange, QFilterCondition> {}
extension LoanChangeQueryLinks
on QueryBuilder<LoanChange, LoanChange, QFilterCondition> {}
extension LoanChangeQuerySortBy
on QueryBuilder<LoanChange, LoanChange, QSortBy> {
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> sortByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.asc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> sortByAmountDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.desc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> sortByDate() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.asc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> sortByDateDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.desc);
});
}
}
extension LoanChangeQuerySortThenBy
on QueryBuilder<LoanChange, LoanChange, QSortThenBy> {
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> thenByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.asc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> thenByAmountDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.desc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> thenByDate() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.asc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> thenByDateDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.desc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<LoanChange, LoanChange, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
}
extension LoanChangeQueryWhereDistinct
on QueryBuilder<LoanChange, LoanChange, QDistinct> {
QueryBuilder<LoanChange, LoanChange, QDistinct> distinctByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'amount');
});
}
QueryBuilder<LoanChange, LoanChange, QDistinct> distinctByDate() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'date');
});
}
}
extension LoanChangeQueryProperty
on QueryBuilder<LoanChange, LoanChange, QQueryProperty> {
QueryBuilder<LoanChange, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<LoanChange, double, QQueryOperations> amountProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'amount');
});
}
QueryBuilder<LoanChange, DateTime, QQueryOperations> dateProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'date');
});
}
}

View File

@@ -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<TransactionTemplate>();
final account = IsarLink<Account>();
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();
}
}

View File

@@ -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<RecurringTransaction> 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<int> offsets,
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
return bytesCount;
}
void _recurringTransactionSerialize(
RecurringTransaction object,
IsarWriter writer,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
writer.writeLong(offsets[0], object.days);
writer.writeDateTime(offsets[1], object.lastExecution);
}
RecurringTransaction _recurringTransactionDeserialize(
Id id,
IsarReader reader,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
final object = RecurringTransaction();
object.days = reader.readLong(offsets[0]);
object.id = id;
object.lastExecution = reader.readDateTimeOrNull(offsets[1]);
return object;
}
P _recurringTransactionDeserializeProp<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _recurringTransactionGetLinks(
RecurringTransaction object,
) {
return [object.template, object.account];
}
void _recurringTransactionAttach(
IsarCollection<dynamic> col,
Id id,
RecurringTransaction object,
) {
object.id = id;
object.template.attach(
col,
col.isar.collection<TransactionTemplate>(),
r'template',
id,
);
object.account.attach(col, col.isar.collection<Account>(), r'account', id);
}
extension RecurringTransactionQueryWhereSort
on QueryBuilder<RecurringTransaction, RecurringTransaction, QWhere> {
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhere>
anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension RecurringTransactionQueryWhere
on QueryBuilder<RecurringTransaction, RecurringTransaction, QWhereClause> {
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhereClause>
idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhereClause>
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<RecurringTransaction, RecurringTransaction, QAfterWhereClause>
idGreaterThan(Id id, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhereClause>
idLessThan(Id id, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhereClause>
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<TransactionTemplate> 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<Account> 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<RecurringTransaction, RecurringTransaction, QSortBy> {
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
sortByDays() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'days', Sort.asc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
sortByDaysDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'days', Sort.desc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
sortByLastExecution() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'lastExecution', Sort.asc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
sortByLastExecutionDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'lastExecution', Sort.desc);
});
}
}
extension RecurringTransactionQuerySortThenBy
on QueryBuilder<RecurringTransaction, RecurringTransaction, QSortThenBy> {
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
thenByDays() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'days', Sort.asc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
thenByDaysDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'days', Sort.desc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
thenByLastExecution() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'lastExecution', Sort.asc);
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy>
thenByLastExecutionDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'lastExecution', Sort.desc);
});
}
}
extension RecurringTransactionQueryWhereDistinct
on QueryBuilder<RecurringTransaction, RecurringTransaction, QDistinct> {
QueryBuilder<RecurringTransaction, RecurringTransaction, QDistinct>
distinctByDays() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'days');
});
}
QueryBuilder<RecurringTransaction, RecurringTransaction, QDistinct>
distinctByLastExecution() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'lastExecution');
});
}
}
extension RecurringTransactionQueryProperty
on
QueryBuilder<
RecurringTransaction,
RecurringTransaction,
QQueryProperty
> {
QueryBuilder<RecurringTransaction, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<RecurringTransaction, int, QQueryOperations> daysProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'days');
});
}
QueryBuilder<RecurringTransaction, DateTime?, QQueryOperations>
lastExecutionProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'lastExecution');
});
}
}

View File

@@ -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<ExpenseCategory>();
final beneficiary = IsarLink<Beneficiary>();
final account = IsarLink<Account>();
}

View File

@@ -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<TransactionTemplate> 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<int> offsets,
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
bytesCount += 3 + object.name.length * 3;
return bytesCount;
}
void _transactionTemplateSerialize(
TransactionTemplate object,
IsarWriter writer,
List<int> offsets,
Map<Type, List<int>> 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<int> offsets,
Map<Type, List<int>> 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<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _transactionTemplateGetLinks(
TransactionTemplate object,
) {
return [object.expenseCategory, object.beneficiary, object.account];
}
void _transactionTemplateAttach(
IsarCollection<dynamic> col,
Id id,
TransactionTemplate object,
) {
object.id = id;
object.expenseCategory.attach(
col,
col.isar.collection<ExpenseCategory>(),
r'expenseCategory',
id,
);
object.beneficiary.attach(
col,
col.isar.collection<Beneficiary>(),
r'beneficiary',
id,
);
object.account.attach(col, col.isar.collection<Account>(), r'account', id);
}
extension TransactionTemplateQueryWhereSort
on QueryBuilder<TransactionTemplate, TransactionTemplate, QWhere> {
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension TransactionTemplateQueryWhere
on QueryBuilder<TransactionTemplate, TransactionTemplate, QWhereClause> {
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterWhereClause>
idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterWhereClause>
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<TransactionTemplate, TransactionTemplate, QAfterWhereClause>
idGreaterThan(Id id, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterWhereClause>
idLessThan(Id id, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterWhereClause>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
idEqualTo(Id value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, 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<TransactionTemplate, TransactionTemplate, 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<TransactionTemplate, TransactionTemplate, 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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameEqualTo(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameStartsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.startsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameEndsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.endsWith(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.contains(
property: r'name',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.matches(
property: r'name',
wildcard: pattern,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'name', value: ''),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
nameIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(property: r'name', value: ''),
);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
expenseCategory(FilterQuery<ExpenseCategory> q) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'expenseCategory');
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
expenseCategoryIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'expenseCategory', 0, true, 0, true);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
beneficiary(FilterQuery<Beneficiary> q) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'beneficiary');
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
beneficiaryIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'beneficiary', 0, true, 0, true);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
account(FilterQuery<Account> q) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'account');
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition>
accountIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'account', 0, true, 0, true);
});
}
}
extension TransactionTemplateQuerySortBy
on QueryBuilder<TransactionTemplate, TransactionTemplate, QSortBy> {
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
sortByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
sortByAmountDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.desc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
sortByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
sortByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
sortByRecurring() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'recurring', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
sortByRecurringDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'recurring', Sort.desc);
});
}
}
extension TransactionTemplateQuerySortThenBy
on QueryBuilder<TransactionTemplate, TransactionTemplate, QSortThenBy> {
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByAmountDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.desc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByName() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByNameDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'name', Sort.desc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByRecurring() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'recurring', Sort.asc);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy>
thenByRecurringDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'recurring', Sort.desc);
});
}
}
extension TransactionTemplateQueryWhereDistinct
on QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct> {
QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct>
distinctByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'amount');
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct>
distinctByName({bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'name', caseSensitive: caseSensitive);
});
}
QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct>
distinctByRecurring() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'recurring');
});
}
}
extension TransactionTemplateQueryProperty
on QueryBuilder<TransactionTemplate, TransactionTemplate, QQueryProperty> {
QueryBuilder<TransactionTemplate, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<TransactionTemplate, double, QQueryOperations> amountProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'amount');
});
}
QueryBuilder<TransactionTemplate, String, QQueryOperations> nameProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'name');
});
}
QueryBuilder<TransactionTemplate, bool, QQueryOperations>
recurringProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'recurring');
});
}
}

View File

@@ -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<String> tags;
late DateTime date;
final expenseCategory = IsarLink<ExpenseCategory>();
final account = IsarLink<Account>();
final beneficiary = IsarLink<Beneficiary>();
}

View File

@@ -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<Transaction> 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<int> offsets,
Map<Type, List<int>> 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<int> offsets,
Map<Type, List<int>> 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<int> offsets,
Map<Type, List<int>> 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<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> 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<IsarLinkBase<dynamic>> _transactionGetLinks(Transaction object) {
return [object.expenseCategory, object.account, object.beneficiary];
}
void _transactionAttach(
IsarCollection<dynamic> col,
Id id,
Transaction object,
) {
object.id = id;
object.expenseCategory.attach(
col,
col.isar.collection<ExpenseCategory>(),
r'expenseCategory',
id,
);
object.account.attach(col, col.isar.collection<Account>(), r'account', id);
object.beneficiary.attach(
col,
col.isar.collection<Beneficiary>(),
r'beneficiary',
id,
);
}
extension TransactionQueryWhereSort
on QueryBuilder<Transaction, Transaction, QWhere> {
QueryBuilder<Transaction, Transaction, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension TransactionQueryWhere
on QueryBuilder<Transaction, Transaction, QWhereClause> {
QueryBuilder<Transaction, Transaction, QAfterWhereClause> idEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
});
}
QueryBuilder<Transaction, Transaction, QAfterWhereClause> 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<Transaction, Transaction, QAfterWhereClause> idGreaterThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterWhereClause> idLessThan(
Id id, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterWhereClause> 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<Transaction, Transaction, QFilterCondition> {
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition>
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<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition> dateEqualTo(
DateTime value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'date', value: value),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> dateGreaterThan(
DateTime value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(
include: include,
property: r'date',
value: value,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> dateLessThan(
DateTime value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.lessThan(
include: include,
property: r'date',
value: value,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition> idEqualTo(
Id value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'id', value: value),
);
});
}
QueryBuilder<Transaction, Transaction, 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<Transaction, Transaction, 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<Transaction, Transaction, 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<Transaction, Transaction, QAfterFilterCondition>
tagsElementEqualTo(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(
property: r'tags',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
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<Transaction, Transaction, QAfterFilterCondition>
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<Transaction, Transaction, QAfterFilterCondition>
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<Transaction, Transaction, QAfterFilterCondition>
tagsElementStartsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.startsWith(
property: r'tags',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsElementEndsWith(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.endsWith(
property: r'tags',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsElementContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.contains(
property: r'tags',
value: value,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsElementMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.matches(
property: r'tags',
wildcard: pattern,
caseSensitive: caseSensitive,
),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsElementIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.equalTo(property: r'tags', value: ''),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsElementIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
FilterCondition.greaterThan(property: r'tags', value: ''),
);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsLengthEqualTo(int length) {
return QueryBuilder.apply(this, (query) {
return query.listLength(r'tags', length, true, length, true);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> tagsIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.listLength(r'tags', 0, true, 0, true);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.listLength(r'tags', 0, false, 999999, true);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsLengthLessThan(int length, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(r'tags', 0, true, length, include);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
tagsLengthGreaterThan(int length, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(r'tags', length, include, 999999, true);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
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<Transaction, Transaction, QFilterCondition> {}
extension TransactionQueryLinks
on QueryBuilder<Transaction, Transaction, QFilterCondition> {
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> expenseCategory(
FilterQuery<ExpenseCategory> q,
) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'expenseCategory');
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
expenseCategoryIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'expenseCategory', 0, true, 0, true);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> account(
FilterQuery<Account> q,
) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'account');
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
accountIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'account', 0, true, 0, true);
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition> beneficiary(
FilterQuery<Beneficiary> q,
) {
return QueryBuilder.apply(this, (query) {
return query.link(q, r'beneficiary');
});
}
QueryBuilder<Transaction, Transaction, QAfterFilterCondition>
beneficiaryIsNull() {
return QueryBuilder.apply(this, (query) {
return query.linkLength(r'beneficiary', 0, true, 0, true);
});
}
}
extension TransactionQuerySortBy
on QueryBuilder<Transaction, Transaction, QSortBy> {
QueryBuilder<Transaction, Transaction, QAfterSortBy> sortByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.asc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> sortByAmountDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.desc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> sortByDate() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.asc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> sortByDateDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.desc);
});
}
}
extension TransactionQuerySortThenBy
on QueryBuilder<Transaction, Transaction, QSortThenBy> {
QueryBuilder<Transaction, Transaction, QAfterSortBy> thenByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.asc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> thenByAmountDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'amount', Sort.desc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> thenByDate() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.asc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> thenByDateDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'date', Sort.desc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<Transaction, Transaction, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
}
extension TransactionQueryWhereDistinct
on QueryBuilder<Transaction, Transaction, QDistinct> {
QueryBuilder<Transaction, Transaction, QDistinct> distinctByAmount() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'amount');
});
}
QueryBuilder<Transaction, Transaction, QDistinct> distinctByDate() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'date');
});
}
QueryBuilder<Transaction, Transaction, QDistinct> distinctByTags() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'tags');
});
}
}
extension TransactionQueryProperty
on QueryBuilder<Transaction, Transaction, QQueryProperty> {
QueryBuilder<Transaction, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<Transaction, double, QQueryOperations> amountProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'amount');
});
}
QueryBuilder<Transaction, DateTime, QQueryOperations> dateProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'date');
});
}
QueryBuilder<Transaction, List<String>, QQueryOperations> tagsProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'tags');
});
}
}

View File

@@ -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<Isar> openDatabase() async {
final dir = await getApplicationDocumentsDirectory();
return Isar.open([
AccountSchema,
BeneficiarySchema,
TransactionSchema,
TransactionTemplateSchema,
RecurringTransactionSchema,
ExpenseCategorySchema,
BudgetSchema,
BudgetItemSchema,
LoanSchema,
LoanChangeSchema,
], directory: dir.path);
}
Future<List<Account>> getAccounts() {
return GetIt.I.get<Isar>().accounts.where().findAll();
}
Future<double> getTotalBalance(Account account) async {
return GetIt.I
.get<Isar>()
.transactions
.filter()
.account((q) => q.idEqualTo(account.id))
.amountProperty()
.sum();
}
Future<List<Transaction>> getLastTransactions(
Account account,
DateTime today,
int days,
) async {
return GetIt.I
.get<Isar>()
.transactions
.filter()
.account((q) => q.idEqualTo(account.id))
.dateGreaterThan(toMidnight(today.subtract(Duration(days: days))))
.findAll();
}
Future<List<RecurringTransaction>> getRecurringTransactions(Account? account) {
if (account == null) {
return Future.value([]);
}
return GetIt.I
.get<Isar>()
.recurringTransactions
.filter()
.account((q) => q.idEqualTo(account.id))
.findAll();
}
Stream<void> watchRecurringTransactions(Account account) {
final account = GetIt.I.get<CoreCubit>().activeAccount!;
return GetIt.I
.get<Isar>()
.recurringTransactions
.filter()
.account((q) => q.idEqualTo(account.id))
.build()
.watchLazy(fireImmediately: true);
}
Future<void> upsertAccount(Account account) async {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.accounts.put(account);
});
}
Future<void> upsertBeneficiary(Beneficiary beneficiary) async {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.beneficiarys.put(beneficiary);
await beneficiary.account.save();
});
}
Future<Beneficiary?> getAccountBeneficiary(Account account) {
return GetIt.I
.get<Isar>()
.beneficiarys
.filter()
.account((q) => q.idEqualTo(account.id))
.findFirst();
}
Future<void> upsertTransactionTemplate(TransactionTemplate template) async {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.transactionTemplates.put(template);
await template.beneficiary.save();
await template.account.save();
await template.expenseCategory.save();
});
}
Future<void> deleteRecurringTransactionTemplate(RecurringTransaction template) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.transactionTemplates.delete(template.template.value!.id);
await db.recurringTransactions.delete(template.id);
});
}
Future<void> upsertRecurringTransaction(RecurringTransaction template) async {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.recurringTransactions.put(template);
await template.template.save();
await template.account.save();
});
}
Future<void> upsertTransaction(Transaction transaction) async {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.transactions.put(transaction);
await transaction.beneficiary.save();
await transaction.account.save();
await transaction.expenseCategory.save();
});
}
Stream<void> watchAccounts() {
return GetIt.I.get<Isar>().accounts.watchLazy();
}
Stream<void> watchTransactionTemplates(Account account) {
return GetIt.I
.get<Isar>()
.transactionTemplates
.filter()
.account((q) => q.idEqualTo(account.id))
.watchLazy(fireImmediately: true);
}
Future<void> deleteTransactionTemplate(TransactionTemplate template) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.transactionTemplates.delete(template.id);
});
}
Future<List<TransactionTemplate>> getTransactionTemplates(Account? account) {
if (account == null) {
return Future.value([]);
}
return GetIt.I
.get<Isar>()
.transactionTemplates
.filter()
.account((q) => q.idEqualTo(account.id))
.findAll();
}
Stream<void> watchTransactions(Account account) {
return GetIt.I
.get<Isar>()
.transactions
.filter()
.account((q) => q.idEqualTo(account.id))
.watchLazy(fireImmediately: true);
}
Future<List<Transaction>> getTransactions(Account? account) {
if (account == null) {
return Future.value([]);
}
return GetIt.I
.get<Isar>()
.transactions
.filter()
.account((q) => q.idEqualTo(account.id))
.findAll();
}
Stream<void> watchBeneficiaries() {
return GetIt.I.get<Isar>().beneficiarys.watchLazy(fireImmediately: true);
}
Future<List<Beneficiary>> getBeneficiaries() {
return GetIt.I.get<Isar>().beneficiarys.where().findAll();
}
Stream<Beneficiary?> watchBeneficiaryObject(Id id) {
return GetIt.I.get<Isar>().beneficiarys.watchObject(id);
}
Future<void> upsertExpenseCategory(ExpenseCategory category) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() => db.expenseCategorys.put(category));
}
Future<List<ExpenseCategory>> getExpenseCategories() {
return GetIt.I.get<Isar>().expenseCategorys.where().findAll();
}
Stream<void> watchExpenseCategory() {
return GetIt.I.get<Isar>().expenseCategorys.watchLazy(fireImmediately: true);
}
Stream<void> watchBudgets(Account account) {
return GetIt.I
.get<Isar>()
.budgets
.filter()
.account((q) => q.idEqualTo(account.id))
.watchLazy(fireImmediately: true);
}
Future<List<Budget>> getBudgets(Account? account) {
if (account == null) {
return Future.value([]);
}
return GetIt.I
.get<Isar>()
.budgets
.filter()
.account((q) => q.idEqualTo(account.id))
.findAll();
}
Future<void> upsertBudget(Budget budget) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.budgets.put(budget);
await budget.items.save();
await budget.account.save();
});
}
Future<void> upsertBudgetItem(BudgetItem item) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.budgetItems.put(item);
await item.expenseCategory.save();
});
}
enum TransactionQueryDateOption { thisMonth }
Future<List<Transaction>> 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<Isar>()
.transactions
.filter()
.account((q) => q.idEqualTo(account.id))
.dateBetween(lower, upper)
.findAll();
}
Future<void> upsertLoan(Loan loan) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.loans.put(loan);
await loan.beneficiary.save();
await loan.changes.save();
});
}
Future<List<Loan>> getLoans() {
return GetIt.I.get<Isar>().loans.where().findAll();
}
Stream<void> watchLoans() {
return GetIt.I.get<Isar>().loans.where().watchLazy(fireImmediately: true);
}
Future<void> deleteLoan(Loan loan) async {
final db = GetIt.I.get<Isar>();
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<void> upsertLoanChange(LoanChange loanChange) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.loanChanges.put(loanChange);
});
}
Future<void> deleteLoanChange(LoanChange loanChange) {
final db = GetIt.I.get<Isar>();
return db.writeTxn(() async {
await db.loanChanges.delete(loanChange.id);
});
}
Future<double> 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<void> deleteAccount(Account account) async {
final db = GetIt.I.get<Isar>();
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);
});
}

667
lib/database/sqlite.dart Normal file
View File

@@ -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<BeneficiaryType>()();
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<BudgetPeriod>()();
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<BudgetItemDto> 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<LoanChange> 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<OkaneDatabase>
with _$AccountsDaoMixin {
AccountsDao(OkaneDatabase db) : super(db);
Stream<List<Account>> accountsStream() {
return select(accounts).watch();
}
Future<List<Account>> getAccounts() {
return select(accounts).get();
}
Future<int> upsertAccount(AccountsCompanion account) {
return into(accounts).insertOnConflictUpdate(account);
}
}
enum TransactionQueryDateOption { thisMonth }
@DriftAccessor(tables: [Transactions, Beneficiaries, ExpenseCategories])
class TransactionsDao extends DatabaseAccessor<OkaneDatabase>
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<List<TransactionDto>> transactionsStream(Account account) {
return _transactionQuery(account).watch().map((rows) {
return rows.map(_mapToDto).toList();
});
}
Future<List<TransactionDto>> getTransactions(Account? account) {
if (account == null) {
return Future.value(List.empty());
}
return _transactionQuery(
account,
).get().then((rows) => rows.map(_mapToDto).toList());
}
Future<List<TransactionDto>> 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<double> getTotalBalance(Iterable<int> 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<List<TransactionDto>> 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<Transaction> upsertTransaction(TransactionsCompanion t) {
return into(
transactions,
).insertReturning(t, mode: InsertMode.insertOrReplace);
}
}
@DriftAccessor(tables: [Beneficiaries])
class BeneficiariesDao extends DatabaseAccessor<OkaneDatabase>
with _$BeneficiariesDaoMixin {
BeneficiariesDao(OkaneDatabase db) : super(db);
Stream<List<Beneficiary>> beneficiariesStream() {
return select(beneficiaries).watch();
}
Future<List<Beneficiary>> getBeneficiaries() {
return select(beneficiaries).get();
}
Future<Beneficiary> upsertBeneficiary(BeneficiariesCompanion beneficiary) {
return into(
beneficiaries,
).insertReturning(beneficiary, mode: InsertMode.insertOrReplace);
}
Future<Beneficiary> getAccountBeneficiary(Account account) {
return (select(beneficiaries)
..where((b) => b.accountId.equals(account.id))).getSingle();
}
Stream<Beneficiary> watchBeneficiary(int id) {
return (select(beneficiaries)..where((b) => b.id.equals(id))).watchSingle();
}
}
@DriftAccessor(tables: [ExpenseCategories])
class ExpenseCategoriesDao extends DatabaseAccessor<OkaneDatabase>
with _$ExpenseCategoriesDaoMixin {
ExpenseCategoriesDao(OkaneDatabase db) : super(db);
Stream<List<ExpenseCategory>> expenseCategoriesStream(Account account) {
return select(expenseCategories).watch();
}
Future<List<ExpenseCategory>> getExpenseCategories(Account? account) {
if (account == null) {
return Future.value(List.empty());
}
return select(expenseCategories).get();
}
}
@DriftAccessor(tables: [Budgets, BudgetItems])
class BudgetsDao extends DatabaseAccessor<OkaneDatabase>
with _$BudgetsDaoMixin {
BudgetsDao(OkaneDatabase db) : super(db);
Stream<List<BudgetsDto>> 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<List<BudgetsDto>> 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<Budget> upsertBudget(BudgetsCompanion budget) {
return into(
budgets,
).insertReturning(budget, mode: InsertMode.insertOrReplace);
}
Future<BudgetItem> upsertBudgetItem(BudgetItemsCompanion item) {
return into(
budgetItems,
).insertReturning(item, mode: InsertMode.insertOrReplace);
}
}
@DriftAccessor(tables: [Loans, LoanChanges, Beneficiaries])
class LoansDao extends DatabaseAccessor<OkaneDatabase> with _$LoansDaoMixin {
LoansDao(OkaneDatabase db) : super(db);
Stream<List<LoanDto>> 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<List<LoanDto>> 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<double> 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<Loan> upsertLoan(LoansCompanion loan) {
return into(loans).insertReturning(loan, mode: InsertMode.insertOrReplace);
}
Future<LoanChange> upsertLoanChange(LoanChangesCompanion loanChange) {
return into(
loanChanges,
).insertReturning(loanChange, mode: InsertMode.insertOrReplace);
}
Future<void> deleteLoanChange(int id) {
return (delete(loanChanges)..where((c) => c.id.equals(id))).go();
}
}
@DriftAccessor(tables: [TransactionTemplates, ExpenseCategories, Beneficiaries])
class TransactionTemplatesDao extends DatabaseAccessor<OkaneDatabase>
with _$TransactionTemplatesDaoMixin {
TransactionTemplatesDao(OkaneDatabase db) : super(db);
Stream<List<TransactionTemplateDto>> 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<List<TransactionTemplateDto>> 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<TransactionTemplate> upsertTemplate(
TransactionTemplatesCompanion template,
) {
return into(
transactionTemplates,
).insertReturning(template, mode: InsertMode.insertOrReplace);
}
Future<void> deleteTemplate(TransactionTemplate template) {
return (delete(transactionTemplates)
..where((t) => t.id.equals(template.id))).go();
}
}
@DriftAccessor(tables: [TransactionTemplates, RecurringTransactions])
class RecurringTransactionsDao extends DatabaseAccessor<OkaneDatabase>
with _$RecurringTransactionsDaoMixin {
RecurringTransactionsDao(OkaneDatabase db) : super(db);
Stream<List<RecurringTransactionDto>> 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<List<RecurringTransactionDto>> 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<int> upsertRecurringTransaction(RecurringTransactionsCompanion r) {
return into(recurringTransactions).insertOnConflictUpdate(r);
}
Future<void> deleteTemplate(RecurringTransactionDto dto) async {
await db.transactionTemplatesDao.deleteTemplate(dto.template);
await (delete(recurringTransactions)
..where((t) => t.id.equals(dto.recurring.id))).go();
}
}

8239
lib/database/sqlite.g.dart Normal file

File diff suppressed because it is too large Load Diff