diff --git a/Website.Tests/VIewModels/BlogPostPreviewViewModelTests.cs b/Website.Tests/VIewModels/BlogPostPreviewViewModelTests.cs index af1e18b..35feefd 100644 --- a/Website.Tests/VIewModels/BlogPostPreviewViewModelTests.cs +++ b/Website.Tests/VIewModels/BlogPostPreviewViewModelTests.cs @@ -14,7 +14,7 @@ namespace Website.Tests.VIewModels Post_Content = new string('a', 1001) }; var post = new BlogPost(state); - var vm = new BlogPostPreviewViewModel(post); + var vm = new BlogPostSnippetViewModel(post); vm.Content.Length.Should().Be(1000); } @@ -24,7 +24,7 @@ namespace Website.Tests.VIewModels Post_Content = new string('a', 900) }; var post = new BlogPost(state); - var vm = new BlogPostPreviewViewModel(post); + var vm = new BlogPostSnippetViewModel(post); vm.Content.Length.Should().Be(900); } } diff --git a/Website.Tests/VIewModels/BlogPostViewModelTests.cs b/Website.Tests/VIewModels/BlogPostViewModelTests.cs index 7176239..ebcc691 100644 --- a/Website.Tests/VIewModels/BlogPostViewModelTests.cs +++ b/Website.Tests/VIewModels/BlogPostViewModelTests.cs @@ -15,7 +15,7 @@ namespace Website.Tests.VIewModels Post_Content="# header" }; var post = new BlogPost(state); - var vm = new BlogPostViewModel(post); + var vm = new BlogPostViewModel(post, false); vm.ContentHtml.Should().Be("

header

"); } @@ -26,7 +26,7 @@ namespace Website.Tests.VIewModels Post_Timestamp = new DateTime(2018, 10, 01, 15, 1, 25) }; var post = new BlogPost(state); - var vm = new BlogPostViewModel(post); + var vm = new BlogPostViewModel(post, false); vm.Timestamp.Should().Be("Monday the 1st of October 2018"); } @@ -37,7 +37,7 @@ namespace Website.Tests.VIewModels Post_Timestamp = new DateTime(2018, 10, 02, 15, 1, 25) }; var post = new BlogPost(state); - var vm = new BlogPostViewModel(post); + var vm = new BlogPostViewModel(post, false); vm.Timestamp.Should().Be("Tuesday the 2nd of October 2018"); } @@ -48,7 +48,7 @@ namespace Website.Tests.VIewModels Post_Timestamp = new DateTime(2018, 10, 03, 15, 1, 25) }; var post = new BlogPost(state); - var vm = new BlogPostViewModel(post); + var vm = new BlogPostViewModel(post, false); vm.Timestamp.Should().Be("Wednesday the 3rd of October 2018"); } } diff --git a/Website/Controllers/BlogController.cs b/Website/Controllers/BlogController.cs index 8860cf3..3684a40 100644 --- a/Website/Controllers/BlogController.cs +++ b/Website/Controllers/BlogController.cs @@ -7,32 +7,29 @@ using Website.Data; using Website.Models; using Website.ViewModels; -namespace Website.Controllers -{ - public class BlogController : Controller - { +namespace Website.Controllers { + public class BlogController:Controller { private const int MaxPostsPerPage = 10; private readonly BlogRepository _repo; - public BlogController(BlogRepository repo) - { - _repo = repo; - } + public BlogController(BlogRepository repo) => _repo = repo; - public async Task Page(int page) - { + public async Task Page(int page) { var offset = (page - 1) * MaxPostsPerPage; - var posts = (await _repo.GetLatestPostsAsync(MaxPostsPerPage, offset)).Select(p => new BlogPostPreviewViewModel(p)); + var posts = (await _repo.GetLatestPostsAsync(MaxPostsPerPage, offset)).Select(p => new BlogPostSnippetViewModel(p)); var maxPages = (await _repo.GetCountAsync()) / MaxPostsPerPage; var model = new BlogViewModel(posts, page, maxPages); return View(model); } - public async Task Entry(string url) - { + public async Task Entry(string url, bool preview = false) { try { var post = await _repo.GetPostByUrlAsync(url); - var model = new BlogPostViewModel(post); + + if (!preview && string.IsNullOrEmpty(post.Content)) + return NotFound(); + + var model = new BlogPostViewModel(post, preview); return View(model); } catch (InvalidOperationException) { return NotFound(); @@ -52,8 +49,7 @@ namespace Website.Controllers Content = post.Draft }; return View(model); - } - catch (InvalidOperationException) { + } catch (InvalidOperationException) { return NotFound(); } } @@ -68,13 +64,13 @@ namespace Website.Controllers var savedPost = await _repo.SavePost(post); - return RedirectToAction(nameof(Edit), new{savedPost.Id}); + return RedirectToAction(nameof(Edit), new { savedPost.Id }); } [Authorize] public async Task Manage() { var posts = await _repo.GetAllPostsAsync(); - var models = posts.OrderByDescending(post => post.Timestamp).Select(post => new BlogPostViewModel(post)); + var models = posts.OrderByDescending(post => post.Timestamp).Select(post => new BlogPostViewModel(post, false)); return View(models); } diff --git a/Website/Controllers/HomeController.cs b/Website/Controllers/HomeController.cs index 39ad8f5..c661164 100644 --- a/Website/Controllers/HomeController.cs +++ b/Website/Controllers/HomeController.cs @@ -17,7 +17,7 @@ namespace Website.Controllers public async Task Index() { var post = await _blogRepo.GetLatestPostAsync(); - var model = new BlogPostPreviewViewModel(post); + var model = new BlogPostSnippetViewModel(post); return View(model); } } diff --git a/Website/ViewModels/BlogPostPreviewViewModel.cs b/Website/ViewModels/BlogPostPreviewViewModel.cs deleted file mode 100644 index fac0a55..0000000 --- a/Website/ViewModels/BlogPostPreviewViewModel.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Website.Models; - -namespace Website.ViewModels -{ - public class BlogPostPreviewViewModel:BlogPostViewModel - { - public BlogPostPreviewViewModel(BlogPost blogPost) : base(blogPost) => Content = Content.Length < 1000 ? Content : Content.Substring(0, 1000); - } -} \ No newline at end of file diff --git a/Website/ViewModels/BlogPostSnippetViewModel.cs b/Website/ViewModels/BlogPostSnippetViewModel.cs new file mode 100644 index 0000000..bda3a3a --- /dev/null +++ b/Website/ViewModels/BlogPostSnippetViewModel.cs @@ -0,0 +1,9 @@ +using Website.Models; + +namespace Website.ViewModels +{ + public class BlogPostSnippetViewModel:BlogPostViewModel + { + public BlogPostSnippetViewModel(BlogPost blogPost) : base(blogPost, false) => Content = Content.Length < 1000 ? Content : Content.Substring(0, 1000); + } +} \ No newline at end of file diff --git a/Website/ViewModels/BlogPostViewModel.cs b/Website/ViewModels/BlogPostViewModel.cs index b486c6e..662ea2a 100644 --- a/Website/ViewModels/BlogPostViewModel.cs +++ b/Website/ViewModels/BlogPostViewModel.cs @@ -7,12 +7,12 @@ namespace Website.ViewModels { public class BlogPostViewModel { - public BlogPostViewModel(BlogPost blogPost) { + public BlogPostViewModel(BlogPost blogPost, bool preview) { Id = blogPost.Id; Title = blogPost.Title; Timestamp = FormatTimestamp(blogPost.Timestamp); Url = blogPost.Url; - Content = blogPost.Content; + Content = preview ? blogPost.Draft : blogPost.Content; } private static string GetDaySuffix(int day) { diff --git a/Website/Views/Blog/Manage.cshtml b/Website/Views/Blog/Manage.cshtml index e7ec58b..dd5b163 100644 --- a/Website/Views/Blog/Manage.cshtml +++ b/Website/Views/Blog/Manage.cshtml @@ -5,16 +5,13 @@ } - - - - @foreach (var post in Model) { - - - - + + + + + }
TitleAction
@post.TitleEditPublishDelete@post.TitlePreviewEditPublishDelete
\ No newline at end of file