From a597ff403278d8e292e7a1c02ad8cc68bff12f4a Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 19 Nov 2025 10:16:21 +0000 Subject: [PATCH] Make application work with empty database --- lib/music_library/collection.ex | 11 +++++++++++ .../components/chart_components.ex | 10 +++++++++- .../components/stats_components.ex | 14 +++++++++++++- lib/music_library_web/live/stats_live/index.ex | 2 +- priv/gettext/default.pot | 10 ++++++++++ priv/gettext/en/LC_MESSAGES/default.po | 10 ++++++++++ 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/music_library/collection.ex b/lib/music_library/collection.ex index 29355f5f..8873df5e 100644 --- a/lib/music_library/collection.ex +++ b/lib/music_library/collection.ex @@ -53,6 +53,17 @@ defmodule MusicLibrary.Collection do Repo.all(q) end + def get_latest_record do + q = + from r in Record, + where: not is_nil(r.purchased_at), + order_by: [{:desc, r.purchased_at}, order_alphabetically()], + limit: 1, + select: ^Records.essential_fields() + + Repo.one(q) + end + def get_latest_record! do q = from r in Record, diff --git a/lib/music_library_web/components/chart_components.ex b/lib/music_library_web/components/chart_components.ex index 73a7a7a7..490e70a8 100644 --- a/lib/music_library_web/components/chart_components.ex +++ b/lib/music_library_web/components/chart_components.ex @@ -23,7 +23,7 @@ defmodule MusicLibraryWeb.ChartComponents do attr :class, :string, default: "" attr :datum_click, :any, default: nil, doc: "the function for handling phx-click on each datum" - def vertical_bar_chart(assigns) do + def vertical_bar_chart(assigns) when assigns.data != [] do assigns = assigns |> assign(:padding, 40) @@ -95,6 +95,14 @@ defmodule MusicLibraryWeb.ChartComponents do """ end + def vertical_bar_chart(assigns) do + ~H""" +
+ {gettext("No data available")} +
+ """ + end + defp max_value(data, value_fn) do max = Enum.max_by(data, value_fn) value_fn.(max) diff --git a/lib/music_library_web/components/stats_components.ex b/lib/music_library_web/components/stats_components.ex index d01690c0..cc7f67e8 100644 --- a/lib/music_library_web/components/stats_components.ex +++ b/lib/music_library_web/components/stats_components.ex @@ -6,13 +6,14 @@ defmodule MusicLibraryWeb.StatsComponents do alias MusicLibrary.Records - attr :record, Records.Record, required: true + attr :record, Records.Record, required: false attr :title, :string, required: true attr :class, :string def album_preview(assigns) do ~H"""
+
+

+ {gettext("No record found")} +

+
""" end diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex index ca56aa81..bda0e47d 100644 --- a/lib/music_library_web/live/stats_live/index.ex +++ b/lib/music_library_web/live/stats_live/index.ex @@ -13,7 +13,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do def mount(_params, _session, socket) do current_date = DateTime.now!(socket.assigns.timezone) |> DateTime.to_date() - latest_record = Collection.get_latest_record!() + latest_record = Collection.get_latest_record() records_by_artists = Collection.count_records_by_artist(limit: 20) records_by_genre = Collection.count_records_by_genre(limit: 20) records_on_this_day = Collection.get_records_on_this_day(current_date) diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index e65354d6..d4118250 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -1624,3 +1624,13 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Top %{n} Collection Genres" msgstr "" + +#: lib/music_library_web/components/chart_components.ex +#, elixir-autogen, elixir-format +msgid "No data available" +msgstr "" + +#: lib/music_library_web/components/stats_components.ex +#, elixir-autogen, elixir-format +msgid "No record found" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index be69f32a..01d84e63 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -1624,3 +1624,13 @@ msgstr "" #, elixir-autogen, elixir-format, fuzzy msgid "Top %{n} Collection Genres" msgstr "" + +#: lib/music_library_web/components/chart_components.ex +#, elixir-autogen, elixir-format +msgid "No data available" +msgstr "" + +#: lib/music_library_web/components/stats_components.ex +#, elixir-autogen, elixir-format +msgid "No record found" +msgstr ""