mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-22 14:22:40 +01:00
Greenfield: Add onchain wallet histogram
This commit is contained in:
parent
449943cf9e
commit
380f9d5ec5
4 changed files with 57 additions and 6 deletions
|
@ -16,6 +16,14 @@ public partial class BTCPayServerClient
|
||||||
{
|
{
|
||||||
return await SendHttpRequest<OnChainWalletOverviewData>($"api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet", null, HttpMethod.Get, token);
|
return await SendHttpRequest<OnChainWalletOverviewData>($"api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet", null, HttpMethod.Get, token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual async Task<HistogramData> GetOnChainWalletHistogram(string storeId, string cryptoCode, HistogramType? type = null,
|
||||||
|
CancellationToken token = default)
|
||||||
|
{
|
||||||
|
var queryPayload = type == null ? null : new Dictionary<string, string> { ["type"] = type.ToString() };
|
||||||
|
return await SendHttpRequest<HistogramData>($"api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/histogram", queryPayload, HttpMethod.Get, token);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual async Task<OnChainWalletFeeRateData> GetOnChainFeeRate(string storeId, string cryptoCode, int? blockTarget = null,
|
public virtual async Task<OnChainWalletFeeRateData> GetOnChainFeeRate(string storeId, string cryptoCode, int? blockTarget = null,
|
||||||
CancellationToken token = default)
|
CancellationToken token = default)
|
||||||
{
|
{
|
||||||
|
|
24
BTCPayServer.Client/Models/WalletHistogramData.cs
Normal file
24
BTCPayServer.Client/Models/WalletHistogramData.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using NBitcoin;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Converters;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Client.Models;
|
||||||
|
|
||||||
|
public enum HistogramType
|
||||||
|
{
|
||||||
|
Week,
|
||||||
|
Month,
|
||||||
|
Year
|
||||||
|
}
|
||||||
|
|
||||||
|
public class HistogramData
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(StringEnumConverter))]
|
||||||
|
public HistogramType Type { get; set; }
|
||||||
|
public List<decimal> Series { get; set; }
|
||||||
|
public List<DateTimeOffset> Labels { get; set; }
|
||||||
|
[JsonConverter(typeof(JsonConverters.MoneyJsonConverter))]
|
||||||
|
public Money Balance { get; set; }
|
||||||
|
}
|
|
@ -2,12 +2,10 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Globalization;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BTCPayApp.CommonServer;
|
using BTCPayApp.CommonServer;
|
||||||
using BTCPayServer.Abstractions.Constants;
|
|
||||||
using BTCPayServer.Abstractions.Extensions;
|
using BTCPayServer.Abstractions.Extensions;
|
||||||
using BTCPayServer.BIP78.Sender;
|
using BTCPayServer.BIP78.Sender;
|
||||||
using BTCPayServer.Client;
|
using BTCPayServer.Client;
|
||||||
|
@ -21,7 +19,6 @@ using BTCPayServer.Payments.PayJoin;
|
||||||
using BTCPayServer.Payments.PayJoin.Sender;
|
using BTCPayServer.Payments.PayJoin.Sender;
|
||||||
using BTCPayServer.Services;
|
using BTCPayServer.Services;
|
||||||
using BTCPayServer.Services.Invoices;
|
using BTCPayServer.Services.Invoices;
|
||||||
using BTCPayServer.Services.Labels;
|
|
||||||
using BTCPayServer.Services.Wallets;
|
using BTCPayServer.Services.Wallets;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Cors;
|
using Microsoft.AspNetCore.Cors;
|
||||||
|
@ -59,6 +56,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
private readonly IFeeProviderFactory _feeProviderFactory;
|
private readonly IFeeProviderFactory _feeProviderFactory;
|
||||||
private readonly UTXOLocker _utxoLocker;
|
private readonly UTXOLocker _utxoLocker;
|
||||||
private readonly TransactionLinkProviders _transactionLinkProviders;
|
private readonly TransactionLinkProviders _transactionLinkProviders;
|
||||||
|
private readonly WalletHistogramService _walletHistogramService;
|
||||||
|
|
||||||
public GreenfieldStoreOnChainWalletsController(
|
public GreenfieldStoreOnChainWalletsController(
|
||||||
IAuthorizationService authorizationService,
|
IAuthorizationService authorizationService,
|
||||||
|
@ -75,6 +73,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
WalletReceiveService walletReceiveService,
|
WalletReceiveService walletReceiveService,
|
||||||
IFeeProviderFactory feeProviderFactory,
|
IFeeProviderFactory feeProviderFactory,
|
||||||
UTXOLocker utxoLocker,
|
UTXOLocker utxoLocker,
|
||||||
|
WalletHistogramService walletHistogramService,
|
||||||
TransactionLinkProviders transactionLinkProviders
|
TransactionLinkProviders transactionLinkProviders
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -92,6 +91,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
_walletReceiveService = walletReceiveService;
|
_walletReceiveService = walletReceiveService;
|
||||||
_feeProviderFactory = feeProviderFactory;
|
_feeProviderFactory = feeProviderFactory;
|
||||||
_utxoLocker = utxoLocker;
|
_utxoLocker = utxoLocker;
|
||||||
|
_walletHistogramService = walletHistogramService;
|
||||||
_transactionLinkProviders = transactionLinkProviders;
|
_transactionLinkProviders = transactionLinkProviders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,14 +99,13 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
[HttpGet("~/api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet")]
|
[HttpGet("~/api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet")]
|
||||||
public async Task<IActionResult> ShowOnChainWalletOverview(string storeId, string cryptoCode)
|
public async Task<IActionResult> ShowOnChainWalletOverview(string storeId, string cryptoCode)
|
||||||
{
|
{
|
||||||
if (IsInvalidWalletRequest(cryptoCode, out var network,
|
if (IsInvalidWalletRequest(cryptoCode, out var network, out var derivationScheme, out var actionResult))
|
||||||
out var derivationScheme, out var actionResult))
|
|
||||||
return actionResult;
|
return actionResult;
|
||||||
|
|
||||||
var wallet = _btcPayWalletProvider.GetWallet(network);
|
var wallet = _btcPayWalletProvider.GetWallet(network);
|
||||||
var balance = await wallet.GetBalance(derivationScheme.AccountDerivation);
|
var balance = await wallet.GetBalance(derivationScheme.AccountDerivation);
|
||||||
|
|
||||||
return Ok(new OnChainWalletOverviewData()
|
return Ok(new OnChainWalletOverviewData
|
||||||
{
|
{
|
||||||
Label = derivationScheme.ToPrettyString(),
|
Label = derivationScheme.ToPrettyString(),
|
||||||
Balance = balance.Total.GetValue(network),
|
Balance = balance.Total.GetValue(network),
|
||||||
|
@ -115,6 +114,20 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||||
|
[HttpGet("~/api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/histogram")]
|
||||||
|
public async Task<IActionResult> GetOnChainWalletHistogram(string storeId, string cryptoCode, [FromQuery] string type)
|
||||||
|
{
|
||||||
|
if (IsInvalidWalletRequest(cryptoCode, out _, out _, out var actionResult))
|
||||||
|
return actionResult;
|
||||||
|
|
||||||
|
var walletId = new WalletId(storeId, cryptoCode);
|
||||||
|
Enum.TryParse<WalletHistogramType>(type, true, out var histType);
|
||||||
|
var data = await _walletHistogramService.GetHistogram(Store, walletId, histType);
|
||||||
|
|
||||||
|
return Ok(data);
|
||||||
|
}
|
||||||
|
|
||||||
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||||
[HttpGet("~/api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet/feerate")]
|
[HttpGet("~/api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/wallet/feerate")]
|
||||||
public async Task<IActionResult> GetOnChainFeeRate(string storeId, string cryptoCode, int? blockTarget = null)
|
public async Task<IActionResult> GetOnChainFeeRate(string storeId, string cryptoCode, int? blockTarget = null)
|
||||||
|
|
|
@ -703,6 +703,12 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||||
await GetController<GreenfieldStoreOnChainWalletsController>().ShowOnChainWalletOverview(storeId, cryptoCode));
|
await GetController<GreenfieldStoreOnChainWalletsController>().ShowOnChainWalletOverview(storeId, cryptoCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override async Task<HistogramData> GetOnChainWalletHistogram(string storeId, string cryptoCode, string type, CancellationToken token = default)
|
||||||
|
{
|
||||||
|
return GetFromActionResult<HistogramData>(
|
||||||
|
await GetController<GreenfieldStoreOnChainWalletsController>().GetOnChainWalletHistogram(storeId, cryptoCode, type));
|
||||||
|
}
|
||||||
|
|
||||||
public override async Task<OnChainWalletAddressData> GetOnChainWalletReceiveAddress(string storeId,
|
public override async Task<OnChainWalletAddressData> GetOnChainWalletReceiveAddress(string storeId,
|
||||||
string cryptoCode, bool forceGenerate = false,
|
string cryptoCode, bool forceGenerate = false,
|
||||||
CancellationToken token = default)
|
CancellationToken token = default)
|
||||||
|
|
Loading…
Add table
Reference in a new issue