feat(handlers): Add reply_thread handler for posts

This commit is contained in:
Vincent Ambo 2018-04-08 20:20:05 +02:00
parent 148dfc39c8
commit cf636077e6
2 changed files with 18 additions and 2 deletions

View file

@ -83,9 +83,24 @@ pub fn submit_thread(state: State<AppState>, input: Form<NewThread>) -> Converse
.and_then(move |res| { .and_then(move |res| {
let thread = res?; let thread = res?;
info!("Created new thread \"{}\" with ID {}", thread.title, thread.id); info!("Created new thread \"{}\" with ID {}", thread.title, thread.id);
Ok(HttpResponse::TemporaryRedirect() Ok(HttpResponse::SeeOther()
.header("Location", format!("/thread/{}", thread.id)) .header("Location", format!("/thread/{}", thread.id))
.finish()) .finish())
}) })
.responder() .responder()
} }
/// This handler receives a "Reply"-form and redirects the user to the
/// new post after creation.
pub fn reply_thread(state: State<AppState>, input: Form<NewPost>) -> ConverseResponse {
state.db.send(CreatePost(input.0))
.from_err()
.and_then(move |res| {
let post = res?;
info!("Posted reply {} to thread {}", post.id, post.thread_id);
Ok(HttpResponse::SeeOther()
.header("Location", format!("/thread/{}#post{}", post.thread_id, post.id))
.finish())
})
.responder()
}

View file

@ -61,7 +61,8 @@ fn main() {
App::with_state(AppState { db: db_addr.clone(), tera }) App::with_state(AppState { db: db_addr.clone(), tera })
.middleware(middleware::Logger::default()) .middleware(middleware::Logger::default())
.resource("/", |r| r.method(Method::GET).with(forum_index)) .resource("/", |r| r.method(Method::GET).with(forum_index))
.resource("/thread", |r| r.method(Method::POST).with2(submit_thread)) .resource("/thread/submit", |r| r.method(Method::POST).with2(submit_thread))
.resource("/thread/reply", |r| r.method(Method::POST).with2(reply_thread))
.resource("/thread/{id}", |r| r.method(Method::GET).with2(forum_thread))}) .resource("/thread/{id}", |r| r.method(Method::GET).with2(forum_thread))})
.bind(&bind_host).expect(&format!("Could not bind on '{}'", bind_host)) .bind(&bind_host).expect(&format!("Could not bind on '{}'", bind_host))
.start(); .start();