stack_wallet/lib/services/mixins/wallet_db.dart

68 lines
2 KiB
Dart
Raw Normal View History

2023-01-12 18:46:01 +00:00
import 'package:isar/isar.dart';
2023-01-16 21:04:03 +00:00
import 'package:stackwallet/db/main_db.dart';
2023-01-12 18:46:01 +00:00
import 'package:stackwallet/models/isar/models/isar_models.dart';
import 'package:tuple/tuple.dart';
2023-01-12 18:46:01 +00:00
mixin WalletDB {
2023-01-16 21:04:03 +00:00
MainDB get db => MainDB.instance;
2023-01-12 18:46:01 +00:00
2023-01-16 21:04:03 +00:00
Future<void> isarInit(String walletId) async {
await db.isarInit();
2023-01-12 18:46:01 +00:00
}
Future<void> addNewTransactionData(
List<Tuple4<Transaction, List<Output>, List<Input>, Address?>>
2023-01-16 21:04:03 +00:00
transactionsData,
String walletId) async {
await db.isar.writeTxn(() async {
for (final data in transactionsData) {
final tx = data.item1;
2023-01-16 21:04:03 +00:00
final potentiallyUnconfirmedTx = await db
.getTransactions(walletId)
.filter()
.txidEqualTo(tx.txid)
.findFirst();
if (potentiallyUnconfirmedTx != null) {
// update use id to replace tx
tx.id = potentiallyUnconfirmedTx.id;
2023-01-16 21:04:03 +00:00
await db.isar.transactions.delete(potentiallyUnconfirmedTx.id);
}
// save transaction
2023-01-16 21:04:03 +00:00
await db.isar.transactions.put(tx);
// link and save outputs
if (data.item2.isNotEmpty) {
2023-01-16 21:04:03 +00:00
await db.isar.outputs.putAll(data.item2);
tx.outputs.addAll(data.item2);
await tx.outputs.save();
}
// link and save inputs
if (data.item3.isNotEmpty) {
2023-01-16 21:04:03 +00:00
await db.isar.inputs.putAll(data.item3);
tx.inputs.addAll(data.item3);
await tx.inputs.save();
}
if (data.item4 != null) {
2023-01-16 21:04:03 +00:00
final address = await db
.getAddresses(walletId)
.filter()
2023-01-13 22:11:34 +00:00
.valueEqualTo(data.item4!.value)
.findFirst();
// check if address exists in db and add if it does not
2023-01-13 22:11:34 +00:00
if (address == null) {
2023-01-16 21:04:03 +00:00
await db.isar.addresses.put(data.item4!);
}
2023-01-13 22:11:34 +00:00
// link and save address
2023-01-13 22:11:34 +00:00
tx.address.value = address ?? data.item4!;
await tx.address.save();
}
}
});
}
2023-01-12 18:46:01 +00:00
}