WebVenta/WebVentaCoche/Controllers/CartController.cs
2025-04-28 21:42:35 +02:00

95 lines
2.7 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebVentaCoche.DataBase;
using WebVentaCoche.Helpers;
using WebVentaCoche.Models;
using System.Linq;
namespace WebVentaCoche.Controllers
{
public class CartController : Controller
{
private readonly ApplicationDbContext _context;
public CartController(ApplicationDbContext context)
{
_context = context;
}
// GET: /Cart/Index
// Muestra la lista de productos del carrito y el total.
public IActionResult Index()
{
// Diccionario de IDs -> Cantidades desde sesión (o cualquier fuente)
var itemsDict = CartSessionHelper.GetCartItems(HttpContext.Session);
// Crear tu ViewModel
var viewModel = new CartViewModel();
foreach (var kvp in itemsDict)
{
var productId = kvp.Key;
var amount = kvp.Value;
var product = _context.Products.Find(productId);
if (product != null)
{
viewModel.Products.Add(new CartProduct
{
Product = product,
Amount = amount
});
}
}
return View(viewModel);
}
// POST: /Cart/AddProductToCart
// Añade el producto al carrito y devuelve un JSON con el nuevo contador
[HttpPost]
public IActionResult AddProductToCart(int id)
{
var product = _context.Products.Find(id);
if (product == null)
{
return NotFound();
}
// Añade a la sesión
CartSessionHelper.AddToCart(HttpContext.Session, id);
// Devuelve la cuenta actualizada para actualizar el badge
var productIds = CartSessionHelper.GetCartItems(HttpContext.Session);
int count = productIds.Count;
return Json(new { success = true, cartCount = count });
}
// POST: /Cart/Remove
// Elimina un producto según su ID
[HttpPost]
public IActionResult Remove(int id)
{
CartSessionHelper.RemoveFromCart(HttpContext.Session, id);
return RedirectToAction("Index");
}
// POST: /Cart/Clear
// Vacía todo el carrito (la sesión)
[HttpPost]
public IActionResult Clear()
{
CartSessionHelper.ClearCart(HttpContext.Session);
return RedirectToAction("Index");
}
// GET: /Cart/Checkout
// (Opcional) Muestra un formulario o datos para la compra/pago.
public IActionResult Checkout()
{
return View();
}
}
}