prop/lib/microwaveprop/radio
Graham McIntire 3cb367c898
fix(import): handle Radio.create_contact :duplicate return in worker
apply_valid_rows only matched {:ok, _} and {:error, %Changeset{}}, so when
Radio.create_contact returned {:error, :duplicate, existing} — the race
window where preview flagged a row as new but another writer inserts the
same contact before the worker picks up the chunk — the reduce callback
crashed with FunctionClauseError. Oban retried the chunk, rolling back
the Postgrex transaction and surfacing the DBConnection errors the
operator was seeing.

Treat :duplicate as a silent skip: the row is already in the DB, there
is nothing to insert, and the counter should not double-count the existing
contact as an error either.
2026-04-17 09:54:17 -05:00
..
adif_import.ex CSV/ADIF import: upsert existing contacts on grid/mode refinement 2026-04-16 10:57:37 -05:00
band_resolver.ex Rename 9cm band 3456 → 3400 2026-04-16 12:40:38 -05:00
callsign_client.ex Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
contact.ex Rename 9cm band 3456 → 3400 2026-04-16 12:40:38 -05:00
contact_edit.ex Rename 9cm band 3456 → 3400 2026-04-16 12:40:38 -05:00
csv_import.ex fix(import): handle Radio.create_contact :duplicate return in worker 2026-04-17 09:54:17 -05:00
edit_notifier.ex Send mail as prop@w5isp.com with reply-to graham@mcintire.me 2026-04-12 14:00:38 -05:00
enrichment_status.ex Add dialyzer specs and types across the codebase 2026-04-12 08:55:04 -05:00
import_matcher.ex CSV/ADIF import: upsert existing contacts on grid/mode refinement 2026-04-16 10:57:37 -05:00
import_run.ex feat(import): async CSV import with progress-tracking schema 2026-04-17 09:31:22 -05:00
maidenhead.ex Add /beacons CRUD and /users admin page 2026-04-08 12:01:45 -05:00