refactor: schemas 抽取(DTO 从 models.py 与路由内联迁至 api/schemas/)

- 新建 api/schemas/:auth/agents/admin/ecosystem/investor/opc/operator/org/portals
- models.py 移除 15 个 Pydantic DTO(保留 ORM 数据模型层)
- 13 个路由内联 DTO 全部迁出,路由瘦身仅剩处理逻辑
- 全量 66 测试通过
This commit is contained in:
2026-08-24 09:51:52 +08:00
parent 2c737478dc
commit 01ef3c9637
20 changed files with 369 additions and 340 deletions
-165
View File
@@ -576,168 +576,3 @@ class UserIdentity(Base):
status: Mapped[str] = mapped_column(String, default="active") # active | disabled
created_at: Mapped[str] = mapped_column(String, default="")
updated_at: Mapped[str] = mapped_column(String, default="")
# ===========================================================================
# Pydantic 请求/响应模型
# ===========================================================================
class LoginRequest(BaseModel):
username: str
password: str
expires_in: int | None = Field(
default=None,
description="令牌有效期(秒),-1/0 表示永久,省略为 7 天",
)
class RegisterRequest(BaseModel):
username: str
password: str
expires_in: int | None = Field(
default=None,
description="令牌有效期(秒),-1/0 表示永久,省略为 7 天",
)
class UpdateProfileRequest(BaseModel):
"""更新资料/凭据。``current_password`` 仅在修改用户名/密码时校验。"""
current_password: str = ""
new_username: str | None = None
new_password: str | None = None
expires_in: int | None = None
# 演示用户资料字段(账户管理页可编辑)
nickname: str | None = None
account: str | None = None
company: str | None = None
room: str | None = None
avatar: str | None = None
company_avatar: str | None = None
class RevokeTokenRequest(BaseModel):
token: str | None = Field(
default=None,
description="要吊销的令牌;省略则吊销当前令牌",
)
class AgentCreate(BaseModel):
"""创建智能体身份。"""
name: str
description: str = ""
language: str = "zh"
model_name: str = ""
class AgentUpdate(BaseModel):
"""更新智能体身份字段(可空字段,仅提交需要变更的项)。"""
name: str | None = None
description: str | None = None
language: str | None = None
model_name: str | None = None
use_fixed_soul: bool | None = None
class AgentInfo(BaseModel):
"""智能体身份记录(按用户隔离)。
- ``deletable``:是否允许删除(默认智能体由服务端保护为不可删)。
- ``use_fixed_soul``:该智能体是否**必须**使用服务端托管、最高优先级的
``fixed_soul`` 不可变段(否则忽略)。
"""
id: str
user_id: str
port: str = "opc"
name: str
description: str = ""
language: str = "zh"
model_name: str = ""
created_at: str = ""
updated_at: str = ""
deletable: bool = True
use_fixed_soul: bool = False
class AuthStatusResponse(BaseModel):
enabled: bool
has_users: bool
class VerifyResponse(BaseModel):
valid: bool
username: str = ""
class UserProfile(BaseModel):
"""用户资料(登录/me/update-profile 均返回该结构)。"""
username: str = ""
nickname: str = ""
account: str = ""
company: str = ""
room: str = ""
avatar: str = ""
company_avatar: str = ""
# RBAC(登录/me 返回;update-profile 不重签时不返回权限明细)
role: str = "opc_member"
sub_role: str | None = None
org_id: str | None = None
region_id: str | None = None
permissions: list[str] = Field(default_factory=list)
scope_region_ids: list[str] = Field(default_factory=list)
# 当前生效的端口身份(多身份绑定)
identity_id: str | None = None
port: str | None = None
identity_name: str = ""
class LoginResponse(UserProfile):
"""登录/注册成功后的响应:资料 + 新令牌。"""
token: str = ""
identities: list[IdentityInfo] = Field(default_factory=list)
class ProfileResponse(UserProfile):
"""update-profile 成功后的响应;修改凭据时附带新令牌。"""
token: str = ""
identities: list[IdentityInfo] = Field(default_factory=list)
class IdentityInfo(BaseModel):
"""账号绑定的一端口身份摘要(登录/选择身份时返回)。"""
id: str
port: str = "opc"
role: str = "opc_member"
sub_role: str | None = None
name: str = ""
org_id: str | None = None
region_id: str | None = None
org_name: str | None = None
region_name: str | None = None
status: str = "active"
class SelectIdentityRequest(BaseModel):
"""切换到指定端口身份:为新身份签发令牌。"""
identity_id: str
# RBAC 管理请求/响应
class SetUserRoleRequest(BaseModel):
role: str
sub_role: str | None = None
org_id: str | None = None
region_id: str | None = None
class SetUserStatusRequest(BaseModel):
status: str = "active" # active | disabled