"""内容分发相关 Pydantic schemas""" from datetime import datetime from pydantic import BaseModel, Field # ---------- 平台信息 ---------- class FormatFeatures(BaseModel): """平台格式特性""" supports_markdown: bool = False supports_html: bool = False max_heading_level: int = 0 supports_code_block: bool = False supports_emoji: bool = False class PlatformInfo(BaseModel): """平台信息响应""" id: str name: str icon: str max_title_length: int max_content_length: int min_content_length: int supported_media: list[str] max_images: int best_publish_times: list[str] = [] best_publish_days: list[str] = [] format_features: FormatFeatures | None = None rules: list[str] = [] seo_tips: list[str] = [] class PlatformListResponse(BaseModel): """平台列表响应""" platforms: list[PlatformInfo] # ---------- 内容校验 ---------- class ContentValidateRequest(BaseModel): """内容校验请求""" content: str = Field(min_length=1) title: str = Field(min_length=1) platform: str tags: list[str] | None = Field(default=None, description="内容标签列表") class ValidationIssue(BaseModel): """校验问题""" severity: str = Field(pattern=r"^(high|medium|low)$") message: str class ContentValidateResponse(BaseModel): """内容校验响应""" is_valid: bool score: int = Field(ge=0, le=100) issues: list[ValidationIssue] passed: list[str] # ---------- 发布策略 ---------- class PublishStrategyRequest(BaseModel): """发布策略请求""" content_title: str = Field(min_length=1) platforms: list[str] = Field(min_length=1) industry: str = "通用" class ScheduleItem(BaseModel): """排期项""" platform: str platform_name: str suggested_time: str reason: str class PublishStrategyResponse(BaseModel): """发布策略响应""" schedule: list[ScheduleItem] tags: dict[str, list[str]] tips: list[str] # ---------- 内容格式化 ---------- class ContentFormatRequest(BaseModel): """内容格式化请求""" content: str = Field(min_length=1) platform: str class ContentFormatResponse(BaseModel): """内容格式化响应""" platform: str formatted_content: str original_length: int formatted_length: int # ---------- 发布排期 ---------- class ScheduleCreateRequest(BaseModel): """创建发布排期请求""" content_title: str = Field(min_length=1) content_id: str | None = None platforms: list[str] = Field(min_length=1) industry: str = "通用" scheduled_times: dict[str, str] | None = None """自定义各平台发布时间 {platform: "YYYY-MM-DD HH:MM"}""" class PlatformSchedule(BaseModel): """单个平台排期""" platform: str platform_name: str scheduled_time: str status: str = "pending" """pending / published / failed""" class ScheduleCreateResponse(BaseModel): """创建发布排期响应""" schedule_id: str content_title: str platforms: list[PlatformSchedule] tips: list[str] created_at: str