]> Untitled Git - lemmy.git/blobdiff - crates/db_views/src/post_view.rs
Make functions work with both connection and pool (#3420)
[lemmy.git] / crates / db_views / src / post_view.rs
index 07ad40d456910be0e5cfc02d104554cad5bb6268..07433667a72ba1fb78be14a8eaf7db27cb464ba9 100644 (file)
@@ -65,7 +65,7 @@ sql_function!(fn coalesce(x: sql_types::Nullable<sql_types::BigInt>, y: sql_type
 
 impl PostView {
   pub async fn read(
-    pool: &DbPool,
+    pool: &mut DbPool<'_>,
     post_id: PostId,
     my_person_id: Option<PersonId>,
     is_mod_or_admin: Option<bool>,
@@ -195,9 +195,9 @@ impl PostView {
 
 #[derive(TypedBuilder)]
 #[builder(field_defaults(default))]
-pub struct PostQuery<'a> {
+pub struct PostQuery<'a, 'b: 'a> {
   #[builder(!default)]
-  pool: &'a DbPool,
+  pool: &'a mut DbPool<'b>,
   listing_type: Option<ListingType>,
   sort: Option<SortType>,
   creator_id: Option<PersonId>,
@@ -212,7 +212,7 @@ pub struct PostQuery<'a> {
   limit: Option<i64>,
 }
 
-impl<'a> PostQuery<'a> {
+impl<'a, 'b: 'a> PostQuery<'a, 'b> {
   pub async fn list(self) -> Result<Vec<PostView>, Error> {
     let conn = &mut get_conn(self.pool).await?;
 
@@ -391,14 +391,8 @@ impl<'a> PostQuery<'a> {
     }
 
     query = match self.sort.unwrap_or(SortType::Hot) {
-      SortType::Active => query
-        // Hot ranks fade to zero after a few days, and this filter drastically reduces
-        // the number of rows needed to be joined to.
-        .filter(post_aggregates::hot_rank_active.gt(1))
-        .then_order_by(post_aggregates::hot_rank_active.desc()),
-      SortType::Hot => query
-        .filter(post_aggregates::hot_rank.gt(1))
-        .then_order_by(post_aggregates::hot_rank.desc()),
+      SortType::Active => query.then_order_by(post_aggregates::hot_rank_active.desc()),
+      SortType::Hot => query.then_order_by(post_aggregates::hot_rank.desc()),
       SortType::New => query.then_order_by(post_aggregates::published.desc()),
       SortType::Old => query.then_order_by(post_aggregates::published.asc()),
       SortType::NewComments => query.then_order_by(post_aggregates::newest_comment_time.desc()),
@@ -516,7 +510,7 @@ mod tests {
     inserted_post: Post,
   }
 
-  async fn init_data(pool: &DbPool) -> Data {
+  async fn init_data(pool: &mut DbPool<'_>) -> Data {
     let inserted_instance = Instance::read_or_create(pool, "my_domain.tld".to_string())
       .await
       .unwrap();
@@ -614,6 +608,7 @@ mod tests {
   #[serial]
   async fn post_listing_with_person() {
     let pool = &build_db_pool_for_tests().await;
+    let pool = &mut pool.into();
     let data = init_data(pool).await;
 
     let local_user_form = LocalUserUpdateForm::builder()
@@ -682,6 +677,7 @@ mod tests {
   #[serial]
   async fn post_listing_no_person() {
     let pool = &build_db_pool_for_tests().await;
+    let pool = &mut pool.into();
     let data = init_data(pool).await;
 
     let read_post_listing_multiple_no_person = PostQuery::builder()
@@ -719,6 +715,7 @@ mod tests {
   #[serial]
   async fn post_listing_block_community() {
     let pool = &build_db_pool_for_tests().await;
+    let pool = &mut pool.into();
     let data = init_data(pool).await;
 
     let community_block = CommunityBlockForm {
@@ -749,6 +746,7 @@ mod tests {
   #[serial]
   async fn post_listing_like() {
     let pool = &build_db_pool_for_tests().await;
+    let pool = &mut pool.into();
     let data = init_data(pool).await;
 
     let post_like_form = PostLikeForm {
@@ -815,6 +813,7 @@ mod tests {
   #[serial]
   async fn post_listing_person_language() {
     let pool = &build_db_pool_for_tests().await;
+    let pool = &mut pool.into();
     let data = init_data(pool).await;
 
     let spanish_id = Language::read_id_from_code(pool, Some("es"))
@@ -896,6 +895,7 @@ mod tests {
   #[serial]
   async fn post_listings_deleted() {
     let pool = &build_db_pool_for_tests().await;
+    let pool = &mut pool.into();
     let data = init_data(pool).await;
 
     // Delete the post
@@ -936,7 +936,7 @@ mod tests {
     cleanup(data, pool).await;
   }
 
-  async fn cleanup(data: Data, pool: &DbPool) {
+  async fn cleanup(data: Data, pool: &mut DbPool<'_>) {
     let num_deleted = Post::delete(pool, data.inserted_post.id).await.unwrap();
     Community::delete(pool, data.inserted_community.id)
       .await
@@ -952,7 +952,7 @@ mod tests {
     assert_eq!(1, num_deleted);
   }
 
-  async fn expected_post_view(data: &Data, pool: &DbPool) -> PostView {
+  async fn expected_post_view(data: &Data, pool: &mut DbPool<'_>) -> PostView {
     let (inserted_person, inserted_community, inserted_post) = (
       &data.inserted_person,
       &data.inserted_community,