]> Untitled Git - lemmy.git/blob - crates/db_views_moderator/src/admin_purge_community_view.rs
Adding admin purging of DB items and pictures. #904 #1331 (#1809)
[lemmy.git] / crates / db_views_moderator / src / admin_purge_community_view.rs
1 use crate::structs::AdminPurgeCommunityView;
2 use diesel::{result::Error, *};
3 use lemmy_db_schema::{
4   newtypes::PersonId,
5   schema::{admin_purge_community, person},
6   source::{
7     moderator::AdminPurgeCommunity,
8     person::{Person, PersonSafe},
9   },
10   traits::{ToSafe, ViewToVec},
11   utils::limit_and_offset,
12 };
13
14 type AdminPurgeCommunityViewTuple = (AdminPurgeCommunity, PersonSafe);
15
16 impl AdminPurgeCommunityView {
17   pub fn list(
18     conn: &PgConnection,
19     admin_person_id: Option<PersonId>,
20     page: Option<i64>,
21     limit: Option<i64>,
22   ) -> Result<Vec<Self>, Error> {
23     let mut query = admin_purge_community::table
24       .inner_join(person::table.on(admin_purge_community::admin_person_id.eq(person::id)))
25       .select((
26         admin_purge_community::all_columns,
27         Person::safe_columns_tuple(),
28       ))
29       .into_boxed();
30
31     if let Some(admin_person_id) = admin_person_id {
32       query = query.filter(admin_purge_community::admin_person_id.eq(admin_person_id));
33     };
34
35     let (limit, offset) = limit_and_offset(page, limit);
36
37     let res = query
38       .limit(limit)
39       .offset(offset)
40       .order_by(admin_purge_community::when_.desc())
41       .load::<AdminPurgeCommunityViewTuple>(conn)?;
42
43     Ok(Self::from_tuple_to_vec(res))
44   }
45 }
46
47 impl ViewToVec for AdminPurgeCommunityView {
48   type DbTuple = AdminPurgeCommunityViewTuple;
49   fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
50     items
51       .iter()
52       .map(|a| Self {
53         admin_purge_community: a.0.to_owned(),
54         admin: a.1.to_owned(),
55       })
56       .collect::<Vec<Self>>()
57   }
58 }