using System.Threading.Tasks; using AutoMapper; using gehGassi.Core.Interfaces; using gehGassi.Core.Services; using gehGassi.Permissions; using gehGassi.Web.Auth; using gehGassi.Web.Auth.Attributes; using gehGassi.Web.Helper; using gehGassi.Web.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; namespace gehGassi.Web.Controllers { /// /// Controller für die Verwaltung der Shop-Einstellungen /// public class ShopSettingsController : BaseController { private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; private readonly IShopSettingsService _shopSettingsService; /// /// Erstellt eine Instanz /// /// Instanz eines IMapper /// Instanz eines IStringLocalizer /// Instanz eines IShipmentCostService public ShopSettingsController(IMapper mapper, IStringLocalizer localizer, IShopSettingsService shopSettingsService) { _mapper = mapper; _localizer = localizer; _shopSettingsService = shopSettingsService; } /// /// Gibt einen View für die Verwaltung von Shopeinstellungen zurück /// /// View [Authorize(Policy = Policies.PowerUserOnly)] [HasPermission(Permission.SettingsManage, Permission.SettingsShop)] public IActionResult Index() { return View(); } /// /// Bearbeiten der Shop-Einstellungen /// /// PartialView [Authorize(Policy = Policies.PowerUserOnly)] [HasPermission(Permission.SettingsManage, Permission.SettingsShop)] [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public async Task Edit() { var item = await _shopSettingsService.GetAsync(); if (item != null) { var model = _mapper.Map(item); return PartialView("_Edit", model); } return PartialView("_Error"); } /// /// Bearbeiten der Shop-Einstellungen /// /// Model /// Json [Authorize(Policy = Policies.PowerUserOnly)] [HasPermission(Permission.CustomersManage, Permission.SettingsShop)] [ValidateAntiForgeryToken] [HttpPost] public async Task Edit(ShopSettingsVm model) { var result = new ResponseVm { Success = false }; if (ModelState.IsValid) { var item = await _shopSettingsService.GetAsync(); if (item != null) { _mapper.Map(model, item); await _shopSettingsService.CommitAsync(User.Identity.Name); result.Data = item.ToCamelCaseJson(); result.Success = true; result.Html = string.Empty; return Json(new { result.Success, result.Html, result.Data }); } } result.Html = await PartialView("_Edit", model).ToStringAsync(ControllerContext); return Json(result); } } }