Exemplo n.º 1
0
        public async Task <IActionResult> AddImagesForItem(int userId, ImagesForCreateDto imageDto)
        {
            var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var user          = await _repo.GetUser(userId);

            if (user == null)
            {
                return(BadRequest("User dosen't exist."));
            }
            if (currentUserId != user.Id)
            {
                return(Unauthorized());
            }

            var currentImage = _repo.GetUserImage(userId);

            if (currentImage.PublicId != null)
            {
                var delPara = new DeletionParams(currentImage.PublicId);
                var result  = _cloudinary.Destroy(delPara);
                if (result.Result == "ok")
                {
                    user.Photo.Remove(currentImage);
                    _repo.Delete(currentImage);
                }
            }

            var file = imageDto.File;

            var uploadResult = new ImageUploadResult();

            if (file.Length > 0)
            {
                using (var stream = file.OpenReadStream())
                {
                    var uploadParams = new ImageUploadParams()
                    {
                        File = new FileDescription(file.Name, stream)
                    };
                    uploadResult = _cloudinary.Upload(uploadParams);
                }
            }

            imageDto.Url      = uploadResult.Uri.ToString();
            imageDto.PublicId = uploadResult.PublicId;

            var image = _mapper.Map <Image>(imageDto);

            image.User = user;

            if (!user.Photo.Any(m => m.IsProfilePic && m.IsItemImage == false))
            {
                image.IsProfilePic = true;
            }
            image.User        = user;
            image.IsItemImage = false;
            await _repo.CreateImage(image);

            if (await _repo.SaveAll())
            {
                var imageToReturn = _mapper.Map <ImageForReturnDto>(image);
                return(CreatedAtRoute("GetUserImage", new { id = image.Id }, imageToReturn));
            }

            return(BadRequest("Error while saving."));
        }