From a353680e631c3578f7cb0129f3e991d7e4567665 Mon Sep 17 00:00:00 2001 From: "Christoph J. Scherr" Date: Thu, 27 Jun 2024 11:51:28 +0200 Subject: [PATCH] yay we can create posts --- .gitignore | 1 + members/diesel-demo/data/dieseldemo.db | Bin 20480 -> 0 bytes .../2024-06-26-135835_create_posts/up.sql | 8 ----- .../down.sql | 0 .../2024-06-27-090844_create_table/up.sql | 8 +++++ members/diesel-demo/src/main.rs | 29 +++++++++--------- members/diesel-demo/src/models.rs | 12 +++++--- 7 files changed, 31 insertions(+), 27 deletions(-) delete mode 100644 members/diesel-demo/data/dieseldemo.db delete mode 100644 members/diesel-demo/migrations/2024-06-26-135835_create_posts/up.sql rename members/diesel-demo/migrations/{2024-06-26-135835_create_posts => 2024-06-27-090844_create_table}/down.sql (100%) create mode 100644 members/diesel-demo/migrations/2024-06-27-090844_create_table/up.sql diff --git a/.gitignore b/.gitignore index 47c0057..c53d3b2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ members/c-bindings/lib/libtest.so members/c-bindings/lib/libtest.so.1 members/c-bindings/lib/libtest.so.1.0.1 members/sqlite-demo/data/cats.db +members/diesel-demo/data/dieseldemo.db diff --git a/members/diesel-demo/data/dieseldemo.db b/members/diesel-demo/data/dieseldemo.db deleted file mode 100644 index 8ee4e2248e968019b859cb45eeaf172df0dfec68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI&zi!h&90%~bByFjsG%$JTa05duwa9V)s1#M=8jOf=lHxe1oz6~UT1!q`VyA+! zop=c*UWRAjA()ve&W2d+;E{po`;#yB-Tlt;?-MVMGkRwQiO)Vni2JxjY z&wM-_TKSx!X_Za&NTnp0PyJ8v$51}03U8T2SzlxqB^udo7g;4jOanjm zLlK`}`ZG_=f{TTh1kpS$o+&-3xj2v274|2t{Y5O#xhl5a*0uW_c_n+R1&ife$b6^Q zH%AWdpX3?rmHC>FEr)f-wrvg^k*6rysI;kG@FIoc>lBURxw5>Y9;J6xRW@4tLF9&j z00bZa0SG_<0uX=z1Rwwb2teS!6L?C?TGP;tmfkTsjb{6x*-m@=dS~D0utw|9I5^aw zE3z(H`$^=6fB*y_009U<00Izz00bZa0SG`~Ed-vFwe5#L38e4;<)8i$5P$##AOHaf wKmY;|fB*y_009WBu|WF%AJ6}5`~{;l2tWV=5P$##AOHafKmY;|fPfVE4XD4of&c&j diff --git a/members/diesel-demo/migrations/2024-06-26-135835_create_posts/up.sql b/members/diesel-demo/migrations/2024-06-26-135835_create_posts/up.sql deleted file mode 100644 index e7e843f..0000000 --- a/members/diesel-demo/migrations/2024-06-26-135835_create_posts/up.sql +++ /dev/null @@ -1,8 +0,0 @@ --- Your SQL goes here -CREATE TABLE `posts`( - `id` INT4 NOT NULL PRIMARY KEY, - `title` VARCHAR NOT NULL, - `body` TEXT NOT NULL, - `published` BOOL NOT NULL -); - diff --git a/members/diesel-demo/migrations/2024-06-26-135835_create_posts/down.sql b/members/diesel-demo/migrations/2024-06-27-090844_create_table/down.sql similarity index 100% rename from members/diesel-demo/migrations/2024-06-26-135835_create_posts/down.sql rename to members/diesel-demo/migrations/2024-06-27-090844_create_table/down.sql diff --git a/members/diesel-demo/migrations/2024-06-27-090844_create_table/up.sql b/members/diesel-demo/migrations/2024-06-27-090844_create_table/up.sql new file mode 100644 index 0000000..c839a07 --- /dev/null +++ b/members/diesel-demo/migrations/2024-06-27-090844_create_table/up.sql @@ -0,0 +1,8 @@ +-- Your SQL goes here +CREATE TABLE `posts`( + `id` INTEGER NOT NULL PRIMARY KEY, + `title` TEXT NOT NULL, + `body` TEXT NOT NULL, + `published` BOOL NOT NULL DEFAULT false +); + diff --git a/members/diesel-demo/src/main.rs b/members/diesel-demo/src/main.rs index 4208b85..037df2c 100644 --- a/members/diesel-demo/src/main.rs +++ b/members/diesel-demo/src/main.rs @@ -1,6 +1,6 @@ use diesel::SqliteConnection; use diesel_demo::models::PostDraft; -use libpt::log::{self, debug, info, trace, warn}; +use libpt::log::{self, debug, error, info, trace, warn}; use diesel_demo as lib; @@ -14,10 +14,6 @@ fn main() -> anyhow::Result<()> { let mut conn = lib::establish_connection()?; debug!("db connection established"); - let posts = lib::load_posts(&mut conn)?; - - lib::print_posts(&posts); - trace!("entering the repl"); repl(&mut conn)?; trace!("leaving the repl"); @@ -32,19 +28,24 @@ fn repl(conn: &mut SqliteConnection) -> anyhow::Result<()> { lib::read_buf_interactive(&mut buf)?; buf = buf.to_uppercase(); if buf.starts_with("HELP") { - println!("\ + println!( + "\ help - show this menu\n\ exit - exit the application\n\ - new - create a new post") - } - else if buf.starts_with("EXIT") { + list - list all posts\n\ + new - create a new post" + ) + } else if buf.starts_with("EXIT") { break; - } - else if buf.starts_with("NEW") { + } else if buf.starts_with("LIST") { + let posts = lib::load_posts(conn)?; + lib::print_posts(&posts); + } else if buf.starts_with("NEW") { let post = PostDraft::interactive_create()?; - post.post(conn)?; - } - else { + let _ = post.post(conn).inspect_err(|e| { + error!("Could not submit the post: {e:?}"); + }); + } else { println!("Bad input: try 'help'"); } } diff --git a/members/diesel-demo/src/models.rs b/members/diesel-demo/src/models.rs index f0c268a..981a64b 100644 --- a/members/diesel-demo/src/models.rs +++ b/members/diesel-demo/src/models.rs @@ -1,6 +1,7 @@ use std::io::{self, Read, Write}; use diesel::prelude::*; +use libpt::log::trace; use crate::schema::posts; @@ -10,10 +11,9 @@ const EOF: &str = "CTRL+D"; #[cfg(windows)] const EOF: &str = "CTRL+Z"; -#[derive(Queryable, Selectable)] +#[derive(Queryable, Selectable, Debug)] #[diesel(table_name = crate::schema::posts)] -#[diesel(check_for_backend(diesel::sqlite::Sqlite))] // optional but improves generated compiler - // errors +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] // optional but improves generated compiler errors pub struct Post { pub id: i32, pub title: String, @@ -21,8 +21,9 @@ pub struct Post { pub published: bool, } -#[derive(Insertable)] +#[derive(Insertable, Debug)] #[diesel(table_name = crate::schema::posts)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] // optional but improves generated compiler errors pub struct PostDraft { pub title: String, pub body: String, @@ -36,6 +37,7 @@ impl PostDraft { } } pub fn post(self, conn: &mut SqliteConnection) -> anyhow::Result { + trace!("PostDraft to post: {self:#?}"); Ok(diesel::insert_into(posts::table) .values(&self) .returning(Post::as_returning()) @@ -52,7 +54,7 @@ impl PostDraft { stdin.read_line(&mut title)?; title = title.trim().to_string(); - println!("(End with {} when finished) Body:\n", EOF); + println!("(End with {} when finished) Body:", EOF); stdin.read_to_string(&mut body)?; body = body.trim().to_string();