upsertAddress method

  1. @override
Future<void> upsertAddress(
  1. String walletId,
  2. AddressMetadata metadata
)
override

Store or update address metadata

Implementation

@override
Future<void> upsertAddress(String walletId, AddressMetadata metadata) async {
  _ensureInitialized();

  await _pool!.execute(
    Sql.named('''
      INSERT INTO addresses (
        wallet_id, address, script_type, derivation_path, derivation_index,
        is_change, label, purpose, first_used_at, last_used_at,
        usage_count, balance, created_at, is_watched
      ) VALUES (
        @walletId, @address, @scriptType, @derivationPath, @derivationIndex,
        @isChange, @label, @purpose, @firstUsedAt, @lastUsedAt,
        @usageCount, @balance, @now, @isWatched
      )
      ON CONFLICT (wallet_id, address) DO UPDATE SET
        script_type = COALESCE(@scriptType, addresses.script_type),
        derivation_path = COALESCE(@derivationPath, addresses.derivation_path),
        derivation_index = COALESCE(@derivationIndex, addresses.derivation_index),
        is_change = @isChange,
        label = @label,
        purpose = @purpose,
        first_used_at = COALESCE(addresses.first_used_at, @firstUsedAt),
        last_used_at = @lastUsedAt,
        usage_count = @usageCount,
        balance = @balance,
        is_watched = @isWatched
    '''),
    parameters: {
      'walletId': walletId,
      'address': metadata.address,
      'scriptType': metadata.scriptType,
      'derivationPath': metadata.derivationPath,
      'derivationIndex': metadata.derivationIndex,
      'isChange': metadata.isChange,
      'label': metadata.label,
      'purpose': metadata.purpose,
      'firstUsedAt': metadata.firstUsedAt,
      'lastUsedAt': metadata.lastUsedAt,
      'usageCount': metadata.usageCount,
      'balance': metadata.balance.toInt(),
      'now': DateTime.now(),
      'isWatched': metadata.isWatched,
    },
  );
}