using GrossesMitainesAPI.Models; using System.Linq; using GrossesMitainesAPI.Data; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Authorization; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; namespace GrossesMitainesAPI.Controllers; [EnableCors("_myAllowSpecificOrigins")] [ApiController, Route("api/[controller]")] public class ProductController : ControllerBase { private readonly ILogger _logger; private readonly InventoryContext _context; public ProductController(ILogger logger, InventoryContext context) { _logger = logger; _context = context; } [EnableCors("_myAllowSpecificOrigins")] [HttpGet(Name = "Product"), AllowAnonymous] public Product Get(int id) { Product prod; try { prod = _context.Products.Where(x => x.Id == id).First(); } catch (Exception e) { _logger.LogError(8, e.Message); prod = new Product(); } return prod; } [EnableCors("_myAllowSpecificOrigins")] [HttpPost(Name = "Product")] public ActionResult Post(Product prod) { if (prod.Price <= prod.PromoPrice) prod.PromoPrice = prod.Price - 0.01M; try { _context.Products.Add(prod); _context.SaveChanges(); } catch (Exception e) { _logger.LogError(8, e.Message); return BadRequest(); } return prod; } [EnableCors("_myAllowSpecificOrigins")] [HttpPut(Name = "Product")] public ActionResult Put(Product prod) { try { _context.Products.Update(prod); _context.SaveChanges(); } catch (Exception e) { _logger.LogError(8, e.Message); return BadRequest(); } return prod; } [EnableCors("_myAllowSpecificOrigins")] [HttpPatch(Name = "Product")] public void Patch(int id, string title, string category, string description, decimal? price, decimal? promoprice, uint? quantity, string? status, string imagename) { try { Product prod = _context.Products.Where(x => x.Id == id).First(); if (title != null || title != "") prod.Title = title; if (category != null || category != "") prod.Category = category; if (description != null || description != "") prod.Description = description; if (price.HasValue || price > 0) prod.Price = (decimal)price; if (promoprice.HasValue || promoprice > prod.Price) prod.PromoPrice = (decimal)promoprice; if (quantity.HasValue) prod.Quantity = (uint)quantity; switch (status) { case "isAvailable": prod.Status = Product.States.Available; break; case "isUnavailable": prod.Status = Product.States.Unavailable; break; case "isBackOrder": prod.Status = Product.States.BackOrder; break; ; case "isClearance": prod.Status = Product.States.Clearance; break; case "isPromotion": prod.Status = Product.States.Promotion; break; case "isDiscontinued": prod.Status = Product.States.Discontinued; break; default: break; } if (imagename != null || imagename != "") prod.ImageName = imagename; _context.Products.Update(prod); _context.SaveChanges(); } catch (Exception e) { _logger.LogError(8, e.Message); } } [EnableCors("_myAllowSpecificOrigins")] [HttpDelete(Name = "Product")] public IActionResult DeleteProduct(int id) { try { _context.Products.Remove(_context.Products.Where(x => x.Id == id).First()); _context.SaveChanges(); } catch (Exception e) { _logger.LogError(8, e.Message); } return Ok(); } }