from datetime import datetime from pydantic import BaseModel class JokeBase(BaseModel): title: str content: str type_ids: list[int] | None = None crowd_ids: list[int] | None = None class JokeCreate(JokeBase): pass class JokeUpdate(BaseModel): title: str | None = None content: str | None = None polished_content: str | None = None ai_score: float | None = None ai_level: str | None = None type_ids: list[int] | None = None crowd_ids: list[int] | None = None status: str | None = None class JokeResponse(JokeBase): id: int status: str polished_content: str | None = None # AI 评价字段 ai_score: float | None = None ai_level: str | None = None view_count: int like_count: int dislike_count: int created_at: datetime updated_at: datetime type_names: list[str] | None = None crowd_names: list[str] | None = None class Config: from_attributes = True @property def display_content(self) -> str: """优先显示润色后的内容""" return self.polished_content if self.polished_content else self.content def get_level_display(self) -> str: """获取 AI 评级的中文显示""" level_map = { 'excellent': '⭐⭐⭐ 精品', 'good': '⭐⭐ 良好', 'ordinary': '⭐ 普通', 'poor': '⚠️ 待优化' } return level_map.get(self.ai_level, '') if self.ai_level else '' class PaginatedJokeResponse(BaseModel): items: list[JokeResponse] total: int page: int page_size: int # ============================================================ # 笑话生成器 Schema # ============================================================ class GenerateRequest(BaseModel): """笑话生成请求""" keywords: list[str] = [] scenarios: list[str] = [] style: str = "twist" length: str = "medium" temperature: float = 0.8 class Config: json_schema_extra = { "example": { "keywords": ["加班"], "scenarios": ["职场"], "style": "twist", "length": "medium", "temperature": 0.8, } } class GenerateResponse(BaseModel): """笑话生成响应""" title: str content: str score: int = 0 reason: str = "" created_at: datetime | None = None class Config: from_attributes = True