public async Task <IActionResult> UpdateStore(string storeId)
        {
            var store = await _Repo.FindStore(storeId, GetUserId());

            if (store == null)
            {
                return(NotFound());
            }

            var storeBlob = store.GetStoreBlob();
            var vm        = new StoreViewModel();

            vm.SetExchangeRates(GetSupportedExchanges(), storeBlob.PreferredExchange.IsCoinAverage() ? "coinaverage" : storeBlob.PreferredExchange);
            vm.Id           = store.Id;
            vm.StoreName    = store.StoreName;
            vm.StoreWebsite = store.StoreWebsite;
            vm.NetworkFee   = !storeBlob.NetworkFeeDisabled;
            vm.SpeedPolicy  = store.SpeedPolicy;
            AddPaymentMethods(store, vm);
            vm.MonitoringExpiration         = storeBlob.MonitoringExpiration;
            vm.InvoiceExpiration            = storeBlob.InvoiceExpiration;
            vm.RateMultiplier               = (double)storeBlob.GetRateMultiplier();
            vm.LightningDescriptionTemplate = storeBlob.LightningDescriptionTemplate;
            return(View(vm));
        }
        public async Task <IActionResult> UpdateStore(string storeId, StoreViewModel model)
        {
            model.SetExchangeRates(GetSupportedExchanges(), model.PreferredExchange);
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            if (model.PreferredExchange != null)
            {
                model.PreferredExchange = model.PreferredExchange.Trim().ToLowerInvariant();
            }
            var store = await _Repo.FindStore(storeId, GetUserId());

            if (store == null)
            {
                return(NotFound());
            }
            AddPaymentMethods(store, model);

            bool needUpdate = false;

            if (store.SpeedPolicy != model.SpeedPolicy)
            {
                needUpdate        = true;
                store.SpeedPolicy = model.SpeedPolicy;
            }
            if (store.StoreName != model.StoreName)
            {
                needUpdate      = true;
                store.StoreName = model.StoreName;
            }
            if (store.StoreWebsite != model.StoreWebsite)
            {
                needUpdate         = true;
                store.StoreWebsite = model.StoreWebsite;
            }

            var blob = store.GetStoreBlob();

            blob.NetworkFeeDisabled           = !model.NetworkFee;
            blob.MonitoringExpiration         = model.MonitoringExpiration;
            blob.InvoiceExpiration            = model.InvoiceExpiration;
            blob.LightningDescriptionTemplate = model.LightningDescriptionTemplate ?? string.Empty;

            bool newExchange = blob.PreferredExchange != model.PreferredExchange;

            blob.PreferredExchange = model.PreferredExchange;

            blob.SetRateMultiplier(model.RateMultiplier);

            if (store.SetStoreBlob(blob))
            {
                needUpdate = true;
            }

            if (!blob.PreferredExchange.IsCoinAverage() && newExchange)
            {
                if (!GetSupportedExchanges().Select(c => c.Name).Contains(blob.PreferredExchange, StringComparer.OrdinalIgnoreCase))
                {
                    ModelState.AddModelError(nameof(model.PreferredExchange), $"Unsupported exchange ({model.RateSource})");
                    return(View(model));
                }
            }

            if (needUpdate)
            {
                await _Repo.UpdateStore(store);

                StatusMessage = "Store successfully updated";
            }

            return(RedirectToAction(nameof(UpdateStore), new
            {
                storeId = storeId
            }));
        }