コード例 #1
0
        public async Task <bool> CreateAsync(ProductPicturesModifyRequest request)
        {
            var index = 0;

            foreach (var picture in request.Pictures)
            {
                var binaryPicture = ImageUtil.EncodeJavascriptBase64(picture.Base64Data);
                var pictureData   = Convert.FromBase64String(binaryPicture);
                var pictureId     = await _pictureRepository.AddWithInt64EntityAsync(new Picture()
                {
                    CreatedById = request.UpdatedById,
                    CreatedDate = request.CreatedDate,
                    FileName    = picture.FileName,
                    MimeType    = picture.ContentType,
                    UpdatedById = request.UpdatedById,
                    UpdatedDate = request.UpdatedDate,
                    BinaryData  = pictureData,
                    StatusId    = PictureStatus.Pending.GetCode()
                });

                var productPictureTypeId = index == 0 ? (int)ProductPictureType.Thumbnail : (int)ProductPictureType.Secondary;
                await _productPictureRepository.AddAsync(new ProductPicture()
                {
                    ProductId     = request.ProductId,
                    PictureId     = pictureId,
                    PictureTypeId = productPictureTypeId
                });

                index += 1;
            }

            return(true);
        }
コード例 #2
0
        public async Task <bool> UpdateStatusByProductIdAsync(ProductPicturesModifyRequest request, PictureStatus pictureStatus)
        {
            await(from productPicture in _productPictureRepository.Get(x => x.ProductId == request.ProductId)
                  join picture in _pictureRepository.Table
                  on productPicture.PictureId equals picture.Id
                  select picture)
            .Set(x => x.StatusId, pictureStatus.GetCode())
            .Set(x => x.UpdatedById, request.UpdatedById)
            .Set(x => x.UpdatedDate, DateTimeOffset.UtcNow)
            .UpdateAsync();

            return(true);
        }
コード例 #3
0
        public async Task <bool> UpdateAsync(ProductPicturesModifyRequest request)
        {
            var pictureIds            = request.Pictures.Select(x => x.Id);
            var deleteProductPictures = _productPictureRepository
                                        .Get(x => x.ProductId == request.ProductId && x.PictureId.NotIn(pictureIds));

            // Delete old images
            var deletePictureIds = deleteProductPictures.Select(x => x.PictureId).ToList();

            if (deletePictureIds.Any())
            {
                await deleteProductPictures.DeleteAsync();

                await _pictureRepository.Get(x => x.Id.In(deletePictureIds)).DeleteAsync();
            }

            var pictureTypeId    = (int)ProductPictureType.Thumbnail;
            var shouldAddPicture = true;
            var hasPicture       = _productPictureRepository.Get(x => x.ProductId == request.ProductId && x.PictureTypeId == pictureTypeId).Any();

            if (hasPicture)
            {
                shouldAddPicture = false;
            }

            // Add new images
            foreach (var picture in request.Pictures)
            {
                if (!string.IsNullOrEmpty(picture.Base64Data))
                {
                    var base64Data  = ImageUtil.EncodeJavascriptBase64(picture.Base64Data);
                    var pictureData = Convert.FromBase64String(base64Data);
                    var pictureId   = _pictureRepository.AddWithInt64Entity(new Picture()
                    {
                        CreatedById = request.UpdatedById,
                        CreatedDate = request.CreatedDate,
                        FileName    = picture.FileName,
                        MimeType    = picture.ContentType,
                        UpdatedById = request.UpdatedById,
                        UpdatedDate = request.UpdatedDate,
                        BinaryData  = pictureData,
                        StatusId    = PictureStatus.Pending.GetCode()
                    });

                    var productPictureTypeId = shouldAddPicture ? pictureTypeId : (int)ProductPictureType.Secondary;
                    _productPictureRepository.Add(new ProductPicture()
                    {
                        ProductId     = request.ProductId,
                        PictureId     = pictureId,
                        PictureTypeId = productPictureTypeId
                    });
                    shouldAddPicture = false;
                }
            }

            var firstRestPicture = await _productPictureRepository.FirstOrDefaultAsync(x => x.ProductId == request.ProductId && x.PictureTypeId != pictureTypeId);

            if (firstRestPicture != null)
            {
                firstRestPicture.PictureTypeId = pictureTypeId;
                await _productPictureRepository.UpdateAsync(firstRestPicture);
            }

            return(true);
        }