1 use crate::structs::CommunityPersonBanView;
2 use diesel::{result::Error, ExpressionMethods, QueryDsl};
3 use diesel_async::RunQueryDsl;
5 newtypes::{CommunityId, PersonId},
6 schema::{community, community_person_ban, person},
7 source::{community::Community, person::Person},
8 utils::{get_conn, DbPool},
11 impl CommunityPersonBanView {
13 pool: &mut 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)
28 Ok(CommunityPersonBanView { community, person })