mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-04 09:58:13 +01:00
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:
parent
c1dbe235dc
commit
7e6a2d08e2
5 changed files with 36 additions and 2 deletions
|
@ -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);
|
||||
|
|
|
@ -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 () =>
|
||||
{
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>>(
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Add table
Reference in a new issue