using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using LittleShop.Services; using LittleShop.DTOs; namespace LittleShop.Areas.Admin.Controllers; [Area("Admin")] [Authorize(Policy = "AdminOnly")] public class VariantCollectionsController : Controller { private readonly IVariantCollectionService _variantCollectionService; public VariantCollectionsController(IVariantCollectionService variantCollectionService) { _variantCollectionService = variantCollectionService; } public async Task Index() { var collections = await _variantCollectionService.GetAllVariantCollectionsAsync(); return View(collections); } public IActionResult Create() { return View(new CreateVariantCollectionDto()); } [HttpPost] [ValidateAntiForgeryToken] public async Task Create(CreateVariantCollectionDto model) { if (!ModelState.IsValid) { return View(model); } await _variantCollectionService.CreateVariantCollectionAsync(model); return RedirectToAction(nameof(Index)); } public async Task Edit(Guid id) { var collection = await _variantCollectionService.GetVariantCollectionByIdAsync(id); if (collection == null) { return NotFound(); } var model = new UpdateVariantCollectionDto { Name = collection.Name, PropertiesJson = collection.PropertiesJson, IsActive = collection.IsActive }; ViewData["CollectionId"] = id; return View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task Edit(Guid id, UpdateVariantCollectionDto model) { if (!ModelState.IsValid) { ViewData["CollectionId"] = id; return View(model); } var success = await _variantCollectionService.UpdateVariantCollectionAsync(id, model); if (!success) { return NotFound(); } return RedirectToAction(nameof(Index)); } [HttpPost] [ValidateAntiForgeryToken] public async Task Delete(Guid id) { await _variantCollectionService.DeleteVariantCollectionAsync(id); return RedirectToAction(nameof(Index)); } }