feat: Show basic statistics in subreddit date view

This commit is contained in:
Daniel Kempkens 2023-10-05 09:56:47 +02:00
parent a19c4f6a36
commit 71fb71ddb9
Signed by: daniel
SSH key fingerprint: SHA256:Ks/MyhQYcPRQiwMKLAKquWCdCPe3JXlb1WttgnAoSeM
3 changed files with 24 additions and 2 deletions

View file

@ -44,7 +44,8 @@ defmodule BdfrBrowser.HTTP.Plug do
tpl_args = [ tpl_args = [
subreddit: subreddit, subreddit: subreddit,
dates: subreddit_record |> Post.date_listing() |> Repo.all() dates: subreddit_record |> Post.date_listing() |> Repo.all(),
statistics: subreddit |> Subreddit.statistics() |> Repo.all()
] ]
content = render_template("subreddit", tpl_args) content = render_template("subreddit", tpl_args)
@ -94,7 +95,8 @@ defmodule BdfrBrowser.HTTP.Plug do
tpl_args = [ tpl_args = [
subreddit: subreddit_names, subreddit: subreddit_names,
dates: subreddit_records |> Post.date_listing() |> Repo.all() dates: subreddit_records |> Post.date_listing() |> Repo.all(),
statistics: subreddit_names |> Subreddit.statistics() |> Repo.all()
] ]
content = render_template("subreddit", tpl_args) content = render_template("subreddit", tpl_args)

View file

@ -22,4 +22,16 @@ defmodule BdfrBrowser.Subreddit do
def names_without(hidden) do def names_without(hidden) do
from(s in __MODULE__, select: s.name, where: s.name not in ^hidden, order_by: [asc: fragment("lower(?)", s.name)]) from(s in __MODULE__, select: s.name, where: s.name not in ^hidden, order_by: [asc: fragment("lower(?)", s.name)])
end end
def statistics(subreddit) when is_binary(subreddit), do: statistics([subreddit])
def statistics(subreddits) when is_list(subreddits) do
from(s in __MODULE__,
join: p in assoc(s, :posts),
left_join: c in assoc(p, :comments),
select: {s.name, count(p.id), count(c.id)},
where: s.name in ^subreddits,
group_by: [s.name]
)
end
end end

View file

@ -49,4 +49,12 @@
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
<div class="d-grid gap-2 col-12 mx-auto">
<p class="text-secondary">
<%= for {name, post_count, comment_count} <- statistics do %>
<%= name %>: <%= post_count %> Posts; <%= comment_count %> Comments<br />
<% end %>
</p>
</div>
</div> </div>