2025-07-31 15:35:23 +08:00

345 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
API Response Models
API 响应数据模型
"""
from typing import List, Dict, Any, Optional, Union
from pydantic import BaseModel, Field
from datetime import datetime
class ApiResponse(BaseModel):
"""通用API响应"""
success: bool = Field(..., description="是否成功")
message: str = Field(default="", description="响应消息")
data: Optional[Any] = Field(default=None, description="响应数据")
error: Optional[str] = Field(default=None, description="错误信息")
request_id: Optional[str] = Field(default=None, description="请求ID")
timestamp: datetime = Field(default_factory=datetime.now, description="响应时间")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "操作成功",
"data": {"result": "example_data"},
"error": None,
"request_id": "req_123456",
"timestamp": "2024-01-01T12:00:00"
}
}
class TopicGenerationResponse(ApiResponse):
"""主题生成响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="生成的主题数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "主题生成成功",
"data": {
"topics": [
{
"index": 1,
"date": "2024-02-01",
"logic": "春节期间家庭出游需求旺盛",
"object": "三亚亚龙湾",
"product": "家庭度假套餐",
"style": "温馨家庭",
"targetAudience": "年轻家庭"
}
],
"generation_stats": {
"total_generated": 5,
"processing_time": 2.5
}
}
}
}
class ContentGenerationResponse(ApiResponse):
"""内容生成响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="生成的内容数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "内容生成成功",
"data": {
"content": {
"title": "三亚亚龙湾| 天下第一湾的绝美体验",
"content": "详细的旅游内容描述...",
"tag": ["三亚", "亚龙湾", "海滩度假"]
},
"generation_stats": {
"word_count": 500,
"processing_time": 3.2
}
}
}
}
class ContentJudgingResponse(ApiResponse):
"""内容评判响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="评判结果数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "内容评判完成",
"data": {
"is_passed": False,
"confidence": 0.85,
"analysis": "价格信息与产品资料不符,存在虚假宣传风险",
"suggested_revisions": "建议修改价格为2999元并添加具体包含项目"
}
}
}
class PosterGenerationResponse(ApiResponse):
"""海报生成响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="海报生成数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "海报生成成功",
"data": {
"poster_path": "output/posters/vibrant_poster_20240101.png",
"fabric_json": "output/json/fabric_data_20240101.json",
"content": {
"title": "正佳极地海洋世界",
"slogan": "夜游海洋,梦幻之旅",
"price": "199",
"ticket_type": "夜场票"
},
"template_info": {
"name": "vibrant",
"size": [900, 1200],
"transparent_background": True
}
}
}
}
class DocumentProcessingResponse(ApiResponse):
"""文档处理响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="文档处理数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "文档处理完成",
"data": {
"processed_documents": 2,
"output_files": [
"output/documents/integrated_content.txt",
"output/documents/travel_guide_transformed.txt"
],
"statistics": {
"total_characters": 50000,
"key_topics": ["住宿", "交通", "美食", "景点"],
"processing_time": 15.3
}
}
}
}
class XHSSearchResponse(ApiResponse):
"""小红书搜索响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="搜索结果数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "搜索完成",
"data": {
"keyword": "三亚旅游攻略",
"notes": [
{
"note_id": "123abc",
"title": "三亚7天6晚详细攻略",
"content": "超详细的三亚旅游攻略...",
"author": "旅游达人小明",
"likes": 1500,
"comments": 89,
"tags": ["三亚", "攻略", "海滩"]
}
],
"total_count": 20,
"search_time": "2024-01-01T12:00:00"
}
}
}
class KeywordAnalysisResponse(ApiResponse):
"""关键词分析响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="关键词分析数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "关键词分析完成",
"data": {
"keywords": ["三亚", "亚龙湾", "海滩", "度假", "攻略"],
"keyword_scores": {
"三亚": 85.5,
"亚龙湾": 78.2,
"海滩": 65.8
},
"categories": {
"地理位置": ["三亚", "亚龙湾"],
"景点类型": ["海滩"],
"活动体验": ["度假"]
},
"search_suggestions": [
"三亚攻略",
"亚龙湾住宿",
"三亚美食"
]
}
}
}
class ContentAnalysisResponse(ApiResponse):
"""内容分析响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="内容分析数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "内容分析完成",
"data": {
"content_quality_score": 78.5,
"engagement_score": 65.2,
"content_themes": ["旅游攻略", "美食体验", "住宿推荐"],
"sentiment_analysis": {
"positive": 0.7,
"negative": 0.1,
"neutral": 0.2,
"overall": "positive"
},
"recommendations": [
"内容质量较好,建议增加更多实用信息",
"互动数据中等,可关注更热门的内容"
]
}
}
}
class FileUploadResponse(ApiResponse):
"""文件上传响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="上传结果数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "文件上传成功",
"data": {
"file_id": "upload_123456",
"file_path": "uploads/document_20240101.pdf",
"file_size": 1024000,
"processing_status": "completed"
}
}
}
class PipelineResponse(ApiResponse):
"""完整流水线响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="流水线执行结果")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "流水线执行完成",
"data": {
"topics": [{"index": 1, "title": "三亚亲子游攻略"}],
"content": {"title": "三亚亲子游", "content": "详细内容..."},
"judge_result": {"is_passed": True, "confidence": 0.9},
"poster": {"poster_path": "output/poster.png"},
"execution_time": 30.5
}
}
}
class CookieManagementResponse(ApiResponse):
"""Cookie管理响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="Cookie管理结果")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "Cookie管理操作成功",
"data": {
"total_cookies": 3,
"valid_cookies": 2,
"current_cookie": "xhs_main",
"operation": "add"
}
}
}
class PromptBuildResponse(ApiResponse):
"""提示词构建响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="构建的提示词")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "提示词构建成功",
"data": {
"system_prompt": "你是一位专业的旅游内容创作者...",
"user_prompt": "请为三亚亚龙湾创作内容...",
"prompt_template": "content_generation",
"variables": {"scenic_info": "三亚亚龙湾"}
}
}
}
class TaskManagementResponse(ApiResponse):
"""任务管理响应"""
data: Optional[Dict[str, Any]] = Field(default=None, description="任务管理数据")
class Config:
schema_extra = {
"example": {
"success": True,
"message": "任务查询成功",
"data": {
"task_id": "task_123456",
"status": "completed",
"created_at": "2024-01-01T12:00:00",
"completed_at": "2024-01-01T12:05:00",
"result_files": ["output/result.json"],
"statistics": {"processing_time": 300}
}
}
}