Display type stats
This commit is contained in:
@@ -8,11 +8,16 @@ defmodule MusicLibraryWeb.StatsController do
|
||||
Records.count_records_by_format()
|
||||
|> Enum.sort_by(fn {_format, count} -> count end, :desc)
|
||||
|
||||
records_count_by_type =
|
||||
Records.count_records_by_type()
|
||||
|> Enum.sort_by(fn {_type, count} -> count end, :desc)
|
||||
|
||||
records_count = Enum.reduce(records_count_by_format, 0, fn {_, count}, acc -> acc + count end)
|
||||
latest_record = Records.get_latest_record!()
|
||||
|
||||
render(conn, :index,
|
||||
records_count_by_format: records_count_by_format,
|
||||
records_count_by_type: records_count_by_type,
|
||||
records_count: records_count,
|
||||
latest_record: latest_record,
|
||||
nav_section: :stats
|
||||
|
||||
@@ -54,3 +54,20 @@
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<dl class="mt-5 grid divide-y divide-gray-200 overflow-hidden rounded-lg bg-white shadow grid-cols-6 md:divide-x md:divide-y-0">
|
||||
<div :for={{type, count} <- @records_count_by_type} class="px-4 py-5 sm:p-6">
|
||||
<dt class="text-base max-sm:text-xs font-normal text-gray-900 break-keep">
|
||||
<%= Record.type_long_label(type) %>
|
||||
</dt>
|
||||
<dd class="mt-1 flex items-baseline justify-between md:block lg:flex">
|
||||
<div class="flex items-baseline text-2xl font-semibold">
|
||||
<a href={~p"/records?query=type:#{type}"}>
|
||||
<%= count %>
|
||||
</a>
|
||||
</div>
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
@@ -19,18 +19,26 @@ defmodule MusicLibraryWeb.StatsControllerTest do
|
||||
describe "GET /" do
|
||||
setup [:create_records]
|
||||
|
||||
test "it shows the record count (total and by format)", %{conn: conn, records: records} do
|
||||
test "it shows the record counts (total, format, and type)", %{conn: conn, records: records} do
|
||||
conn = get(conn, "/")
|
||||
|
||||
assert html_response(conn, 200) =~ records |> length() |> Integer.to_string()
|
||||
response = html_response(conn, 200)
|
||||
|
||||
assert response =~ records |> length() |> Integer.to_string()
|
||||
|
||||
records
|
||||
|> Enum.frequencies_by(& &1.format)
|
||||
|> Enum.each(fn {format, count} ->
|
||||
response = html_response(conn, 200)
|
||||
assert response =~ "\n#{count}\n"
|
||||
assert response =~ "\n#{Record.format_long_label(format)}\n"
|
||||
end)
|
||||
|
||||
records
|
||||
|> Enum.frequencies_by(& &1.type)
|
||||
|> Enum.each(fn {type, count} ->
|
||||
assert response =~ "\n#{count}\n"
|
||||
assert response =~ "\n#{Record.type_long_label(type)}\n"
|
||||
end)
|
||||
end
|
||||
|
||||
test "it shows the latest record", %{conn: conn, records: records} do
|
||||
|
||||
Reference in New Issue
Block a user