]> Untitled Git - lemmy.git/blob - crates/db_views_actor/src/community_person_ban_view.rs
Various pedantic clippy fixes (#2568)
[lemmy.git] / crates / db_views_actor / src / community_person_ban_view.rs
1 use crate::structs::CommunityPersonBanView;
2 use diesel::{dsl::now, result::Error, BoolExpressionMethods, 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::{
8     community::{Community, CommunitySafe},
9     person::{Person, PersonSafe},
10   },
11   traits::ToSafe,
12   utils::{get_conn, DbPool},
13 };
14
15 impl CommunityPersonBanView {
16   pub async fn get(
17     pool: &DbPool,
18     from_person_id: PersonId,
19     from_community_id: CommunityId,
20   ) -> Result<Self, Error> {
21     let conn = &mut get_conn(pool).await?;
22     let (community, person) = community_person_ban::table
23       .inner_join(community::table)
24       .inner_join(person::table)
25       .select((
26         Community::safe_columns_tuple(),
27         Person::safe_columns_tuple(),
28       ))
29       .filter(community_person_ban::community_id.eq(from_community_id))
30       .filter(community_person_ban::person_id.eq(from_person_id))
31       .filter(
32         community_person_ban::expires
33           .is_null()
34           .or(community_person_ban::expires.gt(now)),
35       )
36       .order_by(community_person_ban::published)
37       .first::<(CommunitySafe, PersonSafe)>(conn)
38       .await?;
39
40     Ok(CommunityPersonBanView { community, person })
41   }
42 }