From 162a38b62e33bb3d5b21ed96c36b6ad661f5fccf Mon Sep 17 00:00:00 2001
From: Claudio Ortolina
Date: Mon, 15 Dec 2025 10:22:20 +0300
Subject: [PATCH] Add optimize maintenance function
---
lib/music_library/repo.ex | 2 ++
.../live/maintenance_live/index.ex | 16 +++++++++++++
.../live/maintenance_live/index.html.heex | 23 +++++++++++++------
priv/gettext/default.pot | 15 ++++++++++++
priv/gettext/en/LC_MESSAGES/default.po | 15 ++++++++++++
5 files changed, 64 insertions(+), 7 deletions(-)
diff --git a/lib/music_library/repo.ex b/lib/music_library/repo.ex
index c6c98f65..88f7e689 100644
--- a/lib/music_library/repo.ex
+++ b/lib/music_library/repo.ex
@@ -35,4 +35,6 @@ defmodule MusicLibrary.Repo do
end
def vacuum, do: query("VACUUM")
+
+ def optimize, do: query("PRAGMA optimize")
end
diff --git a/lib/music_library_web/live/maintenance_live/index.ex b/lib/music_library_web/live/maintenance_live/index.ex
index 006e4c66..21afbe74 100644
--- a/lib/music_library_web/live/maintenance_live/index.ex
+++ b/lib/music_library_web/live/maintenance_live/index.ex
@@ -109,4 +109,20 @@ defmodule MusicLibraryWeb.MaintenanceLive.Index do
|> put_toast(:error, "Database vacuum failed: #{inspect(reason)}.")}
end
end
+
+ def handle_event("db_optimize", _params, socket) do
+ case Repo.optimize() do
+ {:ok, _result} ->
+ {:noreply,
+ socket
+ |> put_toast(:info, gettext("Database optimized successfully."))}
+
+ {:error, reason} ->
+ Logger.error("Database optimize failed: #{inspect(reason)}.")
+
+ {:noreply,
+ socket
+ |> put_toast(:error, "Database optimize failed: #{inspect(reason)}.")}
+ end
+ end
end
diff --git a/lib/music_library_web/live/maintenance_live/index.html.heex b/lib/music_library_web/live/maintenance_live/index.html.heex
index 3e9edf1e..e887002a 100644
--- a/lib/music_library_web/live/maintenance_live/index.html.heex
+++ b/lib/music_library_web/live/maintenance_live/index.html.heex
@@ -91,13 +91,22 @@
-
- <.button
- type="button"
- phx-click="db_vacuum"
- phx-disable-with={gettext("Running vacuum...")}
- >
- {gettext("Vacuum")}
-
+ <.button_group>
+ <.button
+ type="button"
+ phx-click="db_vacuum"
+ phx-disable-with={gettext("Running vacuum...")}
+ >
+ {gettext("Vacuum")}
+
+ <.button
+ type="button"
+ phx-click="db_optimize"
+ phx-disable-with={gettext("Running optimize...")}
+ >
+ {gettext("Optimize")}
+
+
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index 3e5246b5..cf0bf470 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -1665,3 +1665,18 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Apply"
msgstr ""
+
+#: lib/music_library_web/live/maintenance_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Database optimized successfully."
+msgstr ""
+
+#: lib/music_library_web/live/maintenance_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Optimize"
+msgstr ""
+
+#: lib/music_library_web/live/maintenance_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Running optimize..."
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 3d73345a..2b35dcdd 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -1665,3 +1665,18 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Apply"
msgstr ""
+
+#: lib/music_library_web/live/maintenance_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Database optimized successfully."
+msgstr ""
+
+#: lib/music_library_web/live/maintenance_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Optimize"
+msgstr ""
+
+#: lib/music_library_web/live/maintenance_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Running optimize..."
+msgstr ""