feat(backend): add publish readiness contract and guarded publish flow
add backend readiness contract for publish prechecks guard publish flow with explicit validation and version-aware checks make publish behavior more predictable for clients and safer against stale state
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.repositories.audit import create_audit_event
|
||||
from app.repositories.scheme_version_pricing import replace_scheme_version_pricing_snapshot
|
||||
from app.repositories.scheme_versions import get_current_scheme_version
|
||||
@@ -41,13 +43,20 @@ async def publish_current_draft_scheme(
|
||||
readiness = await build_publish_readiness(
|
||||
scheme_id=scheme.scheme_id,
|
||||
scheme_version_id=version.scheme_version_id,
|
||||
status=version.status,
|
||||
)
|
||||
|
||||
if not readiness["readiness"]["is_ready_to_publish"]:
|
||||
raise_conflict(
|
||||
code="publish_not_ready",
|
||||
message="Draft scheme does not satisfy publish readiness requirements.",
|
||||
details={"readiness": readiness["readiness"]},
|
||||
message="Scheme is not ready to publish in current draft state.",
|
||||
details={
|
||||
"scheme_version_id": version.scheme_version_id,
|
||||
"readiness": readiness["readiness"],
|
||||
"validation_summary": readiness["validation_summary"],
|
||||
"pricing_coverage": readiness["pricing_coverage"],
|
||||
"snapshot": readiness["snapshot"],
|
||||
},
|
||||
)
|
||||
|
||||
snapshot = await replace_scheme_version_pricing_snapshot(
|
||||
|
||||
Reference in New Issue
Block a user