public async Task <IActionResult> UpdateAsync(Guid id, [FromBody] ProductEditRequest request, CancellationToken cancellationToken)
        {
            request.Id = id;
            var responseModel = await this.mediator.Send(request, cancellationToken);

            return(new CustomActionResult(responseModel));
        }
예제 #2
0
        public async Task <int> Update(ProductEditRequest request)
        {
            var product = await _context.Products.FindAsync(request.Id);

            var productTranslation = await _context.ProductTranslations.FirstOrDefaultAsync(x => x.ProductId == request.Id &&
                                                                                            x.LanguageId == request.LanguageId);

            if (product == null || productTranslation == null)
            {
                throw new ShoppingException($"Can not find product: {request.Id}");
            }
            productTranslation.Name           = request.Name;
            productTranslation.SeoAlias       = request.SeoAlias;
            productTranslation.SeoDescription = request.SeoDescription;
            productTranslation.SeoTitle       = request.SeoTitle;
            productTranslation.Description    = request.Description;
            productTranslation.Details        = request.Details;

            //update image
            if (request.ThumbnailImage != null)
            {
                var productImage = await _context.ProductImages.FirstOrDefaultAsync(x => x.IsDefault == true && x.ProductId == request.Id);

                productImage.FileSize  = request.ThumbnailImage.Length;
                productImage.ImagePath = await this.SaveFile(request.ThumbnailImage);

                _context.ProductImages.Update(productImage);
            }

            return(await _context.SaveChangesAsync());
        }
예제 #3
0
        public async Task <ResponseMessage <bool> > ProductEdit([FromBody] ProductEditRequest request)
        {
            var response = new ResponseMessage <bool>()
            {
                Extension = false
            };

            if (!(request.Files.Count(y => y.IsIcon) >= 0))
            {
                throw new ZCustomizeException(ResponseCodeEnum.ModelStateInvalid, "请设置一张封面图");
            }
            try
            {
                if (await _prodoctManager.IsExists(request.Id) || string.IsNullOrWhiteSpace(request.Id))
                {
                    response = await _prodoctManager.ProductAddAsync(request, HttpContext.RequestAborted);
                }
                else
                {
                    response = await _prodoctManager.ProductUpdateAsync(request, HttpContext.RequestAborted);
                }
            }
            catch (Exception e)
            {
                response.Code    = ResponseCodeDefines.ServiceError;
                response.Message = "编辑商品失败,请重试";
                _logger.LogInformation($"编辑商品失败异常:{JsonHelper.ToJson(e)}");
            }
            return(response);
        }
예제 #4
0
        public async Task <IActionResult> Edit([FromForm] ProductEditRequest request)
        {
            var affectedResult = await _manageProductService.edit(request);

            if (affectedResult == 0)
            {
                return(BadRequest());
            }
            return(Ok());
        }
예제 #5
0
        public async Task <IActionResult> Update([FromForm] ProductEditRequest request)
        {
            var result = await _manageProductService.Update(request);

            if (result == 0)
            {
                return(BadRequest());
            }
            return(Ok());
        }
예제 #6
0
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="editRequest"></param>
        /// <returns></returns>
        public async Task <ResponseMessage <bool> > ProductUpdateAsync(ProductEditRequest editRequest, CancellationToken cancellationToken)
        {
            var response = new ResponseMessage <bool>()
            {
                Extension = false
            };
            var Product = _mapper.Map <Product>(editRequest);

            using (var transaction = await _transaction.BeginTransaction())
            {
                try
                {
                    //存在修改图片 先判断原来是否有图片  存在判断是否有修改 对比异常 删除原理和新增现有数据?
                    var oldfile = await _filesStore.IQueryableListAsync().Where(item => !item.IsDeleted && item.ProductId == editRequest.Id).Select(img => img.Url).ToListAsync(); //1,5,4,3

                    var newfile = editRequest.Files.Select(y => y.Url);                                                                                                            //1,2,3,4
                                                                                                                                                                                   //求差集 TODO 待测试
                    var except = oldfile.Except(newfile).ToList();                                                                                                                 //2
                    if (except.Any())
                    {
                        var photo = new List <Files>()
                        {
                        };
                        except.ForEach(file =>
                        {
                            photo.Add(new Files
                            {
                                Id        = Guid.NewGuid().ToString(),
                                IsDeleted = false,
                                Url       = file,
                                ProductId = editRequest.Id
                            });
                        });
                        await _filesStore.AddRangeEntityAsync(photo);
                    }
                    if (await _ProductStore.PutEntityAsync(Product.Id, Product))
                    {
                        response.Extension = true;
                    }
                    await transaction.CommitAsync(cancellationToken);
                }
                catch (Exception e)
                {
                    await transaction.RollbackAsync(cancellationToken);

                    throw e;
                }
            }
            return(response);
        }
        public async Task <IActionResult> EditProduct([FromBody] ProductEditRequest request, [FromForm] ProductEditRequest request2)
        {
            if (!ModelState.IsValid)
            {
                return(StatusCode(400));
            }

            var dto = _mapper.Map <ProductEditDTO>(request);

            if (await _manager.EditProduct(dto))
            {
                return(StatusCode(201));
            }

            throw new Exception();
        }
예제 #8
0
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="editRequest"></param>
        /// <returns></returns>
        public async Task <ResponseMessage <bool> > ProductAddAsync(ProductEditRequest editRequest, CancellationToken cancellationToken)
        {
            var response = new ResponseMessage <bool>()
            {
                Extension = false
            };

            if (editRequest == null)
            {
                throw new ArgumentNullException();
            }
            using (var transaction = await _transaction.BeginTransaction())
            {
                try
                {
                    var product = _mapper.Map <Product>(editRequest);
                    product.Id   = Guid.NewGuid().ToString();
                    product.Icon = editRequest.Files.Where(item => item.IsIcon).SingleOrDefault().Url;
                    //新增图片
                    var images = new List <Files> {
                    };
                    editRequest.Files.ForEach(img =>
                    {
                        images.Add(new Files
                        {
                            IsDeleted = false,
                            Id        = Guid.NewGuid().ToString(),
                            Url       = img.Url,
                            IsIcon    = img.IsIcon,
                            ProductId = product.Id
                        });
                    });
                    await _filesStore.AddRangeEntityAsync(images);

                    response.Extension = await _ProductStore.AddEntityAsync(product);

                    await transaction.CommitAsync(cancellationToken);
                }
                catch (Exception e)
                {
                    await transaction.RollbackAsync(cancellationToken);

                    throw e;
                }
            }
            return(response);
        }
        public async Task <IActionResult> ProductEdit(int id, ProductEditRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(StatusCode(400));
            }

            var identityClaimNum = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var dto = _mapper.Map <ProductEditDTO>(request);

            if (await _manager.ProductEdit(dto))
            {
                return(StatusCode(201));
            }

            throw new Exception();
        }
예제 #10
0
        public async Task <int> edit(ProductEditRequest request)
        {
            var product = await _context.Products.FindAsync(request.Id);

            var productTranslations = await _context.ProductTranslations.FirstOrDefaultAsync(x => x.ProductId == request.Id && x.LanguageId == request.LanguageId);

            if (product == null || productTranslations == null)
            {
                throw new EShopException($"Cannot Find A Product With Id : {request.Id}");
            }

            productTranslations.Name           = request.Name;
            productTranslations.SeoAlias       = request.SeoAlias;
            productTranslations.SeoDescription = request.SeoDescription;
            productTranslations.SeoTitle       = request.SeoTitle;
            productTranslations.Description    = request.Description;
            productTranslations.Details        = request.Details;
            return(await _context.SaveChangesAsync());
        }
        public async Task <ProductEditResponse> Edit(ProductEditRequest request)
        {
            var oldProduct = await _productDataService.Query.IncludeNecessaryData().FirstOrDefaultAsync(x => x.Id == request.Id);

            if (!HasAccessToManage(oldProduct, request.RequestOwner))
            {
                return new ProductEditResponse()
                       {
                           Access = ResponseAccess.Deny
                       }
            }
            ;
            await _productFacade.UpdateAsync(oldProduct, request.Model);

            await base.BaseAfterUpdateAsync(oldProduct, request.RequestOwner);

            return(new ProductEditResponse()
            {
                Access = ResponseAccess.Granted, Updated = oldProduct.MapToViewModel()
            });
        }
        public async Task <IActionResult> EditProduct(int id, ProductEditRequest request)
        {
            if (id == null)
            {
                return(NotFound());
            }
            var Data = await _productService.GetProductByIdAsync(id);

            if (Data != null)
            {
                await _productService.UpdateProductAsync(request);

                return(RedirectToAction("Index"));
            }
            if (Data == null)
            {
                return(NotFound());
            }

            return(View(Data));
        }
예제 #13
0
        /// <summary>
        /// 获取单条信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ProductEditResponse EditProduct(ProductEditRequest request)
        {
            ProductEditResponse response = new ProductEditResponse();

            if (request.PId < 0)
            {
                response.Status  = false;
                response.Message = "网络错误";
                return(response);
            }

            var res = ProductDal.Instance.EditProduct(request.PId);

            if (res != null)
            {
                response.Status      = true;
                response.Message     = "请求成功";
                response.ProductInfo = res;
            }

            return(response);
        }
예제 #14
0
        public async Task <Product> UpdateProductAsync(ProductEditRequest request)
        {
            var product = _mapper.Map <Product>(request);

            return(await _productRepository.UpdateAsync(product));
        }
예제 #15
0
 /// <summary>
 /// 获取产品单条信息
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public ProductEditResponse EditProducts(ProductEditRequest request)
 {
     return(ApiRequestHelper.Post <ProductEditRequest, ProductEditResponse>(request));
 }
예제 #16
0
 public Task <int> Update(ProductEditRequest request)
 {
     throw new NotImplementedException();
 }
예제 #17
0
        public IActionResult EditProduct([FromBody] ProductEditRequest request)
        {
            if (request == null)
            {
                return(BadRequest());
            }
            if (request.Price < 0.01M || request.DiscountedPrice < 0)
            {
                return(BadRequest("Bad price entered"));
            }
            var product = new Product()
            {
                Description     = request.Description,
                DisplayName     = request.DisplayName,
                Id              = Guid.Parse(request.Id),
                Price           = request.Price,
                Timestamp       = request.Timestamp,
                DiscountedPrice = request.DiscountedPrice,
                IsFeatured      = request.IsFeatured,
                IsEnabled       = request.IsEnabled
            };
            var imageContext = _dbContext.Set <Image>();
            var images       = imageContext.Where(x => x.ProductId == product.Id);

            if (request.Images != null && request.Images.Any())
            {
                imageContext.RemoveRange(images.Where(x => x.Type != ImageTypeEnum.Thumbnail));
                if (!string.Equals(request.Images.First(), "delete", StringComparison.InvariantCultureIgnoreCase))
                {
                    var mainImage = new Image()
                    {
                        Product     = product,
                        ProductId   = product.Id,
                        ImageBase64 = request.Images.FirstOrDefault(),
                        Type        = ImageTypeEnum.MainImage
                    };
                    imageContext.Add(mainImage);
                    request.Images.Remove(request.Images.FirstOrDefault());

                    foreach (var requestImage in request.Images)
                    {
                        imageContext.Add(new Image()
                        {
                            Product     = product,
                            ProductId   = product.Id,
                            ImageBase64 = requestImage,
                            Type        = ImageTypeEnum.OtherImage
                        });
                    }
                }
            }

            if (!string.IsNullOrEmpty(request.Thumbnail))
            {
                var thumbnail = images.FirstOrDefault(x => x.Type == ImageTypeEnum.Thumbnail);

                if (string.Equals(request.Thumbnail, "delete", StringComparison.InvariantCultureIgnoreCase))
                {
                    if (thumbnail != null)
                    {
                        imageContext.Remove(thumbnail);
                    }
                }
                else
                {
                    if (thumbnail == null)
                    {
                        imageContext.Add(new Image()
                        {
                            Product     = product,
                            ProductId   = product.Id,
                            ImageBase64 = request.Thumbnail,
                            Type        = ImageTypeEnum.Thumbnail
                        });
                    }
                    else
                    {
                        thumbnail.ImageBase64 = request.Thumbnail;
                    }
                }
            }

            var productAndPcContext = _dbContext.Set <ProductCart>();

            if (product.IsEnabled == false)
            {
                var pc = productAndPcContext.Where(x =>
                                                   string.Equals(x.ProductId.ToString(), request.Id, StringComparison.InvariantCultureIgnoreCase));
                if (pc.Any())
                {
                    _dbContext.RemoveRange(pc);
                }
            }

            var productContext = _dbContext.Set <Product>();

            try
            {
                productContext.Update(product);

                var result = _dbContext.SaveChanges();

                if (result > 0)
                {
                    product.Images = null;
                    return(Ok(product));
                }

                return(BadRequest("Nothing changed in database"));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                foreach (var entry in ex.Entries)
                {
                    if (entry.Entity is Product)
                    {
                        var exception = new List <ConcurrencyConflictResponse>();

                        var proposedValues = entry.CurrentValues;
                        var databaseValues = entry.GetDatabaseValues();

                        foreach (var property in proposedValues.Properties)
                        {
                            var proposedValue = proposedValues[property];
                            var databaseValue = databaseValues[property];
                            if (proposedValue != databaseValue)
                            {
                                exception.Add(new ConcurrencyConflictResponse()
                                {
                                    Property = property.Name, ProposedValue = proposedValue?.ToString(), ActualValue = databaseValue?.ToString()
                                });
                            }
                        }
                        return(StatusCode(409, exception));
                    }
                    else
                    {
                        return(BadRequest("Don't know how to handle concurrency conflicts for " + entry.Metadata.Name));
                    }
                }
            }
            return(BadRequest("Timeout"));
        }
예제 #18
0
 public ProductEditResponse EditProduct(ProductEditRequest request)
 {
     return(ProductBll.Instance.EditProduct(request));
 }
예제 #19
0
 public JsonResult EditProduct(ProductEditRequest request)
 {
     return(Json(ProductBll.Instance.EditProducts(request)));
 }