Product controller, model, viewmodels (Before Inventory relation)
Fri Aug 09 2024 12:13:33 GMT+0000 (Coordinated Universal Time)
Saved by @iamkatmakhafola
//controller
namespace av_motion_api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private readonly AppDbContext _appContext;
public readonly IRepository _repository;
public ProductController(AppDbContext _context, IRepository repository)
{
_appContext = _context;
_repository = repository;
}
// GET: api/<ProductController>
[HttpGet]
[Route("GetAllProducts")]
public async Task<IActionResult> GetAllProducts()
{
try
{
var products = await _appContext.Products.ToListAsync();
return Ok(products);
}
catch (Exception)
{
return BadRequest();
}
}
// GET api/<ProductController>/5
[HttpGet]
[Route("GetProductById/{id}")]
public async Task<IActionResult> GetProductById(int id)
{
try
{
var product = await _appContext.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
catch (Exception)
{
return BadRequest();
}
}
//POST api/<ProductController>
[HttpPost]
[DisableRequestSizeLimit]
[Route("PostProduct")]
public async Task<IActionResult> PostProduct([FromForm] ProductViewModel product)
{
var formCollection = await Request.ReadFormAsync();
var product_Img = formCollection.Files.FirstOrDefault();
using (var memoryStream = new MemoryStream())
{
await product_Img.CopyToAsync(memoryStream);
var fileBytes = memoryStream.ToArray();
string base64Image = Convert.ToBase64String(fileBytes);
var newProduct = new Product()
{
Product_Name = product.Product_Name,
Product_Description = product.Product_Description,
Product_Img = base64Image,
Quantity = product.Quantity,
Unit_Price = product.Unit_Price,
Purchase_Price = product.Purchase_Price,
Size = product.Size,
Product_Category_ID = product.Product_Category_ID,
};
if (_appContext.Products == null)
{
return Problem("Entity set 'AppDbContext.Products' is null.");
}
_appContext.Products.Add(newProduct);
await _appContext.SaveChangesAsync();
return Ok(newProduct);
}
}
// PUT api/<ProductController>/5
[HttpPut]
[Route("PutProduct/{id}")]
public async Task<IActionResult> PutProduct(int id, [FromForm] ProductViewModel updatedProduct)
{
var existingProduct = await _appContext.Products.FindAsync(id);
if (existingProduct == null)
{
return NotFound();
}
// Read the form data to get the photo file
var formCollection = await Request.ReadFormAsync();
var product_Img = formCollection.Files.FirstOrDefault();
existingProduct.Product_Name = updatedProduct.Product_Name;
existingProduct.Product_Description = updatedProduct.Product_Description;
existingProduct.Quantity = updatedProduct.Quantity;
existingProduct.Unit_Price = updatedProduct.Unit_Price;
existingProduct.Purchase_Price = updatedProduct.Purchase_Price;
existingProduct.Size = updatedProduct.Size;
existingProduct.Product_Category_ID = updatedProduct.Product_Category_ID;
if (product_Img != null && product_Img.Length > 0)
{
using (var memoryStream = new MemoryStream())
{
await product_Img.CopyToAsync(memoryStream);
var fileBytes = memoryStream.ToArray();
string base64Image = Convert.ToBase64String(fileBytes);
existingProduct.Product_Img = base64Image; // Store the base64 string of the photo
}
}
_appContext.Products.Update(existingProduct);
await _appContext.SaveChangesAsync();
return Ok(existingProduct);
}
// DELETE api/<ProductController>/5
[HttpDelete]
[Route("DeleteProduct/{id}")]
public async Task<IActionResult> DeleteProduct(int id)
{
if (_appContext.Products == null)
{
return NotFound();
}
var product = await _appContext.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
_appContext.Products.Remove(product);
await _appContext.SaveChangesAsync();
return NoContent();
}
}
}
//model
namespace av_motion_api.Models
{
public class Product
{
[Key]
public int Product_ID { get; set; }
[Required, StringLength(100)]
public string Product_Name { get; set; }
[Required, StringLength(100)]
public string Product_Description { get; set; }
[Required]
public string Product_Img { get; set; }
public decimal? Purchase_Price { get; set; }
[Required]
public int Quantity { get; set; }
[Required]
public decimal Unit_Price { get; set; }
[Required]
public string Size { get; set; }
public int Product_Category_ID { get; set; }
[ForeignKey(nameof(Product_Category_ID))]
public Product_Category Product_Category { get; set; }
}
}
//viewmodel
namespace av_motion_api.ViewModels
{
public class ProductViewModel
{
public string Product_Name { get; set; }
public string Product_Description { get; set; }
public IFormFile Product_Img { get; set; }
public int Quantity { get; set; }
public decimal Unit_Price { get; set; }
public decimal? Purchase_Price { get; set; }
public string Size { get; set; }
public int Product_Category_ID { get; set; }
}
}



Comments