mirror of
https://github.com/LemmyNet/lemmy.git
synced 2025-02-03 15:51:41 +00:00
42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
use crate::structs::PrivateMessageView;
|
|
use diesel::{result::Error, ExpressionMethods, JoinOnDsl, QueryDsl};
|
|
use diesel_async::RunQueryDsl;
|
|
use lemmy_db_schema::{
|
|
aliases,
|
|
newtypes::PrivateMessageId,
|
|
schema::{instance_actions, person, person_actions, private_message},
|
|
utils::{actions, get_conn, DbPool},
|
|
};
|
|
|
|
impl PrivateMessageView {
|
|
pub async fn read(
|
|
pool: &mut DbPool<'_>,
|
|
private_message_id: PrivateMessageId,
|
|
) -> Result<Self, Error> {
|
|
let conn = &mut get_conn(pool).await?;
|
|
|
|
private_message::table
|
|
.find(private_message_id)
|
|
.inner_join(person::table.on(private_message::creator_id.eq(person::id)))
|
|
.inner_join(
|
|
aliases::person1.on(private_message::recipient_id.eq(aliases::person1.field(person::id))),
|
|
)
|
|
.left_join(actions(
|
|
person_actions::table,
|
|
Some(aliases::person1.field(person::id)),
|
|
private_message::creator_id,
|
|
))
|
|
.left_join(actions(
|
|
instance_actions::table,
|
|
Some(aliases::person1.field(person::id)),
|
|
person::instance_id,
|
|
))
|
|
.select((
|
|
private_message::all_columns,
|
|
person::all_columns,
|
|
aliases::person1.fields(person::all_columns),
|
|
))
|
|
.first(conn)
|
|
.await
|
|
}
|
|
}
|