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