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 8ee4e22..0000000 Binary files a/members/diesel-demo/data/dieseldemo.db and /dev/null differ 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();