From 9383a2fb09ffb60cfe63683106945bd688affa59 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Wed, 1 Jun 2022 21:13:43 +0200 Subject: feat: Initial commit after clean slate --- src/Controllers/ProductsController.cs | 121 ++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 src/Controllers/ProductsController.cs (limited to 'src/Controllers/ProductsController.cs') diff --git a/src/Controllers/ProductsController.cs b/src/Controllers/ProductsController.cs new file mode 100644 index 0000000..9bd7e93 --- /dev/null +++ b/src/Controllers/ProductsController.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using IOL.Helpers; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Localization; +using VSH.Data; +using VSH.Data.Database; +using VSH.Data.Enums; +using VSH.Data.Results; +using VSH.Data.Static; +using VSH.Utilities; + +namespace VSH.Controllers; + +[Authorize] +public class ProductsController : MainControllerBase +{ + private readonly MainDbContext _context; + private readonly IStringLocalizer _localizer; + + public ProductsController( + MainDbContext context, + IStringLocalizer localizer + ) { + _context = context; + _localizer = localizer; + } + + [HttpGet] + [AllowAnonymous] + public ActionResult GetAllProducts() { + return Ok(_context.Products.Include(c => c.Category)); + } + + [HttpGet("{id}")] + [AllowAnonymous] + public Product GetProduct(Guid id) { + return _context.Products + .Include(c => c.Category) + .SingleOrDefault(c => c.Id == id); + } + + [HttpPost("upload-images")] + public ActionResult UploadImages() { + if (Request.Form.Files.Count == 0) + return BadRequest(); + var filePaths = new List(); + var fileNames = new List(); + foreach (var file in Request.Form.Files) { + var fileName = RandomString.Generate(8, true) + file.FileName.ExtractExtension(); + var filePath = Path.Combine(AppPaths.ProductImages.HostPath, fileName); + using var writeStream = new FileStream(filePath, FileMode.CreateNew); + file.CopyTo(writeStream); + filePaths.Add(new FileInfo(filePath)); + fileNames.Add(fileName); + } + + foreach (var filePath in filePaths) { + ImageFunctions.CreateProductImageCollection(filePath); + } + + return Ok(fileNames); + } + + [HttpPost("create")] + public ActionResult CreateProductAsync(Product payload) { + payload.SetBaseValues(); + var category = _context.Categories.SingleOrDefault(p => p.Id == payload.Category.Id); + if (category == default) + return BadRequest(new ErrorResult(_localizer["Kunne ikke finne kategorien"])); + payload.Category = category; + payload.Slug = payload.Name.Slugified(); + _context.Products.Add(payload); + _context.SaveChanges(); + return Ok(); + } + + + [HttpPost("{id}/update")] + public ActionResult UpdateProductAsync([FromRoute] Guid id, [FromBody] Product payload) { + var product = _context.Products.SingleOrDefault(p => p.Id == id); + if (product == default) + return NotFound(new ErrorResult(_localizer["Kunne ikke finne produktet"])); + var category = _context.Categories.AsNoTracking().SingleOrDefault(c => c.Id == payload.Category.Id); + if (category == default) + return NotFound(new ErrorResult(_localizer["Kunne ikke finne kategorien"])); + + var newImages = payload.Images.Select(c => new ProductImage(c.FileName, c.Order)).ToList(); + + product.Images = newImages; + product.Category = category; + product.Name = payload.Name; + product.Slug = product.Name.Slugified(); + product.Description = payload.Description; + product.Price = payload.Price; + product.Count = payload.Count; + product.PriceSuffix = payload.PriceSuffix; + product.ShowOnFrontpage = payload.ShowOnFrontpage; + product.Updated = DateTime.UtcNow; + _context.SaveChanges(); + + return Ok(); + } + + [HttpDelete("{id}/delete")] + public ActionResult DeleteProductAsync(Guid id) { + var product = _context.Products.SingleOrDefault(p => p.Id == id); + if (product == default) + return NotFound(new ErrorResult(_localizer["Kunne ikke finne produktet"])); + + product.VisibilityState = ProductVisibility.DELETED; + product.Updated = DateTime.UtcNow; + + _context.SaveChanges(); + return Ok(); + } +} \ No newline at end of file -- cgit v1.3