70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
from pydantic import BaseModel, Field
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str = Field(min_length=1, max_length=64)
|
|
password: str = Field(min_length=1, max_length=128)
|
|
|
|
|
|
class RegisterRequest(BaseModel):
|
|
username: str = Field(min_length=3, max_length=64, pattern=r"^[A-Za-z0-9_.-]+$")
|
|
password: str = Field(min_length=8, max_length=128)
|
|
display_name: str = Field(min_length=1, max_length=64)
|
|
|
|
|
|
class AdminUserCreate(BaseModel):
|
|
username: str = Field(min_length=3, max_length=64, pattern=r"^[A-Za-z0-9_.-]+$")
|
|
password: str = Field(min_length=8, max_length=128)
|
|
display_name: str = Field(min_length=1, max_length=64)
|
|
role_code: str = Field(default="operator", pattern=r"^(super_admin|dept_manager|operator)$")
|
|
|
|
|
|
class AdminUserUpdate(BaseModel):
|
|
password: str | None = Field(default=None, min_length=8, max_length=128)
|
|
display_name: str | None = Field(default=None, min_length=1, max_length=64)
|
|
role_code: str | None = Field(default=None, pattern=r"^(super_admin|dept_manager|operator)$")
|
|
is_active: bool | None = None
|
|
|
|
|
|
class QAGenerateRequest(BaseModel):
|
|
product_name: str = Field(default="", max_length=200)
|
|
category: str = Field(default="", max_length=100)
|
|
benefits: str = Field(default="", max_length=1000)
|
|
selling_points: str = Field(default="", max_length=2000)
|
|
language_style: str = Field(default="口语(亲切随性)", max_length=40)
|
|
target_group: str = Field(default="女性", max_length=100)
|
|
usage_scene: str = Field(default="居家", max_length=100)
|
|
purchase_channel: str = Field(default="电商平台", max_length=100)
|
|
question_count: int = Field(default=5, ge=1)
|
|
answers_per_question: int = Field(default=2, ge=1, le=50)
|
|
answer_requirement: str = Field(default="", max_length=1000)
|
|
reference_qa: str = Field(default="", max_length=20000)
|
|
seed_style: bool = True
|
|
|
|
|
|
class QABulkAnswerRequest(BaseModel):
|
|
product_name: str = Field(default="", max_length=200)
|
|
category: str = Field(default="", max_length=100)
|
|
benefits: str = Field(default="", max_length=1000)
|
|
selling_points: str = Field(default="", max_length=2000)
|
|
language_style: str = Field(default="口语(亲切随性)", max_length=40)
|
|
target_group: str = Field(default="女性", max_length=100)
|
|
usage_scene: str = Field(default="居家", max_length=100)
|
|
purchase_channel: str = Field(default="电商平台", max_length=100)
|
|
answers_per_question: int = Field(default=2, ge=1, le=20)
|
|
answer_requirement: str = Field(default="", max_length=1000)
|
|
seed_style: bool = True
|
|
questions: list[str] = Field(min_length=1, max_length=500)
|
|
|
|
|
|
class UserOut(BaseModel):
|
|
id: int
|
|
username: str
|
|
display_name: str
|
|
role_code: str
|
|
|
|
|
|
class LoginResponse(BaseModel):
|
|
success: bool = True
|
|
data: dict
|