private async Task AddImagesToJoke(CreateJokeDto jokeDto, Joke joke)
        {
            if (jokeDto.ImageNames.Count() != 0)
            {
                foreach (var imageName in jokeDto.ImageNames)
                {
                    if (string.IsNullOrWhiteSpace(imageName))
                    {
                        continue;
                    }

                    var imageUrl = await mediaService.CopyFile(imageName,
                                                               $"{imageName}",
                                                               this.azureStorageBlobOptions.Value.FileTempPath,
                                                               this.azureStorageBlobOptions.Value.FilePath);

                    if (!string.IsNullOrWhiteSpace(imageUrl))
                    {
                        JokeImage image = new JokeImage
                        {
                            Joke = joke,
                            Url  = imageUrl
                        };

                        joke.JokeImages.Add(image);
                    }
                }
            }
        }
        public async Task <JokeDto> CreateNewJokeAsync(CreateJokeDto jokeDto)
        {
            using (IUnitOfWork uow = unitOfWorkFactory.CreateUnitOfWork())
            {
                var  jokeRepository     = uow.GetRepository <IJokeRepository>();
                var  categoryRepository = uow.GetRepository <ICategoryRepository>();
                Joke joke       = mapper.Map <Joke>(jokeDto);
                var  categories = categoryRepository.Find(c => jokeDto.Categories.Any(cd => cd == c.Id));
                jokeRepository.Add(joke);
                joke.JokeCategories = categories.Select(c => new JokeCategory()
                {
                    Category = c, Joke = joke
                }).ToList();
                await AddImagesToJoke(jokeDto, joke);

                await uow.SaveChangesAsync();

                var returnJoke = mapper.Map <JokeDto>(joke);
                returnJoke.Categories = joke.JokeCategories.Select(jc => jc.Category.Title).ToList();
                returnJoke.ImageUrls  = joke.JokeImages.Select(i => i.Url).ToList();
                return(returnJoke);
            }
        }
        public async Task <IActionResult> CreateJoke(CreateJokeDto createJokeDto)
        {
            var joke = await jokeService.CreateNewJokeAsync(createJokeDto);

            return(CreatedAtAction(nameof(CreateJoke), joke));
        }