Implement display artifacts, pricing integrity, draft base and publish preview bundle
This commit is contained in:
45
backend/app/services/baseline_selector.py
Normal file
45
backend/app/services/baseline_selector.py
Normal 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"
|
||||
Reference in New Issue
Block a user