Basic post management

This commit is contained in:
Robert Marshall 2020-01-03 11:16:12 +00:00
parent 44875a6a45
commit 8f0c4c0a45
4 changed files with 65 additions and 5 deletions

View file

@ -67,5 +67,25 @@ namespace Website.Controllers
return RedirectToAction(nameof(Edit), new{savedPost.Id});
}
public async Task<IActionResult> Manage() {
var posts = await _repo.GetAllPostsAsync();
var models = posts.OrderByDescending(post => post.Timestamp).Select(post => new BlogPostViewModel(post));
return View(models);
}
public async Task<IActionResult> Publish(int id) {
var post = await _repo.GetPostByIdAsync(id);
post.Publish();
await _repo.SavePost(post);
return RedirectToAction(nameof(Manage));
}
public async Task<IActionResult> Delete(int id) {
await _repo.DeletePostAsync(id);
return RedirectToAction(nameof(Manage));
}
}
}

View file

@ -56,12 +56,31 @@ namespace Website.Data
const string newPostQuery = "INSERT INTO blog_posts (post_title, post_content, post_draft, post_url) VALUES (@title, @content, @draft, @url); SELECT CAST(LAST_INSERT_ID() as int)";
const string updatePostQuery = "UPDATE blog_posts SET post_id = @id, post_title = @title, post_content = @content, post_draft = @draft, post_url = @url WHERE post_id = @id ";
var query = post.Id == 0 ? newPostQuery : updatePostQuery;
var newPost = post.Id == 0;
using (var connection = _dbProvider.NewConnection()) {
connection.Open();
var result = await connection.QueryAsync<int>(query, post);
return await GetPostByIdAsync(result.Single());
var result = await connection.QueryAsync<int>(newPost ? newPostQuery : updatePostQuery, post);
return newPost ? await GetPostByIdAsync(result.Single()) : post;
}
}
public async Task<IEnumerable<BlogPost>> GetAllPostsAsync() {
const string query = "SELECT * FROM blog_posts WHERE post_deleted=0";
using (var connection = _dbProvider.NewConnection()) {
connection.Open();
var result = await connection.QueryAsync<BlogPostState>(query);
return result.Select(state => new BlogPost(state));
}
}
public async Task DeletePostAsync(int id) {
const string query = "UPDATE blog_posts SET post_deleted=1 WHERE post_id=@id";
using (var connection = _dbProvider.NewConnection()) {
connection.Open();
await connection.ExecuteAsync(query, new {id});
}
}
}

View file

@ -7,8 +7,8 @@ namespace Website.ViewModels
{
public class BlogPostViewModel
{
public BlogPostViewModel(BlogPost blogPost)
{
public BlogPostViewModel(BlogPost blogPost) {
Id = blogPost.Id;
Title = blogPost.Title;
Timestamp = FormatTimestamp(blogPost.Timestamp);
Url = blogPost.Url;
@ -44,6 +44,7 @@ namespace Website.ViewModels
.UseSyntaxHighlighting()
.Build();
public int Id { get; }
public string Title { get; }
public string Content { get; protected set; }
public string Timestamp { get; }

View file

@ -0,0 +1,20 @@
@model IEnumerable<BlogPostViewModel>
@{
ViewBag.Title = "Manage posts";
}
<table>
<thead><tr>
<td>Title</td>
<td colspan="3">Action</td>
</tr></thead>
@foreach (var post in Model) {
<tr>
<td>@post.Title</td>
<td><a href="edit?id=@post.Id">Edit</a></td>
<td><a href="publish?id=@post.Id">Publish</a></td>
<td><a href="delete?id=@post.Id">Delete</a></td>
</tr>
}
</table>