from pydantic import BaseModel from datetime import datetime, date from typing import Optional, List, Dict, Any class TopicBase(BaseModel): id: str title: str field: str priority_score: int = 0 status: str = "pending" compliance_score: Optional[int] = None ready_at: Optional[date] = None published_at: Optional[date] = None platform_urls: Optional[Dict[str, str]] = None class TopicResponse(TopicBase): created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class Config: from_attributes = True class ArticleBase(BaseModel): id: str topic_id: str platform: str file_path: str status: str = "draft" compliance_score: Optional[int] = None created_at: Optional[datetime] = None class ArticleResponse(ArticleBase): class Config: from_attributes = True class SystemStatus(BaseModel): total_topics: int topics_by_status: Dict[str, int] ready_topics: List[TopicResponse] today_articles: int compliance_rate: float last_optimization: Optional[datetime] = None execution_time: Optional[float] = None # 任务执行耗时(秒) class OptimizationRequest(BaseModel): topic_ids: Optional[List[str]] = None # None表示全部 class PublishRequest(BaseModel): topic_id: str platform_urls: Dict[str, str] # {"zhihu": "...", "wechat": "...", "xiaohongshu": "..."} class BatchPublishRequest(BaseModel): date: str # YYYY-MM-DD