feat(db): Support CreateThread message

This commit is contained in:
Vincent Ambo 2018-04-08 19:41:28 +02:00
parent f281749b8c
commit fc7ca2900d
2 changed files with 29 additions and 0 deletions

View file

@ -1,6 +1,7 @@
//! This module implements the database connection actor. //! This module implements the database connection actor.
use actix::prelude::*; use actix::prelude::*;
use diesel;
use diesel::prelude::*; use diesel::prelude::*;
use diesel::r2d2::{Pool, ConnectionManager}; use diesel::r2d2::{Pool, ConnectionManager};
use models::*; use models::*;
@ -57,3 +58,24 @@ impl Handler<GetThread> for DbExecutor {
Ok((thread_result, post_list)) Ok((thread_result, post_list))
} }
} }
/// Message used to create a new thread
pub struct CreateThread(pub NewThread);
impl Message for CreateThread {
type Result = Result<Thread>;
}
impl Handler<CreateThread> for DbExecutor {
type Result = <CreateThread as Message>::Result;
fn handle(&mut self, msg: CreateThread, _: &mut Self::Context) -> Self::Result {
use schema::threads;
let conn = self.0.get()?;
Ok(diesel::insert_into(threads::table)
.values(&msg.0)
.get_result(&conn)?)
}
}

View file

@ -17,3 +17,10 @@ pub struct Post {
pub body: String, pub body: String,
pub posted: DateTime<Utc>, pub posted: DateTime<Utc>,
} }
#[derive(Insertable)]
#[table_name="threads"]
pub struct NewThread {
pub title: String,
pub body: String,
}