mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-20 02:28:31 +01:00
73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
using BTCPayServer.Models;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Filters;
|
|
using BTCPayServer.Services.Rates;
|
|
using BTCPayServer.Services.Stores;
|
|
|
|
namespace BTCPayServer.Controllers
|
|
{
|
|
public class RateController : Controller
|
|
{
|
|
IRateProviderFactory _RateProviderFactory;
|
|
BTCPayNetworkProvider _NetworkProvider;
|
|
CurrencyNameTable _CurrencyNameTable;
|
|
StoreRepository _StoreRepo;
|
|
public RateController(
|
|
IRateProviderFactory rateProviderFactory,
|
|
BTCPayNetworkProvider networkProvider,
|
|
StoreRepository storeRepo,
|
|
CurrencyNameTable currencyNameTable)
|
|
{
|
|
_RateProviderFactory = rateProviderFactory ?? throw new ArgumentNullException(nameof(rateProviderFactory));
|
|
_NetworkProvider = networkProvider;
|
|
_StoreRepo = storeRepo;
|
|
_CurrencyNameTable = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
|
|
}
|
|
|
|
[Route("rates")]
|
|
[HttpGet]
|
|
[BitpayAPIConstraint]
|
|
public async Task<IActionResult> GetRates(string cryptoCode = null, string storeId = null)
|
|
{
|
|
cryptoCode = cryptoCode ?? "BTC";
|
|
var network= _NetworkProvider.GetNetwork(cryptoCode);
|
|
if (network == null)
|
|
return NotFound();
|
|
var rateProvider = _RateProviderFactory.GetRateProvider(network);
|
|
if (rateProvider == null)
|
|
return NotFound();
|
|
|
|
if(storeId != null)
|
|
{
|
|
var store = await _StoreRepo.FindStore(storeId);
|
|
if (store == null)
|
|
return NotFound();
|
|
rateProvider = store.GetStoreBlob().ApplyRateRules(network, rateProvider);
|
|
}
|
|
|
|
var allRates = (await rateProvider.GetRatesAsync());
|
|
return Json(new DataWrapper<NBitpayClient.Rate[]>
|
|
(allRates.Select(r =>
|
|
new NBitpayClient.Rate()
|
|
{
|
|
Code = r.Currency,
|
|
Name = _CurrencyNameTable.GetCurrencyData(r.Currency)?.Name,
|
|
Value = r.Value
|
|
}).Where(n => n.Name != null).ToArray()));
|
|
|
|
}
|
|
|
|
[Route("api/rates")]
|
|
[HttpGet]
|
|
public Task<IActionResult> GetRates2(string cryptoCode = null, string storeId = null)
|
|
{
|
|
return GetRates(cryptoCode, storeId);
|
|
}
|
|
}
|
|
}
|