]> Untitled Git - lemmy.git/blob - crates/db_views_actor/src/community_person_ban_view.rs
35eacf0f72bcf0c1fe6ae6f7ccefb8256ef9d5ec
[lemmy.git] / crates / db_views_actor / src / community_person_ban_view.rs
1 use crate::structs::CommunityPersonBanView;
2 use diesel::{result::Error, ExpressionMethods, QueryDsl};
3 use diesel_async::RunQueryDsl;
4 use lemmy_db_schema::{
5   newtypes::{CommunityId, PersonId},
6   schema::{community, community_person_ban, person},
7   source::{community::Community, person::Person},
8   utils::{get_conn, DbPool},
9 };
10
11 impl CommunityPersonBanView {
12   pub async fn get(
13     pool: &DbPool,
14     from_person_id: PersonId,
15     from_community_id: CommunityId,
16   ) -> Result<Self, Error> {
17     let conn = &mut get_conn(pool).await?;
18     let (community, person) = community_person_ban::table
19       .inner_join(community::table)
20       .inner_join(person::table)
21       .select((community::all_columns, person::all_columns))
22       .filter(community_person_ban::community_id.eq(from_community_id))
23       .filter(community_person_ban::person_id.eq(from_person_id))
24       .order_by(community_person_ban::published)
25       .first::<(Community, Person)>(conn)
26       .await?;
27
28     Ok(CommunityPersonBanView { community, person })
29   }
30 }