Show record count by format in stats dashboard
This commit is contained in:
@@ -39,6 +39,15 @@ defmodule MusicLibrary.Records do
|
|||||||
Repo.aggregate(Record, :count)
|
Repo.aggregate(Record, :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def count_records_by_format do
|
||||||
|
q =
|
||||||
|
from r in Record,
|
||||||
|
group_by: r.format,
|
||||||
|
select: {r.format, count(r.id)}
|
||||||
|
|
||||||
|
Repo.all(q)
|
||||||
|
end
|
||||||
|
|
||||||
def search_records_count(query) do
|
def search_records_count(query) do
|
||||||
q =
|
q =
|
||||||
from r in Record,
|
from r in Record,
|
||||||
|
|||||||
@@ -4,8 +4,15 @@ defmodule MusicLibraryWeb.StatsController do
|
|||||||
alias MusicLibrary.Records
|
alias MusicLibrary.Records
|
||||||
|
|
||||||
def index(conn, _params) do
|
def index(conn, _params) do
|
||||||
records_count = Records.count_records()
|
records_count_by_format = Records.count_records_by_format()
|
||||||
|
records_count = Enum.reduce(records_count_by_format, 0, fn {_, count}, acc -> acc + count end)
|
||||||
record = Records.get_latest_record!()
|
record = Records.get_latest_record!()
|
||||||
render(conn, :index, records_count: records_count, record: record, nav_section: :dashboard)
|
|
||||||
|
render(conn, :index,
|
||||||
|
records_count_by_format: records_count_by_format,
|
||||||
|
records_count: records_count,
|
||||||
|
record: record,
|
||||||
|
nav_section: :dashboard
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,4 +2,11 @@ defmodule MusicLibraryWeb.StatsHTML do
|
|||||||
use MusicLibraryWeb, :html
|
use MusicLibraryWeb, :html
|
||||||
|
|
||||||
embed_templates "stats_html/*"
|
embed_templates "stats_html/*"
|
||||||
|
|
||||||
|
defp format_records_count(records_count_by_format) do
|
||||||
|
Enum.map(records_count_by_format, fn {format, count} ->
|
||||||
|
Integer.to_string(count) <> " " <> Atom.to_string(format)
|
||||||
|
end)
|
||||||
|
|> Enum.join(", ")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
</dt>
|
</dt>
|
||||||
<dd class="ml-16 flex items-baseline pb-6 sm:pb-7">
|
<dd class="ml-16 flex items-baseline pb-6 sm:pb-7">
|
||||||
<p class="text-2xl font-semibold text-gray-900"><%= @records_count %></p>
|
<p class="text-2xl font-semibold text-gray-900"><%= @records_count %></p>
|
||||||
|
<p class="ml-2 flex items-baseline text-sm font-medium">
|
||||||
|
<%= format_records_count(@records_count_by_format) %>
|
||||||
|
</p>
|
||||||
<div class="absolute inset-x-0 bottom-0 bg-gray-50 px-4 py-4 sm:px-6">
|
<div class="absolute inset-x-0 bottom-0 bg-gray-50 px-4 py-4 sm:px-6">
|
||||||
<div class="text-sm">
|
<div class="text-sm">
|
||||||
<a href={~p"/records"} class="font-medium text-zinc-600 hover:text-zinc-500">
|
<a href={~p"/records"} class="font-medium text-zinc-600 hover:text-zinc-500">
|
||||||
|
|||||||
Reference in New Issue
Block a user