Files
svg-backend/backend/docs/api-map.md
greebo 7b6c12f924 feat(backend): add publish readiness endpoint and enforce publish gate contract
add backend endpoint for publish readiness checks

enforce publish gate contract before version publication
make publish preconditions explicit and consistent for clients
2026-03-19 20:15:48 +03:00

3.9 KiB

API map

app/api/routes/system.py

  • GET /
  • GET /healthz
  • GET /api/v1/ping
  • GET /api/v1/auth/me
  • GET /api/v1/db/ping
  • GET /api/v1/manifest

app/api/routes/uploads.py

  • POST /api/v1/schemes/upload
  • GET /api/v1/uploads
  • GET /api/v1/uploads/{upload_id}
  • GET /api/v1/uploads/{upload_id}/normalized

app/api/routes/schemes.py

  • GET /api/v1/schemes
  • GET /api/v1/schemes/{scheme_id}
  • GET /api/v1/schemes/{scheme_id}/current
  • GET /api/v1/schemes/{scheme_id}/versions
  • POST /api/v1/schemes/{scheme_id}/versions
  • GET /api/v1/schemes/{scheme_id}/publish/validation
  • POST /api/v1/schemes/{scheme_id}/publish
  • POST /api/v1/schemes/{scheme_id}/unpublish
  • POST /api/v1/schemes/{scheme_id}/rollback

app/api/routes/structure.py

  • GET /api/v1/schemes/{scheme_id}/current/sectors
  • GET /api/v1/schemes/{scheme_id}/current/groups
  • GET /api/v1/schemes/{scheme_id}/current/seats
  • GET /api/v1/schemes/{scheme_id}/current/seats/{seat_id}/price
  • GET /api/v1/schemes/{scheme_id}/current/svg
  • GET /api/v1/schemes/{scheme_id}/current/svg/display
  • GET /api/v1/schemes/{scheme_id}/current/svg/display/meta

app/api/routes/pricing.py

  • GET /api/v1/schemes/{scheme_id}/pricing
  • POST /api/v1/schemes/{scheme_id}/pricing/categories
  • PUT /api/v1/schemes/{scheme_id}/pricing/categories/{pricing_category_id}
  • DELETE /api/v1/schemes/{scheme_id}/pricing/categories/{pricing_category_id}
  • POST /api/v1/schemes/{scheme_id}/pricing/rules
  • PUT /api/v1/schemes/{scheme_id}/pricing/rules/{price_rule_id}
  • DELETE /api/v1/schemes/{scheme_id}/pricing/rules/{price_rule_id}

app/api/routes/pricing_diagnostics.py

  • GET /api/v1/schemes/{scheme_id}/pricing/coverage
  • GET /api/v1/schemes/{scheme_id}/pricing/unpriced-seats
  • GET /api/v1/schemes/{scheme_id}/pricing/explain/{seat_id}

app/api/routes/test_mode.py

  • GET /api/v1/schemes/{scheme_id}/test/seats/{seat_id}

app/api/routes/audit.py

  • GET /api/v1/schemes/{scheme_id}/audit

app/api/routes/publish.py

  • POST /api/v1/schemes/{scheme_id}/draft/pricing/snapshot
  • GET /api/v1/schemes/{scheme_id}/draft/publish-preview
  • POST /api/v1/schemes/{scheme_id}/draft/remap/preview
  • POST /api/v1/schemes/{scheme_id}/draft/remap/apply

app/api/routes/editor.py

  • GET /api/v1/schemes/{scheme_id}/draft/structure
  • GET /api/v1/schemes/{scheme_id}/draft/compare-preview
  • GET /api/v1/schemes/{scheme_id}/draft/validation
  • GET /api/v1/schemes/{scheme_id}/draft/seats/records/{seat_record_id}
  • GET /api/v1/schemes/{scheme_id}/draft/sectors/records/{sector_record_id}
  • GET /api/v1/schemes/{scheme_id}/draft/groups/records/{group_record_id}
  • POST /api/v1/schemes/{scheme_id}/draft/sectors
  • POST /api/v1/schemes/{scheme_id}/draft/groups
  • DELETE /api/v1/schemes/{scheme_id}/draft/sectors/records/{sector_record_id}
  • DELETE /api/v1/schemes/{scheme_id}/draft/groups/records/{group_record_id}
  • PATCH /api/v1/schemes/{scheme_id}/draft/seats/records/{seat_record_id}
  • POST /api/v1/schemes/{scheme_id}/draft/seats/bulk
  • PATCH /api/v1/schemes/{scheme_id}/draft/sectors/records/{sector_record_id}
  • PATCH /api/v1/schemes/{scheme_id}/draft/groups/records/{group_record_id}
  • POST /api/v1/schemes/{scheme_id}/draft/repair-references

app/api/routes/admin.py

  • GET /api/v1/admin/schemes/{scheme_id}/current/artifacts
  • GET /api/v1/admin/schemes/{scheme_id}/current/validation
  • POST /api/v1/admin/schemes/{scheme_id}/current/display/regenerate
  • POST /api/v1/admin/display/backfill
  • GET /api/v1/admin/artifacts/publish-preview/audit
  • POST /api/v1/admin/artifacts/publish-preview/cleanup

Notes

  • This file is an operational route index, not a generated OpenAPI export.
  • Update this map in the same change set when adding, removing, renaming, or moving routes.
  • Query guards such as expected_current_scheme_version_id / expected_scheme_version_id are part of the operational contract for optimistic concurrency on mutable flows.

app/api/routes/publish.py

  • GET /api/v1/schemes/{scheme_id}/draft/publish-readiness