]> Untitled Git - lemmy.git/commitdiff
Fix site aggs.
authorDessalines <tyhou13@gmx.com>
Sun, 20 Dec 2020 05:09:20 +0000 (00:09 -0500)
committerDessalines <tyhou13@gmx.com>
Sun, 20 Dec 2020 05:09:20 +0000 (00:09 -0500)
lemmy_db/src/aggregates/site_aggregates.rs
lemmy_db/src/source/site.rs
migrations/2020-12-02-152437_create_site_aggregates/up.sql

index 794dd53180c413f118dcdcb94e5b2a212ada7b4d..df3cad6f1ecff77fdc06c1d80728e41255c90ad3 100644 (file)
@@ -27,6 +27,7 @@ mod tests {
       comment::{Comment, CommentForm},
       community::{Community, CommunityForm},
       post::{Post, PostForm},
+      site::{Site, SiteForm},
       user::{UserForm, User_},
     },
     tests::establish_unpooled_connection,
@@ -68,6 +69,20 @@ mod tests {
 
     let inserted_user = User_::create(&conn, &new_user).unwrap();
 
+    let site_form = SiteForm {
+      name: "test_site".into(),
+      description: None,
+      icon: None,
+      banner: None,
+      creator_id: inserted_user.id,
+      enable_downvotes: true,
+      open_registration: true,
+      enable_nsfw: true,
+      updated: None,
+    };
+
+    Site::create(&conn, &site_form).unwrap();
+
     let new_community = CommunityForm {
       name: "TIL_site_agg".into(),
       creator_id: inserted_user.id,
@@ -165,10 +180,7 @@ mod tests {
     let user_num_deleted = User_::delete(&conn, inserted_user.id).unwrap();
     assert_eq!(1, user_num_deleted);
 
-    let site_aggregates_after_delete = SiteAggregates::read(&conn).unwrap();
-    assert_eq!(0, site_aggregates_after_delete.users);
-    assert_eq!(0, site_aggregates_after_delete.communities);
-    assert_eq!(0, site_aggregates_after_delete.posts);
-    assert_eq!(0, site_aggregates_after_delete.comments);
+    let after_delete = SiteAggregates::read(&conn);
+    assert!(after_delete.is_err());
   }
 }
index 1224e0ab7a8fc61453f00da1590b2e514f0196f0..8775191e1b3bf2773c38db16375f8434d6457524 100644 (file)
@@ -50,6 +50,10 @@ impl Crud<SiteForm> for Site {
       .set(new_site)
       .get_result::<Self>(conn)
   }
+  fn delete(conn: &PgConnection, site_id: i32) -> Result<usize, Error> {
+    use crate::schema::site::dsl::*;
+    diesel::delete(site.find(site_id)).execute(conn)
+  }
 }
 
 impl Site {
index cc76a5c7591aa69a0bcaa93ab22927db8e3b6967..b10a5f419061da94fd8d8744bd76669cce0e5880 100644 (file)
@@ -2,7 +2,7 @@
 create table site_aggregates (
   id serial primary key,
   site_id int references site on update cascade on delete cascade not null,
-  users bigint not null default 0,
+  users bigint not null default 1,
   posts bigint not null default 0,
   comments bigint not null default 0,
   communities bigint not null default 0
@@ -36,7 +36,7 @@ execute procedure site_aggregates_site();
 
 -- Add site aggregate triggers
 -- user
-create function site_aggregates_user()
+create or replace function site_aggregates_user()
 returns trigger language plpgsql
 as $$
 begin
@@ -44,8 +44,11 @@ begin
     update site_aggregates 
     set users = users + 1;
   ELSIF (TG_OP = 'DELETE') THEN
-    update site_aggregates 
-    set users = users - 1;
+    -- Join to site since the creator might not be there anymore
+    update site_aggregates sa
+    set users = users - 1
+    from site s
+    where sa.site_id = s.id;
   END IF;
   return null;
 end $$;
@@ -64,8 +67,10 @@ begin
     update site_aggregates 
     set posts = posts + 1;
   ELSIF (TG_OP = 'DELETE') THEN
-    update site_aggregates 
-    set posts = posts - 1;
+    update site_aggregates sa
+    set posts = posts - 1
+    from site s
+    where sa.site_id = s.id;
   END IF;
   return null;
 end $$;
@@ -84,8 +89,10 @@ begin
     update site_aggregates 
     set comments = comments + 1;
   ELSIF (TG_OP = 'DELETE') THEN
-    update site_aggregates 
-    set comments = comments - 1;
+    update site_aggregates sa
+    set comments = comments - 1
+    from site s
+    where sa.site_id = s.id;
   END IF;
   return null;
 end $$;
@@ -104,8 +111,10 @@ begin
     update site_aggregates 
     set communities = communities + 1;
   ELSIF (TG_OP = 'DELETE') THEN
-    update site_aggregates 
-    set communities = communities - 1;
+    update site_aggregates sa
+    set communities = communities - 1
+    from site s
+    where sa.site_id = s.id;
   END IF;
   return null;
 end $$;