From 0ccaf46ebd637a151e08bf2f0c9593fad06d7f14 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 25 Mar 2026 11:52:43 +0000 Subject: [PATCH] Standardize fetch_* to refresh_* in Artists context Closes #132 --- lib/music_library/artists.ex | 33 ++++++++----------- lib/music_library/artists/batch.ex | 2 +- lib/music_library/records.ex | 2 +- .../worker/fetch_artist_image.ex | 2 +- lib/music_library/worker/fetch_artist_info.ex | 10 +++--- .../worker/fetch_artist_last_fm_data.ex | 2 +- .../live/artist_live/show.ex | 6 ++-- test/music_library/artists_test.exs | 2 +- 8 files changed, 27 insertions(+), 32 deletions(-) diff --git a/lib/music_library/artists.ex b/lib/music_library/artists.ex index 9d81d999..55a49b14 100644 --- a/lib/music_library/artists.ex +++ b/lib/music_library/artists.ex @@ -135,8 +135,8 @@ defmodule MusicLibrary.Artists do Repo.delete_all(from ai in ArtistInfo, where: ai.id == ^artist_id) end - @spec fetch_artist_info(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} - def fetch_artist_info(artist_id) do + @spec refresh_artist_info(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} + def refresh_artist_info(artist_id) do with {:ok, musicbrainz_artist} <- MusicBrainz.get_artist(artist_id) do if discogs_id = MusicBrainz.Artist.get_discogs_id(musicbrainz_artist) do with {:ok, discogs_artist} <- Discogs.get_artist(discogs_id) do @@ -195,8 +195,8 @@ defmodule MusicLibrary.Artists do enqueue_worker(Worker.ArtistRefreshDiscogsData, %{"id" => artist_info.id}) end - @spec fetch_wikipedia_data(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} - def fetch_wikipedia_data(artist_id) do + @spec refresh_wikipedia_data(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} + def refresh_wikipedia_data(artist_id) do artist_info = get_artist_info!(artist_id) if wikidata_id = ArtistInfo.wikidata_id(artist_info) do @@ -214,11 +214,6 @@ defmodule MusicLibrary.Artists do end end - @spec refresh_wikipedia_data(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} - def refresh_wikipedia_data(artist_id) do - fetch_wikipedia_data(artist_id) - end - @spec refresh_wikipedia_data_async(ArtistInfo.t()) :: {:ok, Oban.Job.t()} | {:error, Ecto.Changeset.t()} def refresh_wikipedia_data_async(artist_info) do @@ -245,8 +240,8 @@ defmodule MusicLibrary.Artists do Repo.all(q) end - @spec fetch_image(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} - def fetch_image(artist_id) do + @spec refresh_image(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} + def refresh_image(artist_id) do artist_info = get_artist_info!(artist_id) with {:ok, image} <- ArtistInfo.extract_image(artist_info), @@ -260,8 +255,8 @@ defmodule MusicLibrary.Artists do end end - @spec fetch_lastfm_data(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} - def fetch_lastfm_data(artist_id) do + @spec refresh_lastfm_data(String.t()) :: {:ok, ArtistInfo.t()} | {:error, term()} + def refresh_lastfm_data(artist_id) do artist_info = get_artist_info!(artist_id) name = get_in(artist_info.musicbrainz_data, ["name"]) || "" @@ -278,20 +273,20 @@ defmodule MusicLibrary.Artists do end end - @spec fetch_lastfm_data_async(String.t()) :: + @spec refresh_lastfm_data_async(String.t()) :: {:ok, Oban.Job.t()} | {:error, Ecto.Changeset.t()} - def fetch_lastfm_data_async(artist_id) do + def refresh_lastfm_data_async(artist_id) do enqueue_worker(Worker.FetchArtistLastFmData, %{"id" => artist_id}) end - @spec fetch_artist_info_async(String.t()) :: + @spec refresh_artist_info_async(String.t()) :: {:ok, Oban.Job.t()} | {:error, Ecto.Changeset.t()} - def fetch_artist_info_async(artist_id) do + def refresh_artist_info_async(artist_id) do enqueue_worker(Worker.FetchArtistInfo, %{"id" => artist_id}) end - @spec fetch_image_async(String.t()) :: {:ok, Oban.Job.t()} | {:error, Ecto.Changeset.t()} - def fetch_image_async(artist_id) do + @spec refresh_image_async(String.t()) :: {:ok, Oban.Job.t()} | {:error, Ecto.Changeset.t()} + def refresh_image_async(artist_id) do enqueue_worker(Worker.FetchArtistImage, %{"id" => artist_id}) end diff --git a/lib/music_library/artists/batch.ex b/lib/music_library/artists/batch.ex index 90da9f4e..711ff943 100644 --- a/lib/music_library/artists/batch.ex +++ b/lib/music_library/artists/batch.ex @@ -33,7 +33,7 @@ defmodule MusicLibrary.Artists.Batch do @spec refresh_lastfm_data() :: {:ok, [String.t()]} def refresh_lastfm_data do Batch.run_on_all(from(r in ArtistInfo), "artist_info", fn artist_info -> - Artists.fetch_lastfm_data_async(artist_info.id) + Artists.refresh_lastfm_data_async(artist_info.id) end) end end diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index 989bbfde..f9225eeb 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -393,7 +393,7 @@ defmodule MusicLibrary.Records do record |> Record.artist_ids() |> Enum.each(fn artist_id -> - Artists.fetch_artist_info_async(artist_id) + Artists.refresh_artist_info_async(artist_id) end) {:ok, record} diff --git a/lib/music_library/worker/fetch_artist_image.ex b/lib/music_library/worker/fetch_artist_image.ex index 7e7ab2d6..5c6fe17f 100644 --- a/lib/music_library/worker/fetch_artist_image.ex +++ b/lib/music_library/worker/fetch_artist_image.ex @@ -3,7 +3,7 @@ defmodule MusicLibrary.Worker.FetchArtistImage do @impl Oban.Worker def perform(%Oban.Job{args: %{"id" => artist_id}}) do - case MusicLibrary.Artists.fetch_image(artist_id) do + case MusicLibrary.Artists.refresh_image(artist_id) do {:ok, _artist_info} -> :ok diff --git a/lib/music_library/worker/fetch_artist_info.ex b/lib/music_library/worker/fetch_artist_info.ex index c933270a..275d8e2d 100644 --- a/lib/music_library/worker/fetch_artist_info.ex +++ b/lib/music_library/worker/fetch_artist_info.ex @@ -3,11 +3,11 @@ defmodule MusicLibrary.Worker.FetchArtistInfo do @impl Oban.Worker def perform(%Oban.Job{args: %{"id" => artist_id}}) do - with {:ok, _artist_info} <- MusicLibrary.Artists.fetch_artist_info(artist_id), - {:ok, _artist_info} <- MusicLibrary.Artists.fetch_wikipedia_data(artist_id), - {:ok, _artist_info} <- MusicLibrary.Artists.fetch_image(artist_id) do - # fetch_lastfm_data returns {:ok, _} even on API errors, so it won't block embeddings - MusicLibrary.Artists.fetch_lastfm_data(artist_id) + with {:ok, _artist_info} <- MusicLibrary.Artists.refresh_artist_info(artist_id), + {:ok, _artist_info} <- MusicLibrary.Artists.refresh_wikipedia_data(artist_id), + {:ok, _artist_info} <- MusicLibrary.Artists.refresh_image(artist_id) do + # refresh_lastfm_data returns {:ok, _} even on API errors, so it won't block embeddings + MusicLibrary.Artists.refresh_lastfm_data(artist_id) MusicLibrary.Records.regenerate_artist_embeddings(artist_id) end end diff --git a/lib/music_library/worker/fetch_artist_last_fm_data.ex b/lib/music_library/worker/fetch_artist_last_fm_data.ex index 45b2b5b3..dab6f4df 100644 --- a/lib/music_library/worker/fetch_artist_last_fm_data.ex +++ b/lib/music_library/worker/fetch_artist_last_fm_data.ex @@ -3,7 +3,7 @@ defmodule MusicLibrary.Worker.FetchArtistLastFmData do @impl Oban.Worker def perform(%Oban.Job{args: %{"id" => artist_id}}) do - case MusicLibrary.Artists.fetch_lastfm_data(artist_id) do + case MusicLibrary.Artists.refresh_lastfm_data(artist_id) do {:ok, _artist_info} -> :ok error -> error end diff --git a/lib/music_library_web/live/artist_live/show.ex b/lib/music_library_web/live/artist_live/show.ex index 648f266e..17b1bd38 100644 --- a/lib/music_library_web/live/artist_live/show.ex +++ b/lib/music_library_web/live/artist_live/show.ex @@ -514,7 +514,7 @@ defmodule MusicLibraryWeb.ArtistLive.Show do @impl true def handle_event("refresh_artist_info", _params, socket) do - case Artists.fetch_artist_info(socket.assigns.artist.musicbrainz_id) do + case Artists.refresh_artist_info(socket.assigns.artist.musicbrainz_id) do {:ok, artist_info} -> {:noreply, socket @@ -556,7 +556,7 @@ defmodule MusicLibraryWeb.ArtistLive.Show do def handle_event("refresh_lastfm_data", _params, socket) do musicbrainz_id = socket.assigns.artist.musicbrainz_id - case Artists.fetch_lastfm_data(musicbrainz_id) do + case Artists.refresh_lastfm_data(musicbrainz_id) do {:ok, artist_info} -> musicbrainz_id |> Records.get_artist_records() @@ -579,7 +579,7 @@ defmodule MusicLibraryWeb.ArtistLive.Show do end def handle_event("refresh_artist_image", _params, socket) do - case Artists.fetch_image(socket.assigns.artist.musicbrainz_id) do + case Artists.refresh_image(socket.assigns.artist.musicbrainz_id) do {:ok, artist_info} -> {:noreply, socket diff --git a/test/music_library/artists_test.exs b/test/music_library/artists_test.exs index a7e73f02..f8ad3ca3 100644 --- a/test/music_library/artists_test.exs +++ b/test/music_library/artists_test.exs @@ -94,7 +94,7 @@ defmodule MusicLibrary.ArtistsTest do Req.Test.json(conn, Discogs.Fixtures.Artist.get_artist()) end) - assert {:ok, artist_info} = Artists.fetch_artist_info(steven_wilson_musicbrainz_id) + assert {:ok, artist_info} = Artists.refresh_artist_info(steven_wilson_musicbrainz_id) assert artist_info.id == steven_wilson_musicbrainz_id assert artist_info.musicbrainz_data == MusicBrainz.Fixtures.Artist.get_artist()