use crate::structs::CommentReplyView;
use diesel::{
- dsl::now,
result::Error,
BoolExpressionMethods,
ExpressionMethods,
post::Post,
},
traits::JoinView,
- utils::{functions::hot_rank, get_conn, limit_and_offset, DbPool},
+ utils::{get_conn, limit_and_offset, DbPool},
CommentSortType,
};
use typed_builder::TypedBuilder;
impl CommentReplyView {
pub async fn read(
- pool: &DbPool,
+ pool: &mut DbPool<'_>,
comment_reply_id: CommentReplyId,
my_person_id: Option<PersonId>,
) -> Result<Self, Error> {
community_person_ban::table.on(
community::id
.eq(community_person_ban::community_id)
- .and(community_person_ban::person_id.eq(comment::creator_id))
- .and(
- community_person_ban::expires
- .is_null()
- .or(community_person_ban::expires.gt(now)),
- ),
+ .and(community_person_ban::person_id.eq(comment::creator_id)),
),
)
.left_join(
}
/// Gets the number of unread replies
- pub async fn get_unread_replies(pool: &DbPool, my_person_id: PersonId) -> Result<i64, Error> {
+ pub async fn get_unread_replies(
+ pool: &mut DbPool<'_>,
+ my_person_id: PersonId,
+ ) -> Result<i64, Error> {
use diesel::dsl::count;
let conn = &mut get_conn(pool).await?;
#[derive(TypedBuilder)]
#[builder(field_defaults(default))]
-pub struct CommentReplyQuery<'a> {
+pub struct CommentReplyQuery<'a, 'b: 'a> {
#[builder(!default)]
- pool: &'a DbPool,
+ pool: &'a mut DbPool<'b>,
my_person_id: Option<PersonId>,
recipient_id: Option<PersonId>,
sort: Option<CommentSortType>,
limit: Option<i64>,
}
-impl<'a> CommentReplyQuery<'a> {
+impl<'a, 'b: 'a> CommentReplyQuery<'a, 'b> {
pub async fn list(self) -> Result<Vec<CommentReplyView>, Error> {
let conn = &mut get_conn(self.pool).await?;
community_person_ban::table.on(
community::id
.eq(community_person_ban::community_id)
- .and(community_person_ban::person_id.eq(comment::creator_id))
- .and(
- community_person_ban::expires
- .is_null()
- .or(community_person_ban::expires.gt(now)),
- ),
+ .and(community_person_ban::person_id.eq(comment::creator_id)),
),
)
.left_join(
query = query.filter(person::bot_account.eq(false));
};
- query = match self.sort.unwrap_or(CommentSortType::Hot) {
- 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::published.desc()),
- CommentSortType::Old => query.then_order_by(comment::published.asc()),
+ query = match self.sort.unwrap_or(CommentSortType::New) {
+ CommentSortType::Hot => query.then_order_by(comment_aggregates::hot_rank.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()),
};