diff --git a/src/db.rs b/src/db.rs index ed4a78659..8c828d9c6 100644 --- a/src/db.rs +++ b/src/db.rs @@ -1,6 +1,7 @@ //! This module implements the database connection actor. use actix::prelude::*; +use diesel; use diesel::prelude::*; use diesel::r2d2::{Pool, ConnectionManager}; use models::*; @@ -57,3 +58,24 @@ impl Handler for DbExecutor { Ok((thread_result, post_list)) } } + +/// Message used to create a new thread +pub struct CreateThread(pub NewThread); + +impl Message for CreateThread { + type Result = Result; +} + +impl Handler for DbExecutor { + type Result = ::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)?) + } +} diff --git a/src/models.rs b/src/models.rs index 42d8d1164..fc67c260a 100644 --- a/src/models.rs +++ b/src/models.rs @@ -17,3 +17,10 @@ pub struct Post { pub body: String, pub posted: DateTime, } + +#[derive(Insertable)] +#[table_name="threads"] +pub struct NewThread { + pub title: String, + pub body: String, +}