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 OrdersController : Controller { private readonly IOrderService _orderService; public OrdersController(IOrderService orderService) { _orderService = orderService; } public async Task Index() { var orders = await _orderService.GetAllOrdersAsync(); return View(orders.OrderByDescending(o => o.CreatedAt)); } public async Task Details(Guid id) { var order = await _orderService.GetOrderByIdAsync(id); if (order == null) { return NotFound(); } return View(order); } public IActionResult Create() { return View(new CreateOrderDto()); } [HttpPost] public async Task Create(CreateOrderDto model) { if (!ModelState.IsValid) { return View(model); } var order = await _orderService.CreateOrderAsync(model); return RedirectToAction(nameof(Details), new { id = order.Id }); } public async Task Edit(Guid id) { var order = await _orderService.GetOrderByIdAsync(id); if (order == null) { return NotFound(); } return View(order); } [HttpPost] public async Task Edit(Guid id, OrderDto model) { if (!ModelState.IsValid) { return View(model); } var updateDto = new UpdateOrderStatusDto { Status = model.Status, TrackingNumber = model.TrackingNumber, Notes = model.Notes }; var success = await _orderService.UpdateOrderStatusAsync(id, updateDto); if (!success) { return NotFound(); } return RedirectToAction(nameof(Details), new { id }); } [HttpPost] public async Task UpdateStatus(Guid id, UpdateOrderStatusDto model) { var success = await _orderService.UpdateOrderStatusAsync(id, model); if (!success) { return NotFound(); } return RedirectToAction(nameof(Details), new { id }); } }