"""用户 Schemas — 对接 MOM sys_user 表 + 双 Token""" from pydantic import BaseModel, Field class LoginRequest(BaseModel): username: str = Field(..., max_length=64) password: str = Field(..., max_length=128) class DataScopeInfo(BaseModel): """业务分组数据范围 —— 供前端展示「我为什么只看到这些」。 空范围(is_empty)必须让用户看得见,否则他会以为系统坏了: 列表全空却没有任何提示,是最难排查的一类反馈。 """ is_unrestricted: bool = False # True = 全厂(超管 / 未分组主管) is_empty: bool = False # True = 未分组,看不到任何数据 phases: list[str] = [] # 原始阶段码,如 ["PRODUCTION"] phase_labels: list[str] = [] # 中文标签 —— 服务端下发,避免前端再抄一份词表 groups: list[str] = [] # 所属组的显示名 is_leader: bool = False # 是否至少是一个组的组长 reason: str = "" # super_admin / grouped / supervisor_default / ungrouped class UserResponse(BaseModel): id: str username: str display_name: str role: str is_active: bool = True created_at: str | None = None # 业务分组数据范围。只有 /auth/me 会填(登录接口不查库),故为可选, # 老的客户端读不到这个字段也不受影响。 scope: DataScopeInfo | None = None model_config = {"from_attributes": True} class LoginResponse(BaseModel): access_token: str refresh_token: str token_type: str = "bearer" user: UserResponse class RefreshRequest(BaseModel): refresh_token: str = Field(..., description="Refresh Token") class RefreshResponse(BaseModel): access_token: str token_type: str = "bearer"