public async Task Execute(UploadBlogPostCommand command)
        {
            var postFile   = command.Files.FirstOrDefault(f => f.FileName.EndsWith(".md"));
            var imageFiles = command.Files.Where(f => !f.FileName.EndsWith(".md"));

            var postFileContent          = Encoding.UTF8.GetString(postFile.Data, 0, postFile.Data.Length);
            var processingMetadataResult = _postMetadataResolver.Resolve(postFileContent);
            var metadata = processingMetadataResult.Result;

            var date   = metadata.PublishedDate ?? DateTime.Now;
            var postId = metadata.Id;
            var tags   = _tagMapper.Map(metadata.Categories?.ToArray());

            var blogPost = new BlogPost
            {
                Id             = postId,
                Title          = metadata.Title,
                Content        = postFileContent,
                Header         = metadata.Header,
                PublishingDate = date,
                Status         = (metadata.PostType == BlogPostMetadata.PostTypeEnum.Article) ?
                                 BlogStatusTypeEnum.Active :
                                 BlogStatusTypeEnum.Page,
                Images = new List <BlogPostImage>(),
                Tags   = tags
            };

            foreach (var imageFile in imageFiles)
            {
                var fileName      = Path.GetFileNameWithoutExtension(imageFile.FileName);
                var blogPostImage = new BlogPostImage
                {
                    Id   = fileName,
                    Data = imageFile.Data
                };

                blogPost.Images.Add(blogPostImage);
            }

            var existingPost = await _blogRepository.GetBlogPostWithNoImages(postId);

            var isPostExists = existingPost != null;

            if (isPostExists)
            {
                await _blogRepository.DeleteBlogPost(postId);
            }

            await _blogRepository.Add(blogPost);
        }
Example #2
0
        private bool CheckMarkdownFile(HttpClient client, string filePath, string url, bool isOverrideWhenExists)
        {
            var file = File.ReadAllText(filePath);

            _logger.Info("Obtaining metadata...");
            var metadataProcessingResult = _blockBlogPostMetadataResolver.Resolve(file);
            var metadata = metadataProcessingResult.Result;

            _logger.Object("Article metadata", metadata);

            if (metadataProcessingResult.Status != ProcessingStatus.Ok)
            {
                _logger.Error("There are problems with blog article metadata");
                metadataProcessingResult.Messages.ForEach(m => _logger.Error(m));
                return(false);
            }

            var id = metadata.Id;

            var checkUrl = $"{url}/CheckIfExists/{id}";

            _logger.Info(checkUrl);


            _logger.Info($"Checking article with Id {id} if exists on server...");

            var checkIfExistsResponse = client.GetAsync(checkUrl).Result;

            if (checkIfExistsResponse.StatusCode == HttpStatusCode.OK)
            {
                _logger.Warning($"Article with Id {id} already exists!");
                if (!isOverrideWhenExists)
                {
                    return(false);
                }
            }

            return(true);
        }