Move the related graph/navigation and canonical-identity services from direct synchronous sqliteService calls to the asynchronous PostgreSQL query boundary.
Depends on #150
Scope:
- Migrate path finding, map views, sparse-tree generation, ancestry updates, integrity checks, person metadata, ID mapping, provider mapping, and platform-link queries.
- Preserve recursive traversal limits, parent roles, ordering, canonical/external ID semantics, upserts, and transaction ownership.
- Propagate async behavior through service and route callers without fire-and-forget mutations.
- Add focused parity tests for cycles, missing persons, multi-provider identity links, relationship mutation, map/geocode status reads, and tree navigation.
Acceptance criteria:
- No migrated service imports sqlite.service or issues SQLite-specific SQL.
- Relationship/identity endpoints return equivalent results from the PostgreSQL fixture store.
- Multi-statement mutations are atomic.
- Cyclic family graphs terminate under the same limits as before.
Files/areas: server/src/services/{path,map,sparse-tree,ancestry-update,integrity,person,id-mapping,provider-mapping,platform-linking,multi-platform-comparison}.service.ts and their callers/tests.
Part of #120
After this issue ships, check its box in #120. If it was the last open child, comment on #120 with a summary of the delivered children and close #120 as completed.
Move the related graph/navigation and canonical-identity services from direct synchronous sqliteService calls to the asynchronous PostgreSQL query boundary.
Depends on #150
Scope:
Acceptance criteria:
Files/areas: server/src/services/{path,map,sparse-tree,ancestry-update,integrity,person,id-mapping,provider-mapping,platform-linking,multi-platform-comparison}.service.ts and their callers/tests.
Part of #120
After this issue ships, check its box in #120. If it was the last open child, comment on #120 with a summary of the delivered children and close #120 as completed.