mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-04 18:06:08 +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(
|
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)
|
CancellationToken token = default)
|
||||||
{
|
{
|
||||||
var query = new Dictionary<string, object>();
|
var query = new Dictionary<string, object>();
|
||||||
|
@ -63,6 +63,9 @@ namespace BTCPayServer.Client
|
||||||
{
|
{
|
||||||
query.Add(nameof(statusFilter), statusFilter);
|
query.Add(nameof(statusFilter), statusFilter);
|
||||||
}
|
}
|
||||||
|
if (labelFilter != null) {
|
||||||
|
query.Add(nameof(labelFilter), labelFilter);
|
||||||
|
}
|
||||||
var response =
|
var response =
|
||||||
await _httpClient.SendAsync(
|
await _httpClient.SendAsync(
|
||||||
CreateHttpRequest($"api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet/transactions", query), token);
|
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);
|
new[] { TransactionStatus.Unconfirmed }), data => data.TransactionHash == txdata.TransactionHash);
|
||||||
Assert.Contains(
|
Assert.Contains(
|
||||||
await client.ShowOnChainWalletTransactions(walletId.StoreId, walletId.CryptoCode), data => data.TransactionHash == txdata.TransactionHash);
|
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 () =>
|
await tester.WaitForEvent<NewBlockEvent>(async () =>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
string storeId,
|
string storeId,
|
||||||
string cryptoCode,
|
string cryptoCode,
|
||||||
[FromQuery] TransactionStatus[]? statusFilter = null,
|
[FromQuery] TransactionStatus[]? statusFilter = null,
|
||||||
|
[FromQuery] string? labelFilter = null,
|
||||||
[FromQuery] int skip = 0,
|
[FromQuery] int skip = 0,
|
||||||
[FromQuery] int limit = int.MaxValue
|
[FromQuery] int limit = int.MaxValue
|
||||||
)
|
)
|
||||||
|
@ -202,6 +203,23 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
filteredFlatList.AddRange(txs.ReplacedTransactions.Transactions);
|
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 =>
|
var result = filteredFlatList.Skip(skip).Take(limit).Select(information =>
|
||||||
{
|
{
|
||||||
walletTransactionsInfoAsync.TryGetValue(information.TransactionId.ToString(), out var transactionInfo);
|
walletTransactionsInfoAsync.TryGetValue(information.TransactionId.ToString(), out var transactionInfo);
|
||||||
|
|
|
@ -782,7 +782,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<IEnumerable<OnChainWalletTransactionData>> ShowOnChainWalletTransactions(
|
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)
|
CancellationToken token = default)
|
||||||
{
|
{
|
||||||
return GetFromActionResult<IEnumerable<OnChainWalletTransactionData>>(
|
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",
|
"name": "skip",
|
||||||
"in": "query",
|
"in": "query",
|
||||||
|
|
Loading…
Add table
Reference in a new issue