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"