Merge pull request #1349 from LemmyNet/site_counts_local
Report only local counts in site_view.
This commit is contained in:
commit
66102fb2d4
3 changed files with 125 additions and 72 deletions
|
@ -1,13 +1,21 @@
|
|||
-- Site aggregates
|
||||
drop table site_aggregates;
|
||||
drop trigger site_aggregates_site on site;
|
||||
drop trigger site_aggregates_user on user_;
|
||||
drop trigger site_aggregates_post on post;
|
||||
drop trigger site_aggregates_comment on comment;
|
||||
drop trigger site_aggregates_community on community;
|
||||
drop trigger site_aggregates_user_insert on user_;
|
||||
drop trigger site_aggregates_user_delete on user_;
|
||||
drop trigger site_aggregates_post_insert on post;
|
||||
drop trigger site_aggregates_post_delete on post;
|
||||
drop trigger site_aggregates_comment_insert on comment;
|
||||
drop trigger site_aggregates_comment_delete on comment;
|
||||
drop trigger site_aggregates_community_insert on community;
|
||||
drop trigger site_aggregates_community_delete on community;
|
||||
drop function
|
||||
site_aggregates_site,
|
||||
site_aggregates_user,
|
||||
site_aggregates_post,
|
||||
site_aggregates_comment,
|
||||
site_aggregates_community;
|
||||
site_aggregates_user_insert,
|
||||
site_aggregates_user_delete,
|
||||
site_aggregates_post_insert,
|
||||
site_aggregates_post_delete,
|
||||
site_aggregates_comment_insert,
|
||||
site_aggregates_comment_delete,
|
||||
site_aggregates_community_insert,
|
||||
site_aggregates_community_delete;
|
||||
|
|
|
@ -10,10 +10,10 @@ create table site_aggregates (
|
|||
|
||||
insert into site_aggregates (site_id, users, posts, comments, communities)
|
||||
select id as site_id,
|
||||
( select coalesce(count(*), 0) from user_) as users,
|
||||
( select coalesce(count(*), 0) from post) as posts,
|
||||
( select coalesce(count(*), 0) from comment) as comments,
|
||||
( select coalesce(count(*), 0) from community) as communities
|
||||
( select coalesce(count(*), 0) from user_ where local = true) as users,
|
||||
( select coalesce(count(*), 0) from post where local = true) as posts,
|
||||
( select coalesce(count(*), 0) from comment where local = true) as comments,
|
||||
( select coalesce(count(*), 0) from community where local = true) as communities
|
||||
from site;
|
||||
|
||||
-- initial site add
|
||||
|
@ -36,91 +36,134 @@ execute procedure site_aggregates_site();
|
|||
|
||||
-- Add site aggregate triggers
|
||||
-- user
|
||||
create or replace function site_aggregates_user()
|
||||
create function site_aggregates_user_insert()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
IF (TG_OP = 'INSERT') THEN
|
||||
update site_aggregates
|
||||
set users = users + 1;
|
||||
ELSIF (TG_OP = 'DELETE') THEN
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create function site_aggregates_user_delete()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
-- 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 $$;
|
||||
|
||||
create trigger site_aggregates_user
|
||||
after insert or delete on user_
|
||||
create trigger site_aggregates_user_insert
|
||||
after insert on user_
|
||||
for each row
|
||||
execute procedure site_aggregates_user();
|
||||
when (NEW.local = true)
|
||||
execute procedure site_aggregates_user_insert();
|
||||
|
||||
create trigger site_aggregates_user_delete
|
||||
after delete on user_
|
||||
for each row
|
||||
when (OLD.local = true)
|
||||
execute procedure site_aggregates_user_delete();
|
||||
|
||||
-- post
|
||||
create function site_aggregates_post()
|
||||
create function site_aggregates_post_insert()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
IF (TG_OP = 'INSERT') THEN
|
||||
update site_aggregates
|
||||
set posts = posts + 1;
|
||||
ELSIF (TG_OP = 'DELETE') THEN
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create function site_aggregates_post_delete()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
update site_aggregates sa
|
||||
set posts = posts - 1
|
||||
from site s
|
||||
where sa.site_id = s.id;
|
||||
END IF;
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create trigger site_aggregates_post
|
||||
after insert or delete on post
|
||||
create trigger site_aggregates_post_insert
|
||||
after insert on post
|
||||
for each row
|
||||
execute procedure site_aggregates_post();
|
||||
when (NEW.local = true)
|
||||
execute procedure site_aggregates_post_insert();
|
||||
|
||||
create trigger site_aggregates_post_delete
|
||||
after delete on post
|
||||
for each row
|
||||
when (OLD.local = true)
|
||||
execute procedure site_aggregates_post_delete();
|
||||
|
||||
-- comment
|
||||
create function site_aggregates_comment()
|
||||
create function site_aggregates_comment_insert()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
IF (TG_OP = 'INSERT') THEN
|
||||
update site_aggregates
|
||||
set comments = comments + 1;
|
||||
ELSIF (TG_OP = 'DELETE') THEN
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create function site_aggregates_comment_delete()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
update site_aggregates sa
|
||||
set comments = comments - 1
|
||||
from site s
|
||||
where sa.site_id = s.id;
|
||||
END IF;
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create trigger site_aggregates_comment
|
||||
after insert or delete on comment
|
||||
create trigger site_aggregates_comment_insert
|
||||
after insert on comment
|
||||
for each row
|
||||
execute procedure site_aggregates_comment();
|
||||
when (NEW.local = true)
|
||||
execute procedure site_aggregates_comment_insert();
|
||||
|
||||
create trigger site_aggregates_comment_delete
|
||||
after delete on comment
|
||||
for each row
|
||||
when (OLD.local = true)
|
||||
execute procedure site_aggregates_comment_delete();
|
||||
|
||||
-- community
|
||||
create function site_aggregates_community()
|
||||
create function site_aggregates_community_insert()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
IF (TG_OP = 'INSERT') THEN
|
||||
update site_aggregates
|
||||
set communities = communities + 1;
|
||||
ELSIF (TG_OP = 'DELETE') THEN
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create function site_aggregates_community_delete()
|
||||
returns trigger language plpgsql
|
||||
as $$
|
||||
begin
|
||||
update site_aggregates sa
|
||||
set communities = communities - 1
|
||||
from site s
|
||||
where sa.site_id = s.id;
|
||||
END IF;
|
||||
return null;
|
||||
end $$;
|
||||
|
||||
create trigger site_aggregates_community
|
||||
after insert or delete on community
|
||||
create trigger site_aggregates_community_insert
|
||||
after insert on community
|
||||
for each row
|
||||
execute procedure site_aggregates_community();
|
||||
when (NEW.local = true)
|
||||
execute procedure site_aggregates_community_insert();
|
||||
|
||||
create trigger site_aggregates_community_delete
|
||||
after delete on community
|
||||
for each row
|
||||
when (OLD.local = true)
|
||||
execute procedure site_aggregates_community_delete();
|
||||
|
|
|
@ -46,12 +46,13 @@ async fn node_info(context: web::Data<LemmyContext>) -> Result<HttpResponse, Err
|
|||
},
|
||||
protocols,
|
||||
usage: NodeInfoUsage {
|
||||
// TODO get these again
|
||||
users: NodeInfoUsers { total: 0 },
|
||||
local_posts: 0,
|
||||
local_comments: 0,
|
||||
open_registrations: site_view.site.open_registration,
|
||||
users: NodeInfoUsers {
|
||||
total: site_view.counts.users,
|
||||
},
|
||||
local_posts: site_view.counts.posts,
|
||||
local_comments: site_view.counts.comments,
|
||||
},
|
||||
open_registrations: site_view.site.open_registration,
|
||||
};
|
||||
|
||||
Ok(HttpResponse::Ok().json(json))
|
||||
|
@ -69,11 +70,13 @@ struct NodeInfoWellKnownLinks {
|
|||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct NodeInfo {
|
||||
pub version: String,
|
||||
pub software: NodeInfoSoftware,
|
||||
pub protocols: Vec<String>,
|
||||
pub usage: NodeInfoUsage,
|
||||
pub open_registrations: bool,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
|
@ -88,7 +91,6 @@ struct NodeInfoUsage {
|
|||
pub users: NodeInfoUsers,
|
||||
pub local_posts: i64,
|
||||
pub local_comments: i64,
|
||||
pub open_registrations: bool,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
|
|
Loading…
Reference in a new issue