-impl<'a> CommentReplyQuery<'a> {
- pub async fn list(self) -> Result<Vec<CommentReplyView>, Error> {
- let conn = &mut get_conn(self.pool).await?;
-
- let person_alias_1 = diesel::alias!(person as person1);
-
- // The left join below will return None in this case
- let person_id_join = self.my_person_id.unwrap_or(PersonId(-1));
-
- let mut query = comment_reply::table
- .inner_join(comment::table)
- .inner_join(person::table.on(comment::creator_id.eq(person::id)))
- .inner_join(post::table.on(comment::post_id.eq(post::id)))
- .inner_join(community::table.on(post::community_id.eq(community::id)))
- .inner_join(person_alias_1)
- .inner_join(comment_aggregates::table.on(comment::id.eq(comment_aggregates::comment_id)))
- .left_join(
- community_person_ban::table.on(
- community::id
- .eq(community_person_ban::community_id)
- .and(community_person_ban::person_id.eq(comment::creator_id)),
- ),
- )
- .left_join(
- community_follower::table.on(
- post::community_id
- .eq(community_follower::community_id)
- .and(community_follower::person_id.eq(person_id_join)),
- ),
- )
- .left_join(
- comment_saved::table.on(
- comment::id
- .eq(comment_saved::comment_id)
- .and(comment_saved::person_id.eq(person_id_join)),
- ),
- )
- .left_join(
- person_block::table.on(
- comment::creator_id
- .eq(person_block::target_id)
- .and(person_block::person_id.eq(person_id_join)),
- ),
- )
- .left_join(
- comment_like::table.on(
- comment::id
- .eq(comment_like::comment_id)
- .and(comment_like::person_id.eq(person_id_join)),
- ),
- )
- .select((
- comment_reply::all_columns,
- comment::all_columns,
- person::all_columns,
- post::all_columns,
- community::all_columns,
- person_alias_1.fields(person::all_columns),
- comment_aggregates::all_columns,
- community_person_ban::all_columns.nullable(),
- community_follower::all_columns.nullable(),
- comment_saved::all_columns.nullable(),
- person_block::all_columns.nullable(),
- comment_like::score.nullable(),
- ))
- .into_boxed();
-
- if let Some(recipient_id) = self.recipient_id {
- query = query.filter(comment_reply::recipient_id.eq(recipient_id));
- }
-
- if self.unread_only.unwrap_or(false) {
- query = query.filter(comment_reply::read.eq(false));
- }
-
- if !self.show_bot_accounts.unwrap_or(true) {
- query = query.filter(person::bot_account.eq(false));
- };
-
- query = match self.sort.unwrap_or(CommentSortType::New) {
- CommentSortType::Hot => query
- .then_order_by(hot_rank(comment_aggregates::score, comment_aggregates::published).desc())
- .then_order_by(comment_aggregates::published.desc()),
- CommentSortType::New => query.then_order_by(comment_reply::published.desc()),
- CommentSortType::Old => query.then_order_by(comment_reply::published.asc()),
- CommentSortType::Top => query.order_by(comment_aggregates::score.desc()),
- };
-
- let (limit, offset) = limit_and_offset(self.page, self.limit)?;
-
- let res = query
- .limit(limit)
- .offset(offset)
- .load::<CommentReplyViewTuple>(conn)
- .await?;
-
- Ok(res.into_iter().map(CommentReplyView::from_tuple).collect())