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
This commit is contained in:
@@ -11,9 +11,11 @@ from app.schemas.publish_preview import (
|
||||
RemapPreviewResponse,
|
||||
RemapPreviewSeatItem,
|
||||
)
|
||||
from app.schemas.publish_readiness import PublishReadinessResponse
|
||||
from app.security.auth import require_api_key
|
||||
from app.services.draft_guard import get_current_draft_context
|
||||
from app.services.publish_preview import get_or_build_publish_preview_bundle
|
||||
from app.services.publish_readiness import build_publish_readiness
|
||||
from app.services.remap_service import apply_remap, preview_remap
|
||||
|
||||
router = APIRouter()
|
||||
@@ -26,7 +28,7 @@ async def create_draft_pricing_snapshot(
|
||||
role: str = Depends(require_api_key),
|
||||
):
|
||||
scheme, version = await get_current_draft_context(
|
||||
scheme_id=scheme_id,
|
||||
scheme_id,
|
||||
expected_scheme_version_id=expected_scheme_version_id,
|
||||
)
|
||||
result = await replace_scheme_version_pricing_snapshot(
|
||||
@@ -49,6 +51,35 @@ async def create_draft_pricing_snapshot(
|
||||
}
|
||||
|
||||
|
||||
@router.get(
|
||||
f"{settings.api_v1_prefix}/schemes/{{scheme_id}}/draft/publish-readiness",
|
||||
response_model=PublishReadinessResponse,
|
||||
)
|
||||
async def get_draft_publish_readiness(
|
||||
scheme_id: str,
|
||||
expected_scheme_version_id: str | None = Query(default=None),
|
||||
role: str = Depends(require_api_key),
|
||||
):
|
||||
scheme, version = await get_current_draft_context(
|
||||
scheme_id,
|
||||
expected_scheme_version_id=expected_scheme_version_id,
|
||||
)
|
||||
readiness = await build_publish_readiness(
|
||||
scheme_id=scheme.scheme_id,
|
||||
scheme_version_id=version.scheme_version_id,
|
||||
require_full_pricing_coverage=settings.publish_require_full_pricing_coverage,
|
||||
)
|
||||
return PublishReadinessResponse(
|
||||
scheme_id=scheme.scheme_id,
|
||||
scheme_version_id=version.scheme_version_id,
|
||||
status=version.status,
|
||||
validation_summary=readiness["validation_summary"],
|
||||
pricing_coverage=readiness["pricing_coverage"],
|
||||
snapshot=readiness["snapshot"],
|
||||
readiness=readiness["readiness"],
|
||||
)
|
||||
|
||||
|
||||
@router.get(f"{settings.api_v1_prefix}/schemes/{{scheme_id}}/draft/publish-preview", response_model=PublishPreviewResponse)
|
||||
async def get_publish_preview(
|
||||
scheme_id: str,
|
||||
@@ -58,7 +89,7 @@ async def get_publish_preview(
|
||||
role: str = Depends(require_api_key),
|
||||
):
|
||||
scheme, version = await get_current_draft_context(
|
||||
scheme_id=scheme_id,
|
||||
scheme_id,
|
||||
expected_scheme_version_id=expected_scheme_version_id,
|
||||
)
|
||||
bundle = await get_or_build_publish_preview_bundle(
|
||||
@@ -86,7 +117,7 @@ async def preview_draft_remap(
|
||||
role: str = Depends(require_api_key),
|
||||
):
|
||||
scheme, version = await get_current_draft_context(
|
||||
scheme_id=scheme_id,
|
||||
scheme_id,
|
||||
expected_scheme_version_id=expected_scheme_version_id,
|
||||
)
|
||||
items = await preview_remap(
|
||||
@@ -114,7 +145,7 @@ async def apply_draft_remap(
|
||||
role: str = Depends(require_api_key),
|
||||
):
|
||||
scheme, version = await get_current_draft_context(
|
||||
scheme_id=scheme_id,
|
||||
scheme_id,
|
||||
expected_scheme_version_id=expected_scheme_version_id,
|
||||
)
|
||||
items = await apply_remap(
|
||||
|
||||
Reference in New Issue
Block a user