Files
MuMuAINovel/backend/app/schemas/prompt_workshop.py
T
2026-01-27 13:57:32 +08:00

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