- pub fn list(self) -> Result<Vec<PersonViewSafe>, Error> {
- let mut query = person::table
- .inner_join(person_aggregates::table)
- .select((Person::safe_columns_tuple(), person_aggregates::all_columns))
- .into_boxed();
-
- if let Some(search_term) = self.search_term {
- query = query.filter(person::name.ilike(fuzzy_search(&search_term)));
- }
-
- query = match self.sort.unwrap_or(SortType::Hot) {
- SortType::Hot => query
- .order_by(person_aggregates::comment_score.desc())
- .then_order_by(person::published.desc()),
- SortType::Active => query
- .order_by(person_aggregates::comment_score.desc())
- .then_order_by(person::published.desc()),
- SortType::New | SortType::MostComments | SortType::NewComments => {
- query.order_by(person::published.desc())
- }
- SortType::Old => query.order_by(person::published.asc()),
- SortType::TopAll => query.order_by(person_aggregates::comment_score.desc()),
- SortType::TopYear => query
- .filter(person::published.gt(now - 1.years()))
- .order_by(person_aggregates::comment_score.desc()),
- SortType::TopMonth => query
- .filter(person::published.gt(now - 1.months()))
- .order_by(person_aggregates::comment_score.desc()),
- SortType::TopWeek => query
- .filter(person::published.gt(now - 1.weeks()))
- .order_by(person_aggregates::comment_score.desc()),
- SortType::TopDay => query
- .filter(person::published.gt(now - 1.days()))
- .order_by(person_aggregates::comment_score.desc()),
- };
-
- let (limit, offset) = limit_and_offset(self.page, self.limit)?;
- query = query.limit(limit).offset(offset);
-
- let res = query.load::<PersonViewSafeTuple>(self.conn)?;