98 lines
3.8 KiB
Python
98 lines
3.8 KiB
Python
from pydantic import BaseModel, Field
|
|
from pydantic import field_validator
|
|
from decimal import Decimal
|
|
|
|
|
|
class RefundPaymentAccountSave(BaseModel):
|
|
name: str = Field(min_length=1, max_length=128)
|
|
alipay_account: str = Field(min_length=1, max_length=128)
|
|
balance: Decimal = Field(ge=0, le=9999999.99, decimal_places=2, allow_inf_nan=False)
|
|
single_limit: Decimal = Field(gt=0, le=9999999.99, decimal_places=2, allow_inf_nan=False)
|
|
is_active: bool = True
|
|
|
|
@field_validator("name", "alipay_account", mode="before")
|
|
@classmethod
|
|
def strip_text(cls, value):
|
|
return value.strip() if isinstance(value, str) else value
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str = Field(min_length=1, max_length=64)
|
|
password: str = Field(min_length=1, max_length=128)
|
|
|
|
|
|
class PaymentAccountAuthorization(BaseModel):
|
|
account_id: int | None = Field(..., gt=0, strict=True)
|
|
|
|
|
|
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 AdminDingTalkUserLookup(BaseModel):
|
|
identifier: str = Field(min_length=1, max_length=128)
|
|
|
|
|
|
class AdminDingTalkUserCreate(BaseModel):
|
|
identifier: str = Field(min_length=1, max_length=128)
|
|
role_code: str | None = Field(default=None, 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
|