X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapi_crud%2Fsrc%2Fprivate_message%2Fread.rs;h=0d3ba8620eb5fe6b3afa02818ba342294d7d437d;hb=c8063f3267cf2b3622f1fdc69128c6b55feefbbc;hp=79bc85f45bd391078e97694aca6e68946b2f13ae;hpb=249fcc5066c30158eb3a3094a21ff5e021534cd2;p=lemmy.git diff --git a/crates/api_crud/src/private_message/read.rs b/crates/api_crud/src/private_message/read.rs index 79bc85f4..0d3ba862 100644 --- a/crates/api_crud/src/private_message/read.rs +++ b/crates/api_crud/src/private_message/read.rs @@ -1,41 +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_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()).await?; - let person_id = local_user_view.person.id; + 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?; - let page = data.page; - let limit = data.limit; - let unread_only = data.unread_only; - let messages = blocking(context.pool(), move |conn| { - PrivateMessageQueryBuilder::create(&conn, person_id) - .page(page) - .limit(limit) - .unread_only(unread_only) - .list() - }) - .await??; + // 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, + })) }