Implement display artifacts, pricing integrity, draft base and publish preview bundle

This commit is contained in:
greebo
2026-03-19 17:58:17 +03:00
parent 85fb2f4bb9
commit c91c5abf15
35 changed files with 3283 additions and 302 deletions

View File

@@ -0,0 +1,45 @@
from __future__ import annotations
from fastapi import HTTPException, status
from app.repositories.scheme_versions import list_scheme_versions
async def select_baseline_scheme_version(
*,
scheme_id: str,
draft_scheme_version_id: str,
override_scheme_version_id: str | None = None,
):
versions = await list_scheme_versions(scheme_id=scheme_id, limit=200, offset=0)
if override_scheme_version_id:
for row in versions:
if row.scheme_version_id == override_scheme_version_id:
if row.scheme_version_id == draft_scheme_version_id:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail="Baseline override must differ from current draft scheme version",
)
return row, "override"
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Baseline override scheme version not found",
)
published_candidates = [
row for row in versions
if row.scheme_version_id != draft_scheme_version_id and row.status == "published"
]
if published_candidates:
return published_candidates[0], "published"
previous_candidates = [
row for row in versions
if row.scheme_version_id != draft_scheme_version_id
]
if previous_candidates:
return previous_candidates[0], "previous"
return None, "none"