feat: 初始提交
This commit is contained in:
56
backend/app/schemas/prompt.py
Normal file
56
backend/app/schemas/prompt.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from typing import Any, List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class PromptBase(BaseModel):
|
||||
"""Prompt 基础模型。"""
|
||||
|
||||
name: str = Field(..., description="唯一标识,用于代码引用")
|
||||
title: Optional[str] = Field(default=None, description="可读标题")
|
||||
content: str = Field(..., description="提示词具体内容")
|
||||
tags: Optional[List[str]] = Field(default=None, description="标签集合")
|
||||
|
||||
|
||||
class PromptCreate(PromptBase):
|
||||
"""创建 Prompt 时使用的模型。"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class PromptUpdate(BaseModel):
|
||||
"""更新 Prompt 时使用的模型。"""
|
||||
|
||||
title: Optional[str] = Field(default=None)
|
||||
content: Optional[str] = Field(default=None)
|
||||
tags: Optional[List[str]] = Field(default=None)
|
||||
|
||||
|
||||
class PromptRead(PromptBase):
|
||||
"""对外暴露的 Prompt 数据结构。"""
|
||||
|
||||
id: int
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@classmethod
|
||||
def model_validate(cls, obj: Any, *args: Any, **kwargs: Any) -> "PromptRead": # type: ignore[override]
|
||||
"""在转换 ORM 模型时,将字符串标签拆分为列表。"""
|
||||
if hasattr(obj, "id") and hasattr(obj, "name"):
|
||||
raw_tags = getattr(obj, "tags", None)
|
||||
if isinstance(raw_tags, str):
|
||||
processed = [tag for tag in raw_tags.split(",") if tag]
|
||||
elif isinstance(raw_tags, list):
|
||||
processed = raw_tags
|
||||
else:
|
||||
processed = None
|
||||
data = {
|
||||
"id": getattr(obj, "id"),
|
||||
"name": getattr(obj, "name"),
|
||||
"title": getattr(obj, "title", None),
|
||||
"content": getattr(obj, "content", None),
|
||||
"tags": processed,
|
||||
}
|
||||
return super().model_validate(data, *args, **kwargs)
|
||||
return super().model_validate(obj, *args, **kwargs)
|
||||
Reference in New Issue
Block a user