summaryrefslogtreecommitdiffstats
path: root/server/src/db/user_view.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/db/user_view.rs')
-rw-r--r--server/src/db/user_view.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/server/src/db/user_view.rs b/server/src/db/user_view.rs
index 3d78ae1a..897ee23a 100644
--- a/server/src/db/user_view.rs
+++ b/server/src/db/user_view.rs
@@ -31,6 +31,49 @@ pub struct UserView {
}
impl UserView {
+
+ pub fn list(conn: &PgConnection,
+ sort: &SortType,
+ search_term: Option<String>,
+ page: Option<i64>,
+ limit: Option<i64>,
+ ) -> Result<Vec<Self>, Error> {
+ use super::user_view::user_view::dsl::*;
+
+ let (limit, offset) = limit_and_offset(page, limit);
+
+ let mut query = user_view.into_boxed();
+
+ if let Some(search_term) = search_term {
+ query = query.filter(name.ilike(fuzzy_search(&search_term)));
+ };
+
+ query = match sort {
+ SortType::Hot => query.order_by(comment_score.desc())
+ .then_order_by(published.desc()),
+ SortType::New => query.order_by(published.desc()),
+ SortType::TopAll => query.order_by(comment_score.desc()),
+ SortType::TopYear => query
+ .filter(published.gt(now - 1.years()))
+ .order_by(comment_score.desc()),
+ SortType::TopMonth => query
+ .filter(published.gt(now - 1.months()))
+ .order_by(comment_score.desc()),
+ SortType::TopWeek => query
+ .filter(published.gt(now - 1.weeks()))
+ .order_by(comment_score.desc()),
+ SortType::TopDay => query
+ .filter(published.gt(now - 1.days()))
+ .order_by(comment_score.desc())
+ };
+
+ query = query
+ .limit(limit)
+ .offset(offset);
+
+ query.load::<Self>(conn)
+ }
+
pub fn read(conn: &PgConnection, from_user_id: i32) -> Result<Self, Error> {
use super::user_view::user_view::dsl::*;