Add label filter for onchain tx API endpoint (#3588)

* Add label filter for onchain tx API endpoint

close #3587

* Add Swagger docs

* Add test for filtering by transaction label
This commit is contained in:
Umar Bolatov 2022-04-17 19:20:15 -07:00 committed by GitHub
parent c1dbe235dc
commit 7e6a2d08e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 2 deletions

View file

@ -55,7 +55,7 @@ namespace BTCPayServer.Client
}
public virtual async Task<IEnumerable<OnChainWalletTransactionData>> ShowOnChainWalletTransactions(
string storeId, string cryptoCode, TransactionStatus[] statusFilter = null,
string storeId, string cryptoCode, TransactionStatus[] statusFilter = null, string labelFilter = null,
CancellationToken token = default)
{
var query = new Dictionary<string, object>();
@ -63,6 +63,9 @@ namespace BTCPayServer.Client
{
query.Add(nameof(statusFilter), statusFilter);
}
if (labelFilter != null) {
query.Add(nameof(labelFilter), labelFilter);
}
var response =
await _httpClient.SendAsync(
CreateHttpRequest($"api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet/transactions", query), token);

View file

@ -2163,6 +2163,9 @@ namespace BTCPayServer.Tests
new[] { TransactionStatus.Unconfirmed }), data => data.TransactionHash == txdata.TransactionHash);
Assert.Contains(
await client.ShowOnChainWalletTransactions(walletId.StoreId, walletId.CryptoCode), data => data.TransactionHash == txdata.TransactionHash);
Assert.Contains(
await client.ShowOnChainWalletTransactions(walletId.StoreId, walletId.CryptoCode, null, "test label"), data => data.TransactionHash == txdata.TransactionHash);
await tester.WaitForEvent<NewBlockEvent>(async () =>
{

View file

@ -173,6 +173,7 @@ namespace BTCPayServer.Controllers.Greenfield
string storeId,
string cryptoCode,
[FromQuery] TransactionStatus[]? statusFilter = null,
[FromQuery] string? labelFilter = null,
[FromQuery] int skip = 0,
[FromQuery] int limit = int.MaxValue
)
@ -202,6 +203,23 @@ namespace BTCPayServer.Controllers.Greenfield
filteredFlatList.AddRange(txs.ReplacedTransactions.Transactions);
}
if (labelFilter != null)
{
filteredFlatList = filteredFlatList.Where(information =>
{
walletTransactionsInfoAsync.TryGetValue(information.TransactionId.ToString(), out var transactionInfo);
if (transactionInfo != null)
{
return transactionInfo.Labels.ContainsKey(labelFilter);
}
else
{
return false;
}
}).ToList();
}
var result = filteredFlatList.Skip(skip).Take(limit).Select(information =>
{
walletTransactionsInfoAsync.TryGetValue(information.TransactionId.ToString(), out var transactionInfo);

View file

@ -782,7 +782,7 @@ namespace BTCPayServer.Controllers.Greenfield
}
public override async Task<IEnumerable<OnChainWalletTransactionData>> ShowOnChainWalletTransactions(
string storeId, string cryptoCode, TransactionStatus[] statusFilter = null,
string storeId, string cryptoCode, TransactionStatus[] statusFilter = null, string labelFilter = null,
CancellationToken token = default)
{
return GetFromActionResult<IEnumerable<OnChainWalletTransactionData>>(

View file

@ -277,6 +277,16 @@
}
}
},
{
"name": "labelFilter",
"in": "query",
"required": false,
"description": "Transaction label to filter by",
"schema": {
"type": "string"
},
"example": "invoice"
},
{
"name": "skip",
"in": "query",