feat(db): Prevent responses to closed threads

This concludes the thread-closing implementation!
This commit is contained in:
Vincent Ambo 2018-05-27 14:12:31 +02:00 committed by Vincent Ambo
parent a14ece6af3
commit 8901d5d73a
2 changed files with 14 additions and 1 deletions

View file

@ -208,6 +208,19 @@ impl Handler<CreatePost> for DbExecutor {
let conn = self.0.get()?; let conn = self.0.get()?;
let closed: bool = {
use schema::threads::dsl::*;
threads.select(closed)
.find(msg.0.thread_id)
.first(&conn)?
};
if closed {
return Err(ConverseError::ThreadClosed {
id: msg.0.thread_id
})
}
Ok(diesel::insert_into(posts::table) Ok(diesel::insert_into(posts::table)
.values(&msg.0) .values(&msg.0)
.get_result(&conn)?) .get_result(&conn)?)

View file

@ -124,7 +124,7 @@ impl ResponseError for ConverseError {
// Everything is mapped to internal server errors for now. // Everything is mapped to internal server errors for now.
match *self { match *self {
ConverseError::ThreadClosed { id } => HttpResponse::SeeOther() ConverseError::ThreadClosed { id } => HttpResponse::SeeOther()
.header("Location", format!("/thread/{}#edit-post", id)) .header("Location", format!("/thread/{}#post-reply", id))
.finish(), .finish(),
_ => HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR) _ => HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR)
.body(format!("An error occured: {}", self)) .body(format!("An error occured: {}", self))