Use new API for blog

This commit is contained in:
Robert Marshall 2020-04-11 13:37:14 +01:00
parent e389b2404a
commit 25c320bf6b
17 changed files with 356 additions and 314 deletions

View file

@ -10,21 +10,21 @@ using Website.ViewModels;
namespace Website.Controllers {
public class BlogController:Controller {
private const int MaxPostsPerPage = 10;
private readonly BlogRepository _repo;
private readonly IBlogApi _api;
public BlogController(BlogRepository repo) => _repo = repo;
public BlogController(IBlogApi api) => _api = api;
public async Task<IActionResult> Page(int page) {
var offset = (page - 1) * MaxPostsPerPage;
var posts = (await _repo.GetLatestPostsAsync(MaxPostsPerPage, offset)).Select(p => new BlogPostSnippetViewModel(p));
var maxPages = (await _repo.GetCountAsync()) / MaxPostsPerPage;
var posts = (await _api.GetLatestPostsAsync(MaxPostsPerPage, offset)).Select(p => new BlogPostSnippetViewModel(p));
var maxPages = (await _api.GetCountAsync()) / MaxPostsPerPage;
var model = new BlogViewModel(posts, page, maxPages);
return View(model);
}
public async Task<IActionResult> Entry(string url, bool preview = false) {
try {
var post = await _repo.GetPostByUrlAsync(url);
var post = await _api.GetPostByUrlAsync(url);
if (!preview && string.IsNullOrEmpty(post.Content))
return NotFound();
@ -42,7 +42,7 @@ namespace Website.Controllers {
return View();
try {
var post = await _repo.GetPostByIdAsync(id.Value);
var post = await _api.GetPostByIdAsync(id.Value);
var model = new BlogPostSubmission {
Id = post.Id,
Title = post.Title,
@ -57,35 +57,28 @@ namespace Website.Controllers {
[Authorize]
[HttpPost]
public async Task<IActionResult> Save(BlogPostSubmission submission) {
var post = submission.Id.HasValue ? await _repo.GetPostByIdAsync(submission.Id.Value) : new BlogPost();
post.UpdateTitle(submission.Title);
post.UpdateDraft(submission.Content);
var savedPost = await _repo.SavePost(post);
var savedPost = await _api.SavePost(submission);
return RedirectToAction(nameof(Edit), new { savedPost.Id });
}
[Authorize]
public async Task<IActionResult> Manage() {
var posts = await _repo.GetAllPostsAsync();
var posts = await _api.GetAllPostsAsync();
var models = posts.OrderByDescending(post => post.Timestamp).Select(post => new BlogPostViewModel(post, false));
return View(models);
}
[Authorize]
public async Task<IActionResult> Publish(int id) {
var post = await _repo.GetPostByIdAsync(id);
post.Publish();
await _repo.SavePost(post);
await _api.PublishPostAsync(id);
return RedirectToAction(nameof(Manage));
}
[Authorize]
public async Task<IActionResult> Delete(int id) {
await _repo.DeletePostAsync(id);
await _api.DeletePostAsync(id);
return RedirectToAction(nameof(Manage));
}

View file

@ -6,16 +6,16 @@ using System.Linq;
namespace Website.Controllers {
public class HomeController : Controller {
private readonly BlogRepository _blogRepo;
private readonly IBlogApi _blogApi;
private readonly GitServerApi _api;
public HomeController(BlogRepository blogRepo, GitServerApi api) {
public HomeController(IBlogApi blogApi, GitServerApi api) {
_api = api;
_blogRepo = blogRepo;
_blogApi = blogApi;
}
public async Task<IActionResult> Index() {
var post = await _blogRepo.GetLatestPostAsync();
var post = await _blogApi.GetLatestPostAsync();
var repo = (await _api.GetRepositories()).First();
var branch = (await _api.GetBranches(repo.Name)).First();
var commit = await _api.GetCommit(repo.Name, branch.Commit.Id);