GEDCOM: duplicate-aware import + maiden/married + RELI/NOTE mapping #21
Reference in New Issue
Block a user
Delete Branch "gedcom-import-dedupe"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked on #20.
48 backend tests pass; frontend builds.
Names (the genealogy standard: maiden name primary, married/alias as typed alternates): - Name model already supported multiple typed names; expose full CRUD — NameCreate/Read/Update schemas, name_service (one-primary invariant, promote-on-delete), nested /persons/{id}/names routes. - Person page gains a Names card: add/edit/delete + "make primary", with a curated name_type dropdown (birth/maiden, married, alias, nickname, …). Self-person ("who am I"): - users.self_person_id FK (use_alter for the users<->persons<->trees cycle) + migration; PATCH /users/me/self-person; "This is me" / "This is you" on the person page. Soft-deleting the linked person clears it. Deletion integrity (fixes the broken tree view): - delete_person now soft-deletes the relationships touching the person, so no dangling edges remain; family-chart also filters links to missing people. - Optional cascade=true recursively deletes descendants (GEDCOM cleanup); the person page asks "only this person" vs "with all descendants". - DELETE returns {deleted: n}. Family view surfaces "Not connected to anyone" so dangling people aren't lost. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Duplicate detection (the "merge / skip / overwrite" the user asked for): - New POST /gedcom/preview dry-runs the file and flags incoming people that resemble existing ones (name similarity via difflib + birth-year guard; high/medium score). No writes. - /gedcom/import takes default_action (new|skip|merge|overwrite) + per-xref resolutions {xref: {action, target_id}}: new create as a new person (current behavior) skip link families to the existing person, copy nothing merge attach the incoming names (as alternates), events, citations, and notes onto the existing person overwrite soft-delete the existing person, import the incoming one fresh Relationship creation is deduped so a merge can't double an edge. Richer record mapping (covers the user's repo's GEDCOM): - Multiple NAME records honor their TYPE; _MARNM (and NICK) import as typed alternate names — maiden stays primary, married becomes a "married" Name. - RELI -> a "religion" event with the value in detail; OCCU/EDUC values too. - NOTE -> person notes (and event notes); NOTE/RELI are no longer "unmapped". - Export round-trips name TYPE. Verified against the user's 2185-person export: 0 unmapped tags. 48 tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>