using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using WebVentaCoche.DataBase; using WebVentaCoche.Models; namespace WebVentaCoche.Controllers { public class ProductsController : Controller { private readonly ApplicationDbContext _context; public ProductsController(ApplicationDbContext context) { _context = context; } // Lista de productos paginada public async Task Index(int page = 1, int pageSize = 10) { var products = await _context.Products .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(); ViewBag.TotalPages = (int)Math.Ceiling((double)_context.Products.Count() / pageSize); ViewBag.CurrentPage = page; return View(products); } // Ver detalles de un producto public async Task Details(int id) { var product = await _context.Products.FindAsync(id); if (product == null) { return NotFound(); } return View(product); } // Página para añadir producto [HttpGet] public IActionResult Create() { return View(); } // Procesar el POST para añadir producto [HttpPost] public async Task Create(Product product, IFormFile Image) { if (ModelState.IsValid) { if (Image != null && Image.Length > 0) { // Crear la carpeta si no existe var imagesPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images"); if (!Directory.Exists(imagesPath)) { Directory.CreateDirectory(imagesPath); } // Generar un nombre único para la imagen var uniqueFileName = Guid.NewGuid().ToString() + Path.GetExtension(Image.FileName); // Guardar la imagen en la carpeta wwwroot/images var filePath = Path.Combine(imagesPath, uniqueFileName); using (var stream = new FileStream(filePath, FileMode.Create)) { await Image.CopyToAsync(stream); } // Guardar la ruta relativa en la base de datos product.ImagePath = $"/images/{uniqueFileName}"; } _context.Add(product); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } return View(product); } [HttpGet] public async Task Edit(int id) { var product = await _context.Products.FindAsync(id); if (product == null) { return NotFound(); } return View(product); } [HttpPut] public async Task Edit(int id, [FromBody] Product updatedProduct) { if (id != updatedProduct.Id) { return BadRequest("El ID del producto no coincide."); } var product = await _context.Products.FindAsync(id); if (product == null) { return NotFound(); } product.Name = updatedProduct.Name; product.ShortDescription = updatedProduct.ShortDescription; product.LongDescription = updatedProduct.LongDescription; product.Price = updatedProduct.Price; _context.Products.Update(product); await _context.SaveChangesAsync(); return Ok(new { message = "Producto actualizado correctamente" }); } [HttpDelete] public async Task Delete(int id) { var product = await _context.Products.FindAsync(id); if (product == null) { return NotFound(); } _context.Products.Remove(product); await _context.SaveChangesAsync(); return Ok(new { message = "Producto eliminado correctamente" }); } } }