feat(handlers): Implement post editing handler

Implements a handler that receives the edit form result and updates
the database accordingly if the user identity matches.
This commit is contained in:
Vincent Ambo 2018-04-15 23:30:22 +02:00
parent e130e15b79
commit 56d57edfd0
3 changed files with 31 additions and 2 deletions

View file

@ -224,6 +224,34 @@ pub fn edit_form(state: State<AppState>,
.responder()
}
/// This handler "executes" an edit to a post if the current user owns
/// the edited post.
pub fn edit_post(state: State<AppState>,
mut req: HttpRequest<AppState>,
update: Form<UpdatePost>) -> ConverseResponse {
let author: Option<Author> = req.session().get(AUTHOR)
.unwrap_or_else(|_| None);
state.db.send(GetPost { id: update.post_id })
.flatten()
.from_err()
.and_then(move |post| {
if let Some(author) = author {
if author.email.eq(&post.author_email) {
return Ok(());
}
}
Err(ConverseError::PostEditForbidden { id: post.id })
})
.and_then(move |_| state.db.send(update.0).from_err())
.flatten()
.map(|updated| HttpResponse::SeeOther()
.header("Location", format!("/thread/{}#post-{}",
updated.thread_id, updated.id))
.finish())
.responder()
}
/// This handler executes a full-text search on the forum database and
/// displays the results to the user.
pub fn search_forum(state: State<AppState>,