Prune artist info after deleting the artist's last record
This commit is contained in:
@@ -45,6 +45,14 @@ defmodule MusicLibrary.Artists do
|
|||||||
q |> Repo.all()
|
q |> Repo.all()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def exists?(artist_id) do
|
||||||
|
Repo.get_by(ArtistRecord, musicbrainz_id: artist_id) !== nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_artist_info(artist_id) do
|
||||||
|
Repo.delete_all(from ai in ArtistInfo, where: ai.id == ^artist_id)
|
||||||
|
end
|
||||||
|
|
||||||
def fetch_artist_info(artist_id) do
|
def fetch_artist_info(artist_id) do
|
||||||
with {:ok, musicbrainz_artist} <- MusicBrainz.get_artist(artist_id) do
|
with {:ok, musicbrainz_artist} <- MusicBrainz.get_artist(artist_id) do
|
||||||
if discogs_id = MusicBrainz.Artist.get_discogs_id(musicbrainz_artist) do
|
if discogs_id = MusicBrainz.Artist.get_discogs_id(musicbrainz_artist) do
|
||||||
@@ -106,6 +114,15 @@ defmodule MusicLibrary.Artists do
|
|||||||
|> BackgroundRepo.insert()
|
|> BackgroundRepo.insert()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prune_artist_info_async(artist_id) do
|
||||||
|
meta = %{}
|
||||||
|
params = %{"id" => artist_id}
|
||||||
|
|
||||||
|
params
|
||||||
|
|> Worker.PruneArtistInfo.new(meta: meta)
|
||||||
|
|> BackgroundRepo.insert()
|
||||||
|
end
|
||||||
|
|
||||||
def get_image(artist_id) do
|
def get_image(artist_id) do
|
||||||
q =
|
q =
|
||||||
from ai in ArtistInfo,
|
from ai in ArtistInfo,
|
||||||
|
|||||||
@@ -283,7 +283,15 @@ defmodule MusicLibrary.Records do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def delete_record(%Record{} = record) do
|
def delete_record(%Record{} = record) do
|
||||||
Repo.delete(record)
|
with {:ok, record} <- Repo.delete(record) do
|
||||||
|
record
|
||||||
|
|> Record.artist_ids()
|
||||||
|
|> Enum.each(fn artist_id ->
|
||||||
|
Artists.prune_artist_info_async(artist_id)
|
||||||
|
end)
|
||||||
|
|
||||||
|
{:ok, record}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def change_record(%Record{} = record, attrs \\ %{}) do
|
def change_record(%Record{} = record, attrs \\ %{}) do
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
defmodule MusicLibrary.Worker.PruneArtistInfo do
|
||||||
|
use Oban.Worker, queue: :default, max_attempts: 3
|
||||||
|
|
||||||
|
@impl Oban.Worker
|
||||||
|
def perform(%Oban.Job{args: %{"id" => artist_id}}) do
|
||||||
|
if MusicLibrary.Artists.exists?(artist_id) do
|
||||||
|
:ok
|
||||||
|
else
|
||||||
|
delete_artist_info(artist_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp delete_artist_info(artist_id) do
|
||||||
|
with {_count, nil} <- MusicLibrary.Artists.delete_artist_info(artist_id) do
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user