Implement ML-143: Cart-style multi record import

Closes ML-143.
This commit is contained in:
Claudio Ortolina
2026-04-20 12:20:19 +01:00
parent 0ae8e69fb9
commit 3f5ce060b1
12 changed files with 929 additions and 169 deletions
@@ -0,0 +1,32 @@
defmodule MusicLibrary.Worker.ImportFromMusicbrainzReleaseGroup do
@moduledoc """
Imports a record from a MusicBrainz release group in the background.
Used by the cart-style multi-record import when there are two or more
records to import at once.
"""
use Oban.Worker, queue: :music_brainz, max_attempts: 3
alias MusicLibrary.Records
@impl Oban.Worker
def perform(%Oban.Job{args: %{"release_group_id" => release_group_id} = args}) do
opts = [
format: args["format"],
purchased_at: parse_datetime(args["purchased_at"])
]
case Records.import_from_musicbrainz_release_group(release_group_id, opts) do
{:ok, _record} -> :ok
{:error, reason} -> {:error, reason}
end
end
defp parse_datetime(nil), do: nil
defp parse_datetime(str) do
{:ok, datetime, _offset} = DateTime.from_iso8601(str)
datetime
end
end