public async Task <Product> Update(string slug, CreateOrEditProduct dto) { var product = await _context.Products.Include(a => a.ProductCategories) .Include(a => a.ProductTags) .Where(x => x.Slug == slug).FirstOrDefaultAsync(); if (product == null) { throw new ResourceNotFoundException(); } product.Name = dto.Name.Trim(); product.Slug = dto.Name.Trim().Slugify(); product.Description = dto.Description; if (dto.Categories != null && dto.Categories.Count() > 0) { foreach (var category in dto.Categories) { Category cat = _context.Categories .SingleOrDefault(c => c.Name.Equals(category.Name)); if (cat == null) { cat = new Category { Name = category.Name, }; _context.Categories.Add(cat); await _context.SaveChangesAsync(); } // If the product was not yet associated to the category then do it now if (!product.ProductCategories.Any(ac => ac.Product == product && ac.Category == cat)) { product.ProductCategories.Add(new ProductCategory { Product = product, Category = cat }); } } } if (_context.ChangeTracker.Entries().First(x => x.Entity == product).State == EntityState.Modified) { product.UpdatedAt = DateTime.UtcNow; } await _context.SaveChangesAsync(); return(product); }
public async Task <IActionResult> UpdateProduct(string slug, [FromBody] CreateOrEditProduct dto) { if (!ModelState.IsValid) { return(StatusCodeAndDtoWrapper.BuilBadRequest(ModelState)); } Product product = await _productsService.Update(slug, dto); return(StatusCodeAndDtoWrapper.BuildSuccess(ProductDetailsDto.Build(product), "Updated successfully")); }