public async Task <Product> UpdateProduct(Messaging.Model.Product productToEdit) { if (!_repositoryProduct.AllEntities().Any(x => x.Id == productToEdit.ProductId)) { throw new EntityCommandExecutionException($"No product with id {productToEdit.ProductId}"); } var aditionalDetailsToAdd = productToEdit.AditionalDetails .Where(x => x.AditionalDetailId == 0) .Select(MapToDatabaseEntity) .ToList(); var aditionalDetailsToEdit = productToEdit.AditionalDetails .Where(x => x.AditionalDetailId != 0) .ToList(); var editedProduct = _repositoryProduct.AllEntities().First(x => x.Id == productToEdit.ProductId); _repositoryProduct.Update(editedProduct); editedProduct.Name = productToEdit.Name; editedProduct.Description = productToEdit.Description; editedProduct.CategoryId = productToEdit.CategoryId; editedProduct.RowVersion = productToEdit.RowVersion; aditionalDetailsToEdit.ForEach(x => { var editedDetail = editedProduct.AditionalDetails.First(y => y.Id == x.AditionalDetailId); _repositoryAditionalDetails.Update(editedDetail); editedDetail.Name = x.Name; editedDetail.Text = x.Text; editedDetail.RowVersion = x.RowVersion; }); aditionalDetailsToAdd.ForEach(x => { _repositoryAditionalDetails.Add(x); editedProduct.AditionalDetails.Add(x); }); await _unitOfWork.SaveChangesAsync(); return(editedProduct); }
private IProductUpdatedEvent MapProductAddedToMessaje(Product addedProduct, Messaging.Model.Product extraInformation) { return(new ProductUpdatedEvent { Product = new Messaging.Model.Product { ProductId = addedProduct.Id, CategoryId = (int)addedProduct.CategoryId, Description = addedProduct.Description, Name = addedProduct.Name, Price = extraInformation.Price, Inventory = extraInformation.Inventory, AditionalDetails = addedProduct.AditionalDetails.Select(x => new Messaging.Model.AditionalDetail { AditionalDetailId = x.Id, Name = x.Name, Text = x.Text }).ToList() } }); }
public async Task <Product> AddNewProduct(Messaging.Model.Product productToAdd) { var aditionalDetails = productToAdd.AditionalDetails.Select(x => new AditionalDetail { Id = x.AditionalDetailId, Name = x.Name, Text = x.Text }).ToList(); var addedProduct = new Product { CategoryId = productToAdd.CategoryId, Description = productToAdd.Description, Name = productToAdd.Name, AditionalDetails = aditionalDetails }; _repositoryProduct.Add(addedProduct); await _unitOfWork.SaveChangesAsync(); return(addedProduct); }