diff options
Diffstat (limited to 'server/src/db/user_view.rs')
-rw-r--r-- | server/src/db/user_view.rs | 43 |
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::*; |