1 use crate::PerformCrud;
2 use actix_web::web::Data;
3 use lemmy_api_common::{
5 private_message::{DeletePrivateMessage, PrivateMessageResponse},
6 utils::local_user_view_from_jwt,
9 source::private_message::{PrivateMessage, PrivateMessageUpdateForm},
12 use lemmy_db_views::structs::PrivateMessageView;
13 use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType};
15 #[async_trait::async_trait(?Send)]
16 impl PerformCrud for DeletePrivateMessage {
17 type Response = PrivateMessageResponse;
19 #[tracing::instrument(skip(self, context))]
22 context: &Data<LemmyContext>,
23 ) -> Result<PrivateMessageResponse, LemmyError> {
24 let data: &DeletePrivateMessage = self;
25 let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
27 // Checking permissions
28 let private_message_id = data.private_message_id;
29 let orig_private_message =
30 PrivateMessage::read(&mut context.pool(), private_message_id).await?;
31 if local_user_view.person.id != orig_private_message.creator_id {
32 return Err(LemmyErrorType::EditPrivateMessageNotAllowed)?;
36 let private_message_id = data.private_message_id;
37 let deleted = data.deleted;
38 PrivateMessage::update(
41 &PrivateMessageUpdateForm::builder()
42 .deleted(Some(deleted))
46 .with_lemmy_type(LemmyErrorType::CouldntUpdatePrivateMessage)?;
48 let view = PrivateMessageView::read(&mut context.pool(), private_message_id).await?;
49 Ok(PrivateMessageResponse {
50 private_message_view: view,