2 use actix_web::web::Data;
3 use lemmy_api_common::{
5 private_message::{MarkPrivateMessageAsRead, 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 Perform for MarkPrivateMessageAsRead {
17 type Response = PrivateMessageResponse;
19 #[tracing::instrument(skip(context))]
22 context: &Data<LemmyContext>,
23 ) -> Result<PrivateMessageResponse, LemmyError> {
24 let data: &MarkPrivateMessageAsRead = 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.recipient_id {
32 return Err(LemmyErrorType::CouldntUpdatePrivateMessage)?;
36 let private_message_id = data.private_message_id;
38 PrivateMessage::update(
41 &PrivateMessageUpdateForm {
47 .with_lemmy_type(LemmyErrorType::CouldntUpdatePrivateMessage)?;
49 let view = PrivateMessageView::read(&mut context.pool(), private_message_id).await?;
50 Ok(PrivateMessageResponse {
51 private_message_view: view,