aa62ca490e
A new per-tree Cleanup page (and cleanup_service + endpoints), each fix preview-first per the propose-then-approve rule: - Mark deceased by birth year: lists people born ≤ a cutoff (default 1930) not already deceased; apply sets is_living=false for the ones you keep checked. - Set sex from a source GEDCOM: upload the source .ged (it carries SEX); matches by name and proposes sex only where it's missing — far more accurate than guessing from first names. Review, then apply. - Names that look broken: flags date-in-surname / date-in-given / no-surname / packed given names, with inline editable given+surname; fix the checked ones. No migration (uses existing columns). 55 backend tests pass (preview+apply for all three); frontend builds. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
802 B
Python
33 lines
802 B
Python
"""Versioned API surface. Mounts under /api/v1."""
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from app.api.v1 import (
|
|
auth,
|
|
citations,
|
|
cleanup,
|
|
events,
|
|
gedcom,
|
|
media,
|
|
names,
|
|
persons,
|
|
relationships,
|
|
sources,
|
|
trees,
|
|
users,
|
|
)
|
|
|
|
api_router = APIRouter(prefix="/api/v1")
|
|
api_router.include_router(auth.router)
|
|
api_router.include_router(users.router)
|
|
api_router.include_router(trees.router)
|
|
api_router.include_router(persons.router)
|
|
api_router.include_router(names.router)
|
|
api_router.include_router(events.router)
|
|
api_router.include_router(relationships.router)
|
|
api_router.include_router(sources.router)
|
|
api_router.include_router(citations.router)
|
|
api_router.include_router(media.router)
|
|
api_router.include_router(gedcom.router)
|
|
api_router.include_router(cleanup.router)
|