public async Task <IActionResult> Post([FromBody] PodcastViewModel vm)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid podcast model"));
            }

            var item = _mapper.Map <PodcastViewModel, Podcast>(vm);

            var isNew = string.IsNullOrEmpty(vm.Id);

            item.AppUser = _applicationUser;
            var ret = _repository.AddOrUpdate(item);

            try {
                await _unitOfWork.CompleteAsync();

                if (!isNew)
                {
                    return(Ok(_mapper.Map <Podcast, PodcastViewModel>(ret)));
                }

                // TODO: Revisit this at some stage, horribly hacky & brittle
                // TODO: This should be moved to the background cache images job
                // TODO: And ultimately handled by imageresizer when they get their f*****g docs in order
                var rawImageFileName = vm.ImageUrl?.Replace(_storageSettings.CdnUrl, string.Empty).TrimStart('/');
                if (string.IsNullOrEmpty(rawImageFileName))
                {
                    return(Ok(_mapper.Map <Podcast, PodcastViewModel>(ret)));
                }

                var parts = rawImageFileName.Split('/', 2);
                if (parts.Length != 2)
                {
                    return(Ok(_mapper.Map <Podcast, PodcastViewModel>(ret)));
                }

                await _fileUtilities.CopyRemoteFile(
                    parts[0], parts[1],
                    _fileStorageSettings.ContainerName, $"podcast/{ret.Id.ToString()}.png");

                return(Ok(_mapper.Map <Podcast, PodcastViewModel>(ret)));
            } catch (GenerateSlugFailureException) {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        private async Task _imageify(ApplicationUser user)
        {
            if (string.IsNullOrEmpty(user.PictureUrl))
            {
                var gravatar = await _gravatarClient.GetGravatarImage(user.Email);

                if (!string.IsNullOrEmpty(gravatar))
                {
                    user.PictureUrl = gravatar;
                }
                else
                {
                    var image     = ImageUtils.GetTemporaryImage("profile", 6, "svg");
                    var destImage = $"profile/{user.Id.ToString()}.svg";
                    var result    = await _fileUtilities.CopyRemoteFile(
                        "static", $"images/{image}",
                        _fileStorageSettings.ContainerName, destImage);

                    user.PictureUrl = $"{_storageSettings.CdnUrl}{_fileStorageSettings.ContainerName}/{destImage}";
                }
            }
        }