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 CategoriesController : Controller { private readonly ICategoryService _categoryService; public CategoriesController(ICategoryService categoryService) { _categoryService = categoryService; } public async Task Index() { var categories = await _categoryService.GetAllCategoriesAsync(); return View(categories); } public IActionResult Create() { return View(new CreateCategoryDto()); } [HttpPost] public async Task Create(CreateCategoryDto model) { Console.WriteLine($"Received Category: Name='{model?.Name}', Description='{model?.Description}'"); Console.WriteLine($"ModelState.IsValid: {ModelState.IsValid}"); if (!ModelState.IsValid) { foreach (var error in ModelState) { Console.WriteLine($"ModelState Error - Key: {error.Key}, Errors: {string.Join(", ", error.Value.Errors.Select(e => e.ErrorMessage))}"); } return View(model); } await _categoryService.CreateCategoryAsync(model); return RedirectToAction(nameof(Index)); } public async Task Edit(Guid id) { var category = await _categoryService.GetCategoryByIdAsync(id); if (category == null) { return NotFound(); } var model = new UpdateCategoryDto { Name = category.Name, Description = category.Description, IsActive = category.IsActive }; ViewData["CategoryId"] = id; return View(model); } [HttpPost] public async Task Edit(Guid id, UpdateCategoryDto model) { if (!ModelState.IsValid) { ViewData["CategoryId"] = id; return View(model); } var success = await _categoryService.UpdateCategoryAsync(id, model); if (!success) { return NotFound(); } return RedirectToAction(nameof(Index)); } [HttpPost] public async Task Delete(Guid id) { await _categoryService.DeleteCategoryAsync(id); return RedirectToAction(nameof(Index)); } }