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. |
||
|---|---|---|
| .. | ||
| components | ||
| controllers | ||
| live | ||
| plugs | ||
| endpoint.ex | ||
| gettext.ex | ||
| router.ex | ||
| telemetry.ex | ||
| user_auth.ex | ||