getProofs method

  1. @override
Future<List<CashuProof>> getProofs({
  1. String? mintUrl,
  2. String? keysetId,
  3. CashuProofState state = CashuProofState.unspend,
})
override

Implementation

@override
Future<List<CashuProof>> getProofs({
  String? mintUrl,
  String? keysetId,
  CashuProofState state = CashuProofState.unspend,
}) async {
  /// returns all proofs if no filters are applied
  await dbRdy;

  final proofBox = _objectBox.store.box<DbWalletCashuProof>();

  // Build conditions
  Condition<DbWalletCashuProof> condition;

  /// filter spend state

  condition = DbWalletCashuProof_.state.equals(state.toString());

  /// specify keysetId
  if (keysetId != null && keysetId.isNotEmpty) {
    final keysetCondition = DbWalletCashuProof_.keysetId.equals(keysetId);
    condition = condition.and(keysetCondition);
  }

  if (mintUrl != null && mintUrl.isNotEmpty) {
    /// get all keysets for the mintUrl
    /// and filter proofs by keysetId
    ///
    final keysets = await getKeysets(mintUrl: mintUrl);
    if (keysets.isNotEmpty) {
      final keysetIds = keysets.map((k) => k.id).toList();
      final mintUrlCondition = DbWalletCashuProof_.keysetId.oneOf(keysetIds);

      condition = condition.and(mintUrlCondition);
    } else {
      // If no keysets found for the mintUrl, return empty list
      return [];
    }
  }

  QueryBuilder<DbWalletCashuProof> queryBuilder;

  queryBuilder = proofBox.query(condition);

  // Apply sorting
  queryBuilder.order(DbWalletCashuProof_.amount);

  // Build and execute the query
  final query = queryBuilder.build();

  final results = query.find();
  return results.map((dbProof) => dbProof.toNdk()).toList();
}