54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
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
|