Basic post management
This commit is contained in:
parent
44875a6a45
commit
8f0c4c0a45
4 changed files with 65 additions and 5 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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; }
|
||||
|
|
20
Website/Views/Blog/Manage.cshtml
Normal file
20
Website/Views/Blog/Manage.cshtml
Normal 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>
|
Loading…
Add table
Add a link
Reference in a new issue