[Feature] Can configure fallback rates

This commit is contained in:
nicolas.dorier
2025-05-02 15:55:58 +09:00
parent 3ce5542eed
commit 9dc1aeda72
28 changed files with 1221 additions and 725 deletions

View File

@@ -71,11 +71,12 @@ namespace BTCPayServer.Controllers
public async Task<IActionResult> CreateStore(bool skipWizard)
{
var stores = await _repo.GetStoresByUserId(GetUserId());
var defaultCurrency = (await _settingsRepository.GetSettingAsync<PoliciesSettings>())?.DefaultCurrency ?? StoreBlob.StandardDefaultCurrency;
var vm = new CreateStoreViewModel
{
IsFirstStore = !(stores.Any() || skipWizard),
DefaultCurrency = (await _settingsRepository.GetSettingAsync<PoliciesSettings>())?.DefaultCurrency ?? StoreBlob.StandardDefaultCurrency,
Exchanges = GetExchangesSelectList(null)
DefaultCurrency = defaultCurrency,
Exchanges = GetExchangesSelectList(defaultCurrency, null)
};
return View(vm);
@@ -89,14 +90,15 @@ namespace BTCPayServer.Controllers
{
var stores = await _repo.GetStoresByUserId(GetUserId());
vm.IsFirstStore = !stores.Any();
vm.Exchanges = GetExchangesSelectList(null);
var defaultCurrency = (await _settingsRepository.GetSettingAsync<PoliciesSettings>())?.DefaultCurrency ?? StoreBlob.StandardDefaultCurrency;
vm.Exchanges = GetExchangesSelectList(defaultCurrency, null);
return View(vm);
}
var store = new StoreData { StoreName = vm.Name };
var blob = store.GetStoreBlob();
blob.DefaultCurrency = vm.DefaultCurrency;
blob.PreferredExchange = vm.PreferredExchange;
blob.GetOrCreateRateSettings(false).PreferredExchange = vm.PreferredExchange;
store.SetStoreBlob(blob);
await _repo.CreateStore(GetUserId(), store);
CreatedStoreId = store.Id;
@@ -132,18 +134,18 @@ namespace BTCPayServer.Controllers
private string GetUserId() => _userManager.GetUserId(User);
internal SelectList GetExchangesSelectList(StoreBlob storeBlob)
internal SelectList GetExchangesSelectList(string defaultCurrency, StoreBlob.RateSettings rateSettings)
{
if (storeBlob is null)
storeBlob = new StoreBlob();
var defaultExchange = _defaultRules.GetRecommendedExchange(storeBlob.DefaultCurrency);
if (rateSettings is null)
rateSettings = new ();
var defaultExchange = _defaultRules.GetRecommendedExchange(defaultCurrency);
var exchanges = _rateFactory.RateProviderFactory
.AvailableRateProviders
.OrderBy(s => s.Id, StringComparer.OrdinalIgnoreCase)
.ToList();
var exchange = exchanges.First(e => e.Id == defaultExchange);
exchanges.Insert(0, new(null, StringLocalizer["Recommendation ({0})", exchange.DisplayName], ""));
var chosen = exchanges.FirstOrDefault(f => f.Id == storeBlob.PreferredExchange) ?? exchanges.First();
var chosen = exchanges.FirstOrDefault(f => f.Id == rateSettings.PreferredExchange) ?? exchanges.First();
return new SelectList(exchanges, nameof(chosen.Id), nameof(chosen.DisplayName), chosen.Id);
}
}