diff --git a/members/diesel-demo/src/main.rs b/members/diesel-demo/src/main.rs index e2c1386..ecf370f 100644 --- a/members/diesel-demo/src/main.rs +++ b/members/diesel-demo/src/main.rs @@ -56,6 +56,13 @@ fn repl(conn: &mut SqliteConnection) -> anyhow::Result<()> { Some(i) => i, None => continue, }; + if let Err(e) = Post::delete(conn, id){ + if let Some(e) = e.downcast_ref::() { + if matches!(e, diesel::result::Error::NotFound) { + warn!("No post with id {id} exists"); + } + } + }; } else if buf.starts_with("LIST") { let posts = lib::load_all_posts(conn)?; trace!("loaded posts for display: {posts:#?}"); diff --git a/members/diesel-demo/src/models.rs b/members/diesel-demo/src/models.rs index 0ef2dd2..88e2a90 100644 --- a/members/diesel-demo/src/models.rs +++ b/members/diesel-demo/src/models.rs @@ -32,6 +32,15 @@ impl Post { info!("updated post {}", post.id); Ok(()) } + pub fn delete(conn: &mut SqliteConnection, id: i32) -> anyhow::Result<()> { + use crate::schema::posts::dsl::{posts, published}; + + let post = diesel::delete(posts.find(id)) + .returning(Post::as_returning()) + .get_result(conn)?; + info!("deleted post {}", post.id); + Ok(()) + } } #[derive(Insertable, Debug)]