diff --git a/src/admin.rs b/src/admin.rs index 8723c1c..0706fb5 100644 --- a/src/admin.rs +++ b/src/admin.rs @@ -1,5 +1,6 @@ use crate::controllers::posts; use crate::misc::get_context; +use crate::models::NewPost; use rocket::http::{Cookie, Cookies}; use rocket::request::Form; use rocket::response::Redirect; @@ -14,13 +15,6 @@ struct Login { password: String, } -#[derive(FromForm, Debug)] -struct Post { - pub title: String, - pub content: String, - pub published: bool, -} - #[get("/")] fn index(mut cookies: Cookies<'_>) -> Result { let password = env::var("admin_pass").expect("admin_pass not setted"); @@ -92,22 +86,21 @@ fn add_post(mut cookies: Cookies<'_>) -> Result { } #[post("/add_post", data = "")] -fn write_post(mut cookies: Cookies<'_>, post: Form) -> Result { +fn write_post(mut cookies: Cookies<'_>, post: Form) -> Redirect { let password = env::var("admin_pass").expect("admin_pass not setted"); match cookies.get_private("user") { Some(cookie) => { if cookie.value() == password { - let context = get_context(); - - println!("{:?}", post); - - Ok(Template::render("admin/add_post", context)) + match posts::add_post(&post) { + Ok(post) => Redirect::to(format!("/post/{}", post.id)), + Err(_) => Redirect::to("admin/add_post"), + } } else { - Err(Redirect::to("/admin")) + Redirect::to("/admin") } } - None => Err(Redirect::to("/admin")), + None => Redirect::to("/admin"), } } diff --git a/src/controllers.rs b/src/controllers.rs index a75837f..d69f8ba 100644 --- a/src/controllers.rs +++ b/src/controllers.rs @@ -15,7 +15,7 @@ fn establish_connection() -> PgConnection { pub mod posts { use crate::controllers::*; - use crate::models::Post; + use crate::models::{NewPost, Post}; pub const MAX_POSTS_PER_PAGE: u64 = 20; @@ -48,4 +48,13 @@ pub mod posts { post } + + pub fn add_post(new_post: &NewPost) -> Result { + use crate::schema::posts; + + let connection = establish_connection(); + diesel::insert_into(posts::table) + .values(new_post) + .get_result(&connection) + } } diff --git a/src/models.rs b/src/models.rs index 7016c8b..268a264 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,6 +1,8 @@ use chrono::NaiveDateTime; use serde::Serialize; +use super::schema::posts; + #[derive(Queryable, Serialize)] pub struct Post { pub id: i32, @@ -10,3 +12,11 @@ pub struct Post { pub created_at: NaiveDateTime, pub updated_at: NaiveDateTime, } + +#[derive(FromForm, Insertable, Debug)] +#[table_name = "posts"] +pub struct NewPost { + pub title: String, + pub content: String, + pub published: bool, +} diff --git a/templates/admin/add_post.html.tera b/templates/admin/add_post.html.tera index c0f753b..439705c 100644 --- a/templates/admin/add_post.html.tera +++ b/templates/admin/add_post.html.tera @@ -30,7 +30,7 @@ - +