Implement store templates (#6704)

* Implement store templates

* Use the template for the default rate rules

* Polish messages

* Do not show exchange selection if template has a script
This commit is contained in:
Nicolas Dorier
2025-05-09 15:58:24 +09:00
committed by GitHub
parent 0fbff219d2
commit 1e79730c6e
18 changed files with 421 additions and 124 deletions

View File

@@ -24,7 +24,6 @@ namespace BTCPayServer.Controllers
{
private readonly StoreRepository _repo;
private readonly IStringLocalizer StringLocalizer;
private readonly SettingsRepository _settingsRepository;
private readonly UserManager<ApplicationUser> _userManager;
private readonly DefaultRulesCollection _defaultRules;
private readonly RateFetcher _rateFactory;
@@ -35,15 +34,13 @@ namespace BTCPayServer.Controllers
DefaultRulesCollection defaultRules,
StoreRepository storeRepository,
IStringLocalizer stringLocalizer,
RateFetcher rateFactory,
SettingsRepository settingsRepository)
RateFetcher rateFactory)
{
_repo = storeRepository;
StringLocalizer = stringLocalizer;
_userManager = userManager;
_defaultRules = defaultRules;
_rateFactory = rateFactory;
_settingsRepository = settingsRepository;
}
[HttpGet]
@@ -71,12 +68,16 @@ 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 defaultTemplate = await _repo.GetDefaultStoreTemplate();
var blob = defaultTemplate.GetStoreBlob();
var vm = new CreateStoreViewModel
{
Name = defaultTemplate.StoreName,
IsFirstStore = !(stores.Any() || skipWizard),
DefaultCurrency = defaultCurrency,
Exchanges = GetExchangesSelectList(defaultCurrency, null)
DefaultCurrency = blob.DefaultCurrency,
Exchanges = GetExchangesSelectList(blob.DefaultCurrency, null),
CanEditPreferredExchange = blob.GetRateSettings(false)?.RateScripting is not true,
PreferredExchange = blob.GetRateSettings(false)?.PreferredExchange
};
return View(vm);
@@ -90,12 +91,14 @@ namespace BTCPayServer.Controllers
{
var stores = await _repo.GetStoresByUserId(GetUserId());
vm.IsFirstStore = !stores.Any();
var defaultCurrency = (await _settingsRepository.GetSettingAsync<PoliciesSettings>())?.DefaultCurrency ?? StoreBlob.StandardDefaultCurrency;
var template = await _repo.GetDefaultStoreTemplate();
var defaultCurrency = template.GetStoreBlob().DefaultCurrency ?? StoreBlob.StandardDefaultCurrency;
vm.Exchanges = GetExchangesSelectList(defaultCurrency, null);
return View(vm);
}
var store = new StoreData { StoreName = vm.Name };
var store = await _repo.GetDefaultStoreTemplate();
store.StoreName = vm.Name;
var blob = store.GetStoreBlob();
blob.DefaultCurrency = vm.DefaultCurrency;
blob.GetOrCreateRateSettings(false).PreferredExchange = vm.PreferredExchange;