public IActionResult Update(long id, [FromBody] UpdateProductModel model) { if (ModelState.IsValid) { var productsSet = _ctx.Set <ProductEntity>(); var product = productsSet.SingleOrDefault(e => e.Id == id); if (product == null) { return(NotFound()); } if (product.Version != model.Version) { return(Conflict(new { Message = "Entidade foi alterada por outro utilizador" })); } var modelCode = model.Code.Trim(); if (!product.Code.EqualsOrdinalIgnoreCase(modelCode) && productsSet.Any(e => e.Code.EqualsOrdinalIgnoreCase(modelCode))) { return(Conflict(new { Message = "Código duplicado" })); } var modelName = model.Name.Trim(); if (!product.Name.EqualsOrdinalIgnoreCase(modelName) && productsSet.Any(e => e.Name.EqualsOrdinalIgnoreCase(modelName))) { return(Conflict(new { Message = "Nome duplicado" })); } product.Code = model.Code; product.Name = model.Name; product.Description = model.Description; product.Price = model.Price; product.UpdatedOn = DateTimeOffset.Now; product.UpdatedBy = GetUserName(); product.Version = Guid.NewGuid(); productsSet.Update(product); _ctx.SaveChanges(); return(Json(new ProductActionResultModel { Version = product.Version })); } return(UnprocessableEntity(new { Message = "Entidade com dados inválidos", ModelState = ModelState.Select(e => new { Key = e.Key, Value = e.Value.Errors }) })); }
public ProductActionResultModel Update(long id, [FromBody] UpdateProductModel model) { if (!ModelState.IsValid) { throw new ValidationException(ModelState); } var productsSet = _ctx.Set <ProductEntity>(); var product = productsSet.SingleOrDefault(e => e.Id == id); if (product == null) { throw new NotFoundException(); } if (product.Version != model.Version) { throw new BusinessException("Entidade foi alterada por outro utilizador"); } var modelCode = model.Code.Trim(); if (!product.Code.EqualsOrdinalIgnoreCase(modelCode) && productsSet.Any(e => e.Code.EqualsOrdinalIgnoreCase(modelCode))) { throw new BusinessException("Código duplicado"); } var modelName = model.Name.Trim(); if (!product.Name.EqualsOrdinalIgnoreCase(modelName) && productsSet.Any(e => e.Name.EqualsOrdinalIgnoreCase(modelName))) { throw new BusinessException("Nome duplicado"); } product.Code = model.Code; product.Name = model.Name; product.Description = model.Description; product.Price = model.Price; product.UpdatedOn = DateTimeOffset.Now; product.UpdatedBy = this.GetUserName(); product.Version = Guid.NewGuid(); productsSet.Update(product); _ctx.SaveChanges(); return(new ProductActionResultModel { Version = product.Version }); }