From cf9c8cbb4f07ddc6f0a21307dcdc3e044cd1f953 Mon Sep 17 00:00:00 2001 From: Geometrically <18202329+Geometrically@users.noreply.github.com> Date: Thu, 28 Dec 2023 20:25:55 -0500 Subject: [PATCH] Fix deletion of private notes (#814) --- src/database/models/thread_item.rs | 6 ++++-- src/models/v2/threads.rs | 9 +++++++-- src/models/v3/threads.rs | 7 ++++++- src/routes/v3/threads.rs | 10 +++++++++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/database/models/thread_item.rs b/src/database/models/thread_item.rs index 6715e20b6..ce9a3c369 100644 --- a/src/database/models/thread_item.rs +++ b/src/database/models/thread_item.rs @@ -241,7 +241,8 @@ impl ThreadMessage { id: ThreadMessageId(x.id), thread_id: ThreadId(x.thread_id), author_id: x.author_id.map(UserId), - body: serde_json::from_value(x.body).unwrap_or(MessageBody::Deleted), + body: serde_json::from_value(x.body) + .unwrap_or(MessageBody::Deleted { private: false }), created: x.created, })) }) @@ -253,6 +254,7 @@ impl ThreadMessage { pub async fn remove_full( id: ThreadMessageId, + private: bool, transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>, ) -> Result, sqlx::error::Error> { sqlx::query!( @@ -262,7 +264,7 @@ impl ThreadMessage { WHERE id = $1 ", id as ThreadMessageId, - serde_json::to_value(MessageBody::Deleted).unwrap_or(serde_json::json!({})) + serde_json::to_value(MessageBody::Deleted { private }).unwrap_or(serde_json::json!({})) ) .execute(&mut **transaction) .await?; diff --git a/src/models/v2/threads.rs b/src/models/v2/threads.rs index dcf9386b0..70654b84e 100644 --- a/src/models/v2/threads.rs +++ b/src/models/v2/threads.rs @@ -40,7 +40,10 @@ pub enum LegacyMessageBody { }, ThreadClosure, ThreadReopen, - Deleted, + Deleted { + #[serde(default)] + private: bool, + }, } #[derive(Serialize, Deserialize, Eq, PartialEq, Copy, Clone)] @@ -90,7 +93,9 @@ impl From for LegacyMessageBody { crate::models::v3::threads::MessageBody::ThreadReopen => { LegacyMessageBody::ThreadReopen } - crate::models::v3::threads::MessageBody::Deleted => LegacyMessageBody::Deleted, + crate::models::v3::threads::MessageBody::Deleted { private } => { + LegacyMessageBody::Deleted { private } + } } } } diff --git a/src/models/v3/threads.rs b/src/models/v3/threads.rs index 2bcb706e3..5a18de7f2 100644 --- a/src/models/v3/threads.rs +++ b/src/models/v3/threads.rs @@ -51,7 +51,10 @@ pub enum MessageBody { }, ThreadClosure, ThreadReopen, - Deleted, + Deleted { + #[serde(default)] + private: bool, + }, } #[derive(Serialize, Deserialize, Eq, PartialEq, Copy, Clone)] @@ -103,6 +106,8 @@ impl Thread { .filter(|x| { if let MessageBody::Text { private, .. } = x.body { !private || user.role.is_mod() + } else if let MessageBody::Deleted { private, .. } = x.body { + !private || user.role.is_mod() } else { true } diff --git a/src/routes/v3/threads.rs b/src/routes/v3/threads.rs index 9dcc00224..67c121b97 100644 --- a/src/routes/v3/threads.rs +++ b/src/routes/v3/threads.rs @@ -611,7 +611,15 @@ pub async fn message_delete( database::Image::remove(image.id, &mut transaction, &redis).await?; } - database::models::ThreadMessage::remove_full(thread.id, &mut transaction).await?; + let private = if let MessageBody::Text { private, .. } = thread.body { + private + } else if let MessageBody::Deleted { private, .. } = thread.body { + private + } else { + false + }; + + database::models::ThreadMessage::remove_full(thread.id, private, &mut transaction).await?; transaction.commit().await?; Ok(HttpResponse::NoContent().body(""))