From 094b1e07225313c930c26dbeb73755f34a537ce4 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sun, 8 Apr 2018 20:01:32 +0200 Subject: feat(handlers): Add thread submission handler --- src/handlers.rs | 15 +++++++++++++++ src/main.rs | 1 + src/models.rs | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/handlers.rs b/src/handlers.rs index 446f59a4f3ac..cc4ac23c412d 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -74,3 +74,18 @@ pub fn forum_thread(state: State, thread_id: Path) -> ConverseRes }) .responder() } + +/// This handler receives a "New thread"-form and redirects the user +/// to the new thread after creation. +pub fn submit_thread(state: State, input: Form) -> ConverseResponse { + state.db.send(CreateThread(input.0)) + .from_err() + .and_then(move |res| { + let thread = res?; + info!("Created new thread \"{}\" with ID {}", thread.title, thread.id); + Ok(HttpResponse::TemporaryRedirect() + .header("Location", format!("/thread/{}", thread.id)) + .finish()) + }) + .responder() +} diff --git a/src/main.rs b/src/main.rs index 767d45891c3b..ad1f81927d32 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,6 +61,7 @@ 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/{id}", |r| r.method(Method::GET).with2(forum_thread))}) .bind(&bind_host).expect(&format!("Could not bind on '{}'", bind_host)) .start(); diff --git a/src/models.rs b/src/models.rs index fc67c260a448..d85a54e03090 100644 --- a/src/models.rs +++ b/src/models.rs @@ -18,7 +18,7 @@ pub struct Post { pub posted: DateTime, } -#[derive(Insertable)] +#[derive(Deserialize, Insertable)] #[table_name="threads"] pub struct NewThread { pub title: String, -- cgit 1.4.1