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:
greebo
2026-03-19 20:15:48 +03:00
parent 2af5e49b8c
commit 7b6c12f924
8 changed files with 197 additions and 45 deletions

View File

@@ -1,39 +1,40 @@
from __future__ import annotations
from fastapi import HTTPException, status
def raise_conflict(*, code: str, message: str, **extra) -> None:
detail = {
def raise_conflict(*, code: str, message: str, details: dict | None = None) -> None:
payload = {
"code": code,
"message": message,
**extra,
}
if details:
payload.update(details)
raise HTTPException(
status_code=status.HTTP_409_CONFLICT,
detail=detail,
detail=payload,
)
def raise_unprocessable(*, code: str, message: str, **extra) -> None:
detail = {
def raise_unprocessable(*, code: str, message: str, details: dict | None = None) -> None:
payload = {
"code": code,
"message": message,
**extra,
}
if details:
payload.update(details)
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=detail,
detail=payload,
)
def raise_not_found(*, code: str, message: str, **extra) -> None:
detail = {
"code": code,
"message": message,
**extra,
}
def raise_publish_not_ready(*, reason: str, details: dict) -> None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=detail,
status_code=status.HTTP_409_CONFLICT,
detail={
"code": "publish_not_ready",
"message": reason,
"details": details,
},
)