]> Untitled Git - lemmy.git/blob - server/src/db/user_view.rs
Spanish translations
[lemmy.git] / server / src / db / user_view.rs
1 use super::*;
2
3 table! {
4   user_view (id) {
5     id -> Int4,
6     name -> Varchar,
7     fedi_name -> Varchar,
8     admin -> Bool,
9     banned -> Bool,
10     published -> Timestamp,
11     number_of_posts -> BigInt,
12     post_score -> BigInt,
13     number_of_comments -> BigInt,
14     comment_score -> BigInt,
15   }
16 }
17
18 #[derive(
19   Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
20 )]
21 #[table_name = "user_view"]
22 pub struct UserView {
23   pub id: i32,
24   pub name: String,
25   pub fedi_name: String,
26   pub admin: bool,
27   pub banned: bool,
28   pub published: chrono::NaiveDateTime,
29   pub number_of_posts: i64,
30   pub post_score: i64,
31   pub number_of_comments: i64,
32   pub comment_score: i64,
33 }
34
35 impl UserView {
36   pub fn list(
37     conn: &PgConnection,
38     sort: &SortType,
39     search_term: Option<String>,
40     page: Option<i64>,
41     limit: Option<i64>,
42   ) -> Result<Vec<Self>, Error> {
43     use super::user_view::user_view::dsl::*;
44
45     let (limit, offset) = limit_and_offset(page, limit);
46
47     let mut query = user_view.into_boxed();
48
49     if let Some(search_term) = search_term {
50       query = query.filter(name.ilike(fuzzy_search(&search_term)));
51     };
52
53     query = match sort {
54       SortType::Hot => query
55         .order_by(comment_score.desc())
56         .then_order_by(published.desc()),
57       SortType::New => query.order_by(published.desc()),
58       SortType::TopAll => query.order_by(comment_score.desc()),
59       SortType::TopYear => query
60         .filter(published.gt(now - 1.years()))
61         .order_by(comment_score.desc()),
62       SortType::TopMonth => query
63         .filter(published.gt(now - 1.months()))
64         .order_by(comment_score.desc()),
65       SortType::TopWeek => query
66         .filter(published.gt(now - 1.weeks()))
67         .order_by(comment_score.desc()),
68       SortType::TopDay => query
69         .filter(published.gt(now - 1.days()))
70         .order_by(comment_score.desc()),
71     };
72
73     query = query.limit(limit).offset(offset);
74
75     query.load::<Self>(conn)
76   }
77
78   pub fn read(conn: &PgConnection, from_user_id: i32) -> Result<Self, Error> {
79     use super::user_view::user_view::dsl::*;
80
81     user_view.find(from_user_id).first::<Self>(conn)
82   }
83
84   pub fn admins(conn: &PgConnection) -> Result<Vec<Self>, Error> {
85     use super::user_view::user_view::dsl::*;
86     user_view.filter(admin.eq(true)).load::<Self>(conn)
87   }
88
89   pub fn banned(conn: &PgConnection) -> Result<Vec<Self>, Error> {
90     use super::user_view::user_view::dsl::*;
91     user_view.filter(banned.eq(true)).load::<Self>(conn)
92   }
93 }