feat(handlers): Extract & add author to thread and post information
This commit is contained in:
parent
64453ec683
commit
7c73949066
3 changed files with 46 additions and 6 deletions
|
@ -81,10 +81,28 @@ pub fn forum_thread(state: State<AppState>, thread_id: Path<i32>) -> ConverseRes
|
||||||
.responder()
|
.responder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct NewThreadForm {
|
||||||
|
pub title: String,
|
||||||
|
pub body: String,
|
||||||
|
}
|
||||||
|
|
||||||
/// This handler receives a "New thread"-form and redirects the user
|
/// This handler receives a "New thread"-form and redirects the user
|
||||||
/// to the new thread after creation.
|
/// to the new thread after creation.
|
||||||
pub fn submit_thread(state: State<AppState>, input: Form<NewThread>) -> ConverseResponse {
|
pub fn submit_thread(state: State<AppState>,
|
||||||
state.db.send(CreateThread(input.0))
|
input: Form<NewThreadForm>,
|
||||||
|
mut req: HttpRequest<AppState>) -> ConverseResponse {
|
||||||
|
// Author is "unwrapped" because the RequireLogin middleware
|
||||||
|
// guarantees it to be present.
|
||||||
|
let author: Author = req.session().get(AUTHOR).unwrap().unwrap();
|
||||||
|
let new_thread = NewThread {
|
||||||
|
title: input.0.title,
|
||||||
|
body: input.0.body,
|
||||||
|
author_name: author.name,
|
||||||
|
author_email: author.email,
|
||||||
|
};
|
||||||
|
|
||||||
|
state.db.send(CreateThread(new_thread))
|
||||||
.from_err()
|
.from_err()
|
||||||
.and_then(move |res| {
|
.and_then(move |res| {
|
||||||
let thread = res?;
|
let thread = res?;
|
||||||
|
@ -96,10 +114,28 @@ pub fn submit_thread(state: State<AppState>, input: Form<NewThread>) -> Converse
|
||||||
.responder()
|
.responder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct NewPostForm {
|
||||||
|
pub thread_id: i32,
|
||||||
|
pub body: String,
|
||||||
|
}
|
||||||
|
|
||||||
/// This handler receives a "Reply"-form and redirects the user to the
|
/// This handler receives a "Reply"-form and redirects the user to the
|
||||||
/// new post after creation.
|
/// new post after creation.
|
||||||
pub fn reply_thread(state: State<AppState>, input: Form<NewPost>) -> ConverseResponse {
|
pub fn reply_thread(state: State<AppState>,
|
||||||
state.db.send(CreatePost(input.0))
|
input: Form<NewPostForm>,
|
||||||
|
mut req: HttpRequest<AppState>) -> ConverseResponse {
|
||||||
|
// Author is "unwrapped" because the RequireLogin middleware
|
||||||
|
// guarantees it to be present.
|
||||||
|
let author: Author = req.session().get(AUTHOR).unwrap().unwrap();
|
||||||
|
let new_post = NewPost {
|
||||||
|
thread_id: input.thread_id,
|
||||||
|
body: input.0.body,
|
||||||
|
author_name: author.name,
|
||||||
|
author_email: author.email,
|
||||||
|
};
|
||||||
|
|
||||||
|
state.db.send(CreatePost(new_post))
|
||||||
.from_err()
|
.from_err()
|
||||||
.and_then(move |res| {
|
.and_then(move |res| {
|
||||||
let post = res?;
|
let post = res?;
|
||||||
|
|
|
@ -113,8 +113,8 @@ fn main() {
|
||||||
.middleware(sessions)
|
.middleware(sessions)
|
||||||
.middleware(RequireLogin)
|
.middleware(RequireLogin)
|
||||||
.resource("/", |r| r.method(Method::GET).with(forum_index))
|
.resource("/", |r| r.method(Method::GET).with(forum_index))
|
||||||
.resource("/thread/submit", |r| r.method(Method::POST).with2(submit_thread))
|
.resource("/thread/submit", |r| r.method(Method::POST).with3(submit_thread))
|
||||||
.resource("/thread/reply", |r| r.method(Method::POST).with2(reply_thread))
|
.resource("/thread/reply", |r| r.method(Method::POST).with3(reply_thread))
|
||||||
.resource("/thread/{id}", |r| r.method(Method::GET).with2(forum_thread))
|
.resource("/thread/{id}", |r| r.method(Method::GET).with2(forum_thread))
|
||||||
.resource("/oidc/login", |r| r.method(Method::GET).with(login))
|
.resource("/oidc/login", |r| r.method(Method::GET).with(login))
|
||||||
.resource("/oidc/callback", |r| r.method(Method::POST).with3(callback))})
|
.resource("/oidc/callback", |r| r.method(Method::POST).with3(callback))})
|
||||||
|
|
|
@ -27,6 +27,8 @@ pub struct Post {
|
||||||
pub struct NewThread {
|
pub struct NewThread {
|
||||||
pub title: String,
|
pub title: String,
|
||||||
pub body: String,
|
pub body: String,
|
||||||
|
pub author_name: String,
|
||||||
|
pub author_email: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Insertable)]
|
#[derive(Deserialize, Insertable)]
|
||||||
|
@ -34,4 +36,6 @@ pub struct NewThread {
|
||||||
pub struct NewPost {
|
pub struct NewPost {
|
||||||
pub thread_id: i32,
|
pub thread_id: i32,
|
||||||
pub body: String,
|
pub body: String,
|
||||||
|
pub author_name: String,
|
||||||
|
pub author_email: String,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue