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

134 lines
4.1 KiB
C#

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;
}
public async Task<IActionResult> 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);
}
public async Task<IActionResult> Details(int id)
{
var product = await _context.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
return View(product);
}
[HttpGet]
public IActionResult Create()
{
return View();
}
[HttpPost]
public async Task<IActionResult> 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<IActionResult> Edit(int id)
{
var product = await _context.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
return View(product);
}
[HttpPut]
public async Task<IActionResult> 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<IActionResult> 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" });
}
}
}