X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapi_crud%2Fsrc%2Fprivate_message%2Fread.rs;h=0d3ba8620eb5fe6b3afa02818ba342294d7d437d;hb=c8063f3267cf2b3622f1fdc69128c6b55feefbbc;hp=bf119d75c004a48c31550c92dafbf9075a171d09;hpb=8708ad1b44e58dfbd8c555f9bc270daadbfa01af;p=lemmy.git diff --git a/crates/api_crud/src/private_message/read.rs b/crates/api_crud/src/private_message/read.rs index bf119d75..0d3ba862 100644 --- a/crates/api_crud/src/private_message/read.rs +++ b/crates/api_crud/src/private_message/read.rs @@ -1,54 +1,42 @@ -use crate::PerformCrud; -use actix_web::web::Data; +use actix_web::web::{Data, Json, Query}; use lemmy_api_common::{ - blocking, - get_local_user_view_from_jwt, - person::{GetPrivateMessages, PrivateMessagesResponse}, + context::LemmyContext, + private_message::{GetPrivateMessages, PrivateMessagesResponse}, + utils::local_user_view_from_jwt, }; -use lemmy_db_queries::DeleteableOrRemoveable; -use lemmy_db_views::private_message_view::PrivateMessageQueryBuilder; -use lemmy_utils::{ConnectionId, LemmyError}; -use lemmy_websocket::LemmyContext; +use lemmy_db_views::private_message_view::PrivateMessageQuery; +use lemmy_utils::error::LemmyError; -#[async_trait::async_trait(?Send)] -impl PerformCrud for GetPrivateMessages { - type Response = PrivateMessagesResponse; +#[tracing::instrument(skip(context))] +pub async fn get_private_message( + data: Query, + context: Data, +) -> Result, LemmyError> { + let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), &context).await?; + let person_id = local_user_view.person.id; - async fn perform( - &self, - context: &Data, - _websocket_id: Option, - ) -> Result { - let data: &GetPrivateMessages = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; - let person_id = local_user_view.person.id; - - let page = data.page; - let limit = data.limit; - let unread_only = data.unread_only; - let mut messages = blocking(context.pool(), move |conn| { - PrivateMessageQueryBuilder::create(conn, person_id) - .page(page) - .limit(limit) - .unread_only(unread_only) - .list() - }) - .await??; + let page = data.page; + let limit = data.limit; + let unread_only = data.unread_only.unwrap_or_default(); + let creator_id = data.creator_id; + let mut messages = PrivateMessageQuery { + page, + limit, + unread_only, + creator_id, + } + .list(&mut context.pool(), person_id) + .await?; - // Blank out deleted or removed info - for pmv in messages - .iter_mut() - .filter(|pmv| pmv.private_message.deleted) - { - pmv.private_message = pmv - .to_owned() - .private_message - .blank_out_deleted_or_removed_info(); + // Messages sent by ourselves should be marked as read. The `read` column in database is only + // for the recipient, and shouldnt be exposed to sender. + messages.iter_mut().for_each(|pmv| { + if pmv.creator.id == person_id { + pmv.private_message.read = true } + }); - Ok(PrivateMessagesResponse { - private_messages: messages, - }) - } + Ok(Json(PrivateMessagesResponse { + private_messages: messages, + })) }