1 use actix_web::web::{Data, Json, Query};
2 use lemmy_api_common::{
4 private_message::{GetPrivateMessages, PrivateMessagesResponse},
5 utils::local_user_view_from_jwt,
7 use lemmy_db_views::private_message_view::PrivateMessageQuery;
8 use lemmy_utils::error::LemmyError;
10 #[tracing::instrument(skip(context))]
11 pub async fn get_private_message(
12 data: Query<GetPrivateMessages>,
13 context: Data<LemmyContext>,
14 ) -> Result<Json<PrivateMessagesResponse>, LemmyError> {
15 let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), &context).await?;
16 let person_id = local_user_view.person.id;
19 let limit = data.limit;
20 let unread_only = data.unread_only.unwrap_or_default();
21 let creator_id = data.creator_id;
22 let mut messages = PrivateMessageQuery {
28 .list(&mut context.pool(), person_id)
31 // Messages sent by ourselves should be marked as read. The `read` column in database is only
32 // for the recipient, and shouldnt be exposed to sender.
33 messages.iter_mut().for_each(|pmv| {
34 if pmv.creator.id == person_id {
35 pmv.private_message.read = true
39 Ok(Json(PrivateMessagesResponse {
40 private_messages: messages,