コード例 #1
0
        public async Task <IActionResult> UpdateProduct(Guid productId, ProductForUpdate productToUpdateDto)
        {
            var productFormRepo = await _onlineShoppingRepo.GetProduct(productId);

            _mapper.Map(productToUpdateDto, productFormRepo);

            if (await _onlineShoppingRepo.SaveChanges())
            {
                return(NoContent());
            }

            throw new Exception($"updaing Product {productId} is failed");
        }
コード例 #2
0
        public async Task <ActionResult <Product> > UpdateAsync(string id, [FromForm] ProductForUpdate model)
        {
            if (id != model.Id)
            {
                return(BadRequest(new ErrorResponse(HttpStatusCode.BadRequest, "Id Invalid")));
            }

            if (!ModelState.IsValid)
            {
                var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
                return(BadRequest(new ErrorResponse(HttpStatusCode.BadRequest, "Validation error", errors)));
            }
            //var keyvalue = Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString())["photos"].ToString();
            //model.Photos = JsonConvert.DeserializeObject<ProductPhotoDTO[]>(keyvalue);

            var result = await _productService.UpdateProductAsync(model);

            return(result.Succeed
                ? Ok(result.Value)
                : BadRequest(new ErrorResponse(HttpStatusCode.BadRequest, "Update fail", result.Errors)));
        }
コード例 #3
0
        public async Task <ProcessResult <ProductDTO> > UpdateProductAsync(ProductForUpdate model)
        {
            async Task <ProductDTO> action()
            {
                string error   = "";
                var    product = await _repoWrapper.Product.FindProductByIdAsync(model.Id);

                if (product == null)
                {
                    throw new InvalidOperationException("Id is not exist");
                }

                _ = _mapper.Map(model, product);
                product.ModifyBy   = CurrentUser.UserName;
                product.ModifyDate = DateTime.UtcNow;

                // add image file
                if (model.Files != null)
                {
                    var photos = new List <ProductPhoto>();
                    for (int i = 0; i < model.Files.Length; i++)
                    {
                        var resultUpload = await _cloudDinaryService.AddAsync(model.Files[i]);

                        if (resultUpload.Error != null)
                        {
                            error = resultUpload.Error.Message;
                            break;
                        }

                        photos.Add(new ProductPhoto
                        {
                            Id         = Guid.NewGuid(),
                            ProductId  = product.Id,
                            PublicId   = resultUpload.PublicId,
                            Url        = resultUpload.SecureUrl.AbsoluteUri,
                            IsMain     = false,
                            CreateBy   = CurrentUser.UserName,
                            CreateDate = DateTime.UtcNow
                        });
                    }

                    if (error.Length > 0)
                    {
                        photos.ForEach(async x => await DeletePhotoFromCloudinary(x.PublicId));
                        throw new InvalidOperationException(error);
                    }

                    if (product.ProductPhotos.Count() == 0)
                    {
                        photos[0].IsMain      = true;
                        product.ProductPhotos = photos;
                    }
                    else
                    {
                        photos.ForEach(item => product.ProductPhotos.Add(item));
                    }
                }

                _repoWrapper.Product.Update(product);
                return(await _repoWrapper.SaveAsync() > 0 ? _mapper.Map <ProductDTO>(product) : throw new InvalidOperationException("Save fail"));
            }

            return(await Process.RunAsync(action));
        }