public async Task <IActionResult> AddPhotoForUser(int userId, [FromForm] PhotoForCreationViewModel photoForCreationViewModel) { //Check if the user id of url match with userid of the token #region Check User match url id with token if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)) { return(Unauthorized()); } var userFromRepo = await _repo.GetUser(userId); #endregion #region create file, Upload to the cloud var file = photoForCreationViewModel.File; var uploadResult = new ImageUploadResult(); if (file.Length > 0) { using (var stream = file.OpenReadStream()) { var uploadParams = new ImageUploadParams() { File = new FileDescription(file.Name, stream), Transformation = new Transformation() .Width(500).Height(500).Crop("fill").Gravity("face") }; //Response from cloudinary uploadResult = _cloudinary.Upload(uploadParams); } } #endregion #region Push the url result into viewmodel and map into model photoForCreationViewModel.Url = uploadResult.Uri.ToString(); photoForCreationViewModel.PublicId = uploadResult.PublicId; var photo = _mapper.Map <Photo>(photoForCreationViewModel); if (!userFromRepo.Photos.Any(u => u.isMain)) { photo.isMain = true; } userFromRepo.Photos.Add(photo); #endregion if (await _repo.SaveAll()) { var photoToReturn = _mapper.Map <PhotoForReturnViewModel>(photo); return(CreatedAtRoute("GetPhoto", new Photo { Id = photo.Id }, photoToReturn)); } return(BadRequest("Could not add the photo")); }
public async Task <IActionResult> AddPhotoForUser(string userId, [FromForm] PhotoForCreationViewModel photoModel) { if (userId != User.FindFirst(ClaimTypes.NameIdentifier).Value) { return(Unauthorized()); } var currentUser = await _userRepository.GetUserAsync(userId); if (currentUser.Photo != null && currentUser.Photo.Id != 1) { await DeletePhotoAsync(userId, currentUser.Photo.Id); } var photoDto = _mapper.Map <PhotoDto>(photoModel); var file = photoModel.File; var uploadResult = new ImageUploadResult(); if (file.Length > 0) { using (var stream = file.OpenReadStream()) { var uploadParams = new ImageUploadParams() { File = new FileDescription(file.Name, stream), Transformation = new Transformation().Width(500).Height(500).Crop("fill").Gravity("face") }; uploadResult = _cloudinary.Upload(uploadParams); } } photoDto.Url = uploadResult.Uri.ToString(); photoDto.PublicId = uploadResult.PublicId; var result = await _photoReposity.AddPhotoAsync(userId, photoDto); if (result == null) { return(BadRequest("ERR_ADDING_PHOTO")); } var photoReturn = _mapper.Map <PhotoViewModel>(result); return(CreatedAtRoute("GetPhoto", new { photoId = photoReturn.Id, userId = userId }, photoReturn)); }