From 9da995bce87cbe75cd7c64cb7498c2b83de0f1df Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 9 Feb 2026 11:07:33 +0000 Subject: [PATCH] Extract helpers to handle async jobs --- lib/music_library/artists.ex | 39 +++++++-------------------- lib/music_library/records.ex | 51 +++++++++++++++--------------------- 2 files changed, 30 insertions(+), 60 deletions(-) diff --git a/lib/music_library/artists.ex b/lib/music_library/artists.ex index 1567f46f..b962b343 100644 --- a/lib/music_library/artists.ex +++ b/lib/music_library/artists.ex @@ -109,12 +109,7 @@ defmodule MusicLibrary.Artists do end def refresh_musicbrainz_data_async(artist_info) do - meta = %{} - params = %{"id" => artist_info.id} - - params - |> Worker.ArtistRefreshMusicBrainzData.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.ArtistRefreshMusicBrainzData, %{"id" => artist_info.id}) end def refresh_discogs_data(artist_id) do @@ -136,12 +131,7 @@ defmodule MusicLibrary.Artists do end def refresh_discogs_data_async(artist_info) do - meta = %{} - params = %{"id" => artist_info.id} - - params - |> Worker.ArtistRefreshDiscogsData.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.ArtistRefreshDiscogsData, %{"id" => artist_info.id}) end def create_artist_info(attrs) do @@ -176,30 +166,15 @@ defmodule MusicLibrary.Artists do end def fetch_artist_info_async(artist_id) do - meta = %{} - params = %{"id" => artist_id} - - params - |> Worker.FetchArtistInfo.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.FetchArtistInfo, %{"id" => artist_id}) end def fetch_image_async(artist_id) do - meta = %{} - params = %{"id" => artist_id} - - params - |> Worker.FetchArtistImage.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.FetchArtistImage, %{"id" => artist_id}) end def prune_artist_info_async(artist_id) do - meta = %{} - params = %{"id" => artist_id} - - params - |> Worker.PruneArtistInfo.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.PruneArtistInfo, %{"id" => artist_id}) end def change_artist_info(artist_info, attrs \\ %{}) do @@ -223,4 +198,8 @@ defmodule MusicLibrary.Artists do q |> Repo.all() |> MapSet.new() end + + defp enqueue_worker(worker, params) do + params |> worker.new(meta: %{}) |> BackgroundRepo.insert() + end end diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index 93d8910c..bbb92b91 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -248,12 +248,7 @@ defmodule MusicLibrary.Records do end def populate_genres_async(record) do - meta = %{title: record.title, artists: Enum.map(record.artists, & &1.name)} - params = %{"id" => record.id} - - params - |> Worker.PopulateGenres.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.PopulateGenres, %{"id" => record.id}, record_meta(record)) end defp get_cover_art_or_default(musicbrainz_id) do @@ -308,30 +303,23 @@ defmodule MusicLibrary.Records do end def refresh_cover_async(record) do - meta = %{title: record.title, artists: Enum.map(record.artists, & &1.name)} - params = %{"id" => record.id} - - params - |> Worker.RefreshCover.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.RefreshCover, %{"id" => record.id}, record_meta(record)) end def extract_colors_async(record, method) do - meta = %{title: record.title, artists: Enum.map(record.artists, & &1.name)} - params = %{"id" => record.id, "method" => method} - - params - |> Worker.ExtractColors.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker( + Worker.ExtractColors, + %{"id" => record.id, "method" => method}, + record_meta(record) + ) end def generate_embedding_async(record) do - meta = %{title: record.title, artists: Enum.map(record.artists, & &1.name)} - params = %{"record_id" => record.id} - - params - |> Worker.GenerateRecordEmbedding.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker( + Worker.GenerateRecordEmbedding, + %{"record_id" => record.id}, + record_meta(record) + ) end def resize_cover(record) do @@ -353,12 +341,7 @@ defmodule MusicLibrary.Records do end def refresh_musicbrainz_data_async(record) do - meta = %{title: record.title, artists: Enum.map(record.artists, & &1.name)} - params = %{"id" => record.id} - - params - |> Worker.RecordRefreshMusicBrainzData.new(meta: meta) - |> BackgroundRepo.insert() + enqueue_worker(Worker.RecordRefreshMusicBrainzData, %{"id" => record.id}, record_meta(record)) end defp merge_releases(musicbrainz_id, musicbrainz_data) do @@ -446,4 +429,12 @@ defmodule MusicLibrary.Records do {:update, record} ) end + + defp enqueue_worker(worker, params, meta) do + params |> worker.new(meta: meta) |> BackgroundRepo.insert() + end + + defp record_meta(record) do + %{title: record.title, artists: Enum.map(record.artists, & &1.name)} + end end