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
                })
            }));
        }
Exemple #2
0
        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
            });
        }