public async Task <ImageDto> AddImage(ImagePostRequest request) { await ValidateImage(request); var extension = GetExtension(request.File.FileName); var image = _mapper.Map <Image>(request); image.Id = Guid.NewGuid().ToString(); image.Name = $"{image.Id}{extension}"; image.NameForCompressed = $"{image.Id}_compressed{extension}"; var pathFull = Path.Combine(_fileOptions.DirectoryPath, image.UserId, image.Name); var pathCompressed = Path.Combine(_fileOptions.DirectoryPath, image.UserId, image.NameForCompressed); await _imageProvider.AddImage(request.File.OpenReadStream(), pathFull); _imageProvider.OptimizeImage(pathFull, pathCompressed, _fileOptions.MaxQuality); _unitOfWork.ImageRepository.Add(image); await _unitOfWork.Commit(); return(_mapper.Map <ImageDto>(image)); }