Task 002: add shared domain contracts

This commit is contained in:
2026-05-21 17:45:00 +03:00
parent d42f0c4392
commit a0ae06adfa
31 changed files with 4043 additions and 27 deletions
@@ -0,0 +1,105 @@
from __future__ import annotations
from enum import Enum
from typing import Any
from pydantic import BaseModel, TypeAdapter
from .enums import (
AgentJobErrorCategory,
AgentJobStatus,
AgentJobType,
ArticleWorkflowStatus,
AssetStatus,
AssetType,
ClaimRiskLevel,
ClaimSupportStatus,
PlanReviewStatus,
PublishingStatus,
ReviewStatus,
ReviewType,
Role,
ScriptConfigVersionStatus,
)
from .models import (
AgentJobOutput,
AgentJobSummary,
ArticleCreateRequest,
ArticleCreateResponse,
ArticleDetailResponse,
ArticleListResponse,
ArticleSummary,
AssetSummary,
ClaimSummary,
DraftSummary,
EvidenceSummary,
PlanSectionSummary,
PlanSummary,
PublishCommitSummary,
PublishingRules,
ResearchArtifactManifestSummary,
ResearchArtifactSummary,
ReviewSummary,
RunnerFileRef,
ScriptConfigVersionSummary,
TargetSiteConfig,
UserSummary,
)
CONTRACT_ENUMS: tuple[type[Enum], ...] = (
Role,
ArticleWorkflowStatus,
AgentJobStatus,
AgentJobType,
AgentJobErrorCategory,
ClaimSupportStatus,
ClaimRiskLevel,
PublishingStatus,
AssetStatus,
AssetType,
PlanReviewStatus,
ReviewStatus,
ReviewType,
ScriptConfigVersionStatus,
)
CONTRACT_SCHEMA_MODELS: tuple[type[BaseModel], ...] = (
UserSummary,
PublishingRules,
TargetSiteConfig,
ScriptConfigVersionSummary,
ArticleCreateRequest,
ArticleSummary,
ArticleCreateResponse,
ArticleListResponse,
PlanSectionSummary,
PlanSummary,
ResearchArtifactSummary,
ResearchArtifactManifestSummary,
EvidenceSummary,
ClaimSummary,
DraftSummary,
AssetSummary,
ReviewSummary,
PublishCommitSummary,
RunnerFileRef,
AgentJobSummary,
AgentJobOutput,
ArticleDetailResponse,
)
def inject_contract_schemas(openapi_schema: dict[str, Any]) -> None:
schemas = openapi_schema.setdefault("components", {}).setdefault("schemas", {})
for enum in CONTRACT_ENUMS:
schemas[enum.__name__] = TypeAdapter(enum).json_schema(
ref_template="#/components/schemas/{model}"
)
for model in CONTRACT_SCHEMA_MODELS:
schema = model.model_json_schema(ref_template="#/components/schemas/{model}")
for name, definition in schema.pop("$defs", {}).items():
schemas.setdefault(name, definition)
schemas[model.__name__] = schema