prop/lib/microwaveprop/radio
Graham McIntire 44b169b234 CSV upload preview with duplicate detection before commit
Uploads now show a review page with three summary cards (valid,
duplicates, invalid), tables for invalid and duplicate rows, and a
sample of the first 20 valid rows. Nothing is written to the database
until the user clicks "Looks good — submit N contacts".

Duplicate detection treats two rows as the same contact if they share
the same pair of (callsign, grid) tuples (direction-agnostic), the
same band, and timestamps within 60 minutes. Dedup runs against both
existing DB contacts (single band/time-scoped query) and earlier rows
in the same upload, and the preview labels which side matched.

CsvImport grows preview/2 + commit/1; the old import/2 is kept as a
thin backward-compat wrapper that skips dedup. Added 11 new CsvImport
tests and reworked the SubmitLive CSV tests for the two-step flow.
2026-04-09 12:30:10 -05:00
..
callsign_client.ex Add /path calculator page 2026-04-07 13:25:04 -05:00
contact.ex Rename qsos table to contacts, qso_id to contact_id 2026-04-02 15:52:19 -05:00
csv_import.ex CSV upload preview with duplicate detection before commit 2026-04-09 12:30:10 -05:00
enrichment_status.ex Replace boolean enrichment flags with enum status fields 2026-04-02 12:07:51 -05:00
maidenhead.ex Add /beacons CRUD and /users admin page 2026-04-08 12:01:45 -05:00