@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user