ProductController.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using Microsoft.AspNetCore.Diagnostics;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Products.Backoffice.Models;
  4. using Products.Business.Domain;
  5. using Products.Business.Persistence;
  6. using Products.Common.Exceptions;
  7. namespace Products.Backoffice.Controllers;
  8. public class ProductController : Controller
  9. {
  10. private readonly DataContext _ctx;
  11. private readonly ILogger<ProductController> _logger;
  12. public ProductController(DataContext dbContext, ILogger<ProductController> logger)
  13. {
  14. _ctx = dbContext;
  15. _logger = logger;
  16. }
  17. // GET
  18. public IActionResult Index()
  19. {
  20. var products = _ctx.Products.ToList();
  21. return View(products);
  22. }
  23. // GET /product/1
  24. public IActionResult Details(int id)
  25. {
  26. var product = _ctx.Products.Find(id);
  27. return View(product);
  28. }
  29. public IActionResult Create()
  30. {
  31. return View();
  32. }
  33. [HttpPost]
  34. public IActionResult Create(Product product)
  35. {
  36. if (!ModelState.IsValid)
  37. {
  38. return View(product);
  39. }
  40. _ctx.Products.Add(product);
  41. _ctx.SaveChanges();
  42. return RedirectToAction(nameof(Index));
  43. }
  44. public IActionResult Edit(int id)
  45. {
  46. var product = _ctx.Products.Find(id);
  47. if (product == null)
  48. {
  49. return NotFound();
  50. }
  51. return View(product);
  52. }
  53. [HttpPost]
  54. public IActionResult Edit(int id, Product product)
  55. {
  56. if (id != product.Id)
  57. {
  58. return BadRequest();
  59. }
  60. if (!ModelState.IsValid)
  61. {
  62. return View(product);
  63. }
  64. _ctx.Products.Update(product);
  65. _ctx.SaveChanges();
  66. return RedirectToAction(nameof(Index));
  67. }
  68. public IActionResult Delete(int id)
  69. {
  70. try
  71. {
  72. var p = _ctx.Products.Find(id);
  73. if (p == null)
  74. {
  75. return NotFound();
  76. }
  77. _ctx.Products.Remove(p);
  78. _ctx.SaveChanges();
  79. }
  80. catch (Exception e)
  81. {
  82. return e is RecordNotFoundException ? NotFound() : StatusCode(500);
  83. }
  84. return RedirectToAction(nameof(Index));
  85. }
  86. [Route("Error/{statusCode:int}")]
  87. public IActionResult Error(int statusCode)
  88. {
  89. var feature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
  90. return View(new ErrorViewModel { StatusCode = statusCode, OriginalPath = feature?.OriginalPath });
  91. }
  92. }