diff options
author | Vincent Ambo <tazjin@gmail.com> | 2018-04-08T18·20+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2018-04-08T18·20+0200 |
commit | cf636077e65ae4c8598fd32aa9b233b87070875e (patch) | |
tree | 3f149480deed7d04af0cf5f5f70090d5495a056e /src | |
parent | 148dfc39c80266e9c3077737e4258739dba7d86a (diff) |
feat(handlers): Add reply_thread handler for posts
Diffstat (limited to 'src')
-rw-r--r-- | src/handlers.rs | 17 | ||||
-rw-r--r-- | src/main.rs | 3 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/handlers.rs b/src/handlers.rs index cc4ac23c412d..a16f73389fad 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -83,9 +83,24 @@ pub fn submit_thread(state: State<AppState>, input: Form<NewThread>) -> Converse .and_then(move |res| { let thread = res?; info!("Created new thread \"{}\" with ID {}", thread.title, thread.id); - Ok(HttpResponse::TemporaryRedirect() + Ok(HttpResponse::SeeOther() .header("Location", format!("/thread/{}", thread.id)) .finish()) }) .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() +} diff --git a/src/main.rs b/src/main.rs index ad1f81927d32..3269e2d4dc3c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,7 +61,8 @@ fn main() { App::with_state(AppState { db: db_addr.clone(), tera }) .middleware(middleware::Logger::default()) .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))}) .bind(&bind_host).expect(&format!("Could not bind on '{}'", bind_host)) .start(); |