Show barcodes that are not found inside the results UI

Includes a refactor to extract/cleanup barcode scan logic from the
component to a separate context with a better API.
This commit is contained in:
Claudio Ortolina
2025-03-07 09:14:27 +00:00
parent 12b38ecbb2
commit fee2799d50
6 changed files with 149 additions and 70 deletions
+48
View File
@@ -0,0 +1,48 @@
defmodule MusicLibrary.BarcodeScan do
alias MusicLibrary.BarcodeScan.Result
alias MusicLibrary.Records
def scan(number) do
case MusicBrainz.search_release_by_barcode(number) do
{:ok, [best_match_release | _other_releases]} ->
format = MusicBrainz.ReleaseSearchResult.format(best_match_release)
case Records.get_release_status(best_match_release.id, format) do
:new ->
{:ok, Result.new(number, best_match_release)}
{:wishlisted, record_id} ->
{:ok, Result.wishlisted(number, record_id, best_match_release)}
{:collected, record_id} ->
{:ok, Result.collected(number, record_id, best_match_release)}
end
{:ok, []} ->
{:ok, Result.not_found(number)}
error ->
error
end
end
def import(scan_result, current_time) do
case scan_result.status do
:new ->
Records.import_from_musicbrainz_release(scan_result.release.id,
format: MusicBrainz.ReleaseSearchResult.format(scan_result.release),
purchased_at: current_time
)
:wishlisted ->
record = Records.get_record!(scan_result.record_id)
Records.update_record(record, %{"purchased_at" => current_time})
:collected ->
{:error, :already_collected}
:not_found ->
{:error, :not_found}
end
end
end