119 lines
4.0 KiB
Python
119 lines
4.0 KiB
Python
"""提示词工坊 Pydantic Schema"""
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
|
|
# ==================== 请求模型 ====================
|
|
|
|
class ImportRequest(BaseModel):
|
|
"""导入提示词请求"""
|
|
custom_name: Optional[str] = Field(None, max_length=100, description="自定义名称")
|
|
|
|
|
|
class DownloadRequest(BaseModel):
|
|
"""记录下载请求(云端使用)"""
|
|
instance_id: str = Field(..., description="实例标识")
|
|
user_identifier: str = Field(..., description="用户标识")
|
|
|
|
|
|
class PromptSubmissionCreate(BaseModel):
|
|
"""提交提示词请求"""
|
|
name: str = Field(..., max_length=100, description="提示词名称")
|
|
description: Optional[str] = Field(None, description="提示词描述")
|
|
prompt_content: str = Field(..., description="提示词内容")
|
|
category: str = Field(default="general", max_length=50, description="分类")
|
|
tags: Optional[List[str]] = Field(None, description="标签列表")
|
|
author_display_name: Optional[str] = Field(None, max_length=100, description="作者显示名")
|
|
is_anonymous: bool = Field(default=False, description="是否匿名发布")
|
|
source_style_id: Optional[int] = Field(None, description="来源写作风格ID")
|
|
|
|
|
|
class ReviewRequest(BaseModel):
|
|
"""审核请求"""
|
|
action: str = Field(..., pattern="^(approve|reject)$", description="操作:approve/reject")
|
|
review_note: Optional[str] = Field(None, description="审核备注")
|
|
category: Optional[str] = Field(None, description="分类(可调整)")
|
|
tags: Optional[List[str]] = Field(None, description="标签(可调整)")
|
|
|
|
|
|
class AdminItemCreate(BaseModel):
|
|
"""管理员创建提示词"""
|
|
name: str = Field(..., max_length=100, description="提示词名称")
|
|
description: Optional[str] = Field(None, description="提示词描述")
|
|
prompt_content: str = Field(..., description="提示词内容")
|
|
category: str = Field(default="general", description="分类")
|
|
tags: Optional[List[str]] = Field(None, description="标签列表")
|
|
|
|
|
|
class AdminItemUpdate(BaseModel):
|
|
"""管理员更新提示词"""
|
|
name: Optional[str] = Field(None, max_length=100, description="提示词名称")
|
|
description: Optional[str] = Field(None, description="提示词描述")
|
|
prompt_content: Optional[str] = Field(None, description="提示词内容")
|
|
category: Optional[str] = Field(None, description="分类")
|
|
tags: Optional[List[str]] = Field(None, description="标签列表")
|
|
status: Optional[str] = Field(None, description="状态")
|
|
|
|
|
|
# ==================== 响应模型 ====================
|
|
|
|
class PromptWorkshopItemResponse(BaseModel):
|
|
"""提示词条目响应"""
|
|
id: str
|
|
name: str
|
|
description: Optional[str] = None
|
|
prompt_content: str
|
|
category: str
|
|
tags: Optional[List[str]] = None
|
|
author_name: Optional[str] = None
|
|
is_official: bool
|
|
download_count: int
|
|
like_count: int
|
|
is_liked: Optional[bool] = None
|
|
created_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class PromptSubmissionResponse(BaseModel):
|
|
"""提交记录响应"""
|
|
id: str
|
|
name: str
|
|
description: Optional[str] = None
|
|
prompt_content: Optional[str] = None
|
|
category: str
|
|
tags: Optional[List[str]] = None
|
|
author_display_name: Optional[str] = None
|
|
is_anonymous: bool
|
|
status: str
|
|
review_note: Optional[str] = None
|
|
reviewed_at: Optional[datetime] = None
|
|
created_at: Optional[datetime] = None
|
|
source_instance: Optional[str] = None
|
|
submitter_name: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class CategoryInfo(BaseModel):
|
|
"""分类信息"""
|
|
id: str
|
|
name: str
|
|
count: int
|
|
|
|
|
|
class WorkshopItemsListResponse(BaseModel):
|
|
"""提示词列表响应"""
|
|
success: bool = True
|
|
data: dict # 包含 total, page, limit, items, categories
|
|
|
|
|
|
class WorkshopStatusResponse(BaseModel):
|
|
"""服务状态响应"""
|
|
mode: str
|
|
instance_id: str
|
|
cloud_url: Optional[str] = None
|
|
cloud_connected: Optional[bool] = None |