Enable artists maintenance tasks

This commit is contained in:
Claudio Ortolina
2025-11-07 17:14:45 +00:00
parent 3911ea05bf
commit 4a5ed2de1a
8 changed files with 140 additions and 6 deletions
+7
View File
@@ -71,4 +71,11 @@ defmodule MusicLibrary.Artists.ArtistInfo do
def external_links(artist_info),
do: ExternalLink.external_links(artist_info.musicbrainz_data, @external_link_patterns)
def discogs_id(artist_info) do
case artist_info.discogs_data do
%{"id" => discogs_id} -> discogs_id
_ -> nil
end
end
end
+48
View File
@@ -0,0 +1,48 @@
defmodule MusicLibrary.Artists.Batch do
import Ecto.Query
alias MusicLibrary.Artists
alias MusicLibrary.Artists.ArtistInfo
alias MusicLibrary.Repo
require Logger
def refresh_musicbrainz_data do
run_on_all_artist_infos(fn artist_info ->
Artists.refresh_musicbrainz_data_async(artist_info)
end)
end
def refresh_discogs_data do
run_on_all_artist_infos(fn artist_info ->
Artists.refresh_discogs_data_async(artist_info)
end)
end
defp run_on_all_artist_infos(fun) do
q = from(r in ArtistInfo)
stream = Repo.stream(q, max_rows: 50)
Repo.transaction(
fn ->
Enum.reduce(stream, [], fn artist_info, acc ->
case fun.(artist_info) do
{:error, reason} ->
Logger.error(
"Failed to run function on artist_info #{artist_info.id} with #{inspect(reason)}"
)
[artist_info.id | acc]
:ok ->
acc
{:ok, _artist_info} ->
acc
end
end)
end,
timeout: :infinity
)
end
end