本次提交包含多项代码优化与规范修正: 1. 文档与注释优化:修正注释术语、补充注解与FR编号 2. 代码格式调整:统一空格、换行与缩进规范 3. 类型与接口完善:补充__all__导出、修正返回类型注解 4. 错误处理增强:新增领域错误类与校验逻辑 5. 依赖与导入调整:修复路径引用、统一时区导入 6. 协议与契约更新:完善接口文档与一致性注解
50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
"""凭据落库结果 DTO。
|
||
|
||
供扫码登录 finalize 阶段返回,统一携带最终落库的渠道账户、onboarding
|
||
状态与失败原因,供应用层驱动后续 onboarding 流转与控制面响应
|
||
(渠道账号运营流程优化 Task 1 契约层扩展)。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from dataclasses import dataclass
|
||
|
||
from yuxi.channels.contract.dtos.channel import ChannelAccount, OnboardingStatus
|
||
from yuxi.channels.contract.errors import ValidationError
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class FinalizeResult:
|
||
"""扫码登录 finalize 结果。
|
||
|
||
描述扫码登录凭据落库(finalize)阶段的返回结果,携带最终落库的
|
||
渠道账户与 onboarding 状态,供应用层决定下一步 onboarding 流转
|
||
(如触发配置校验、连接测试或直接置为 ACTIVE)。
|
||
|
||
字段:
|
||
account: 已落库的渠道账户(``ChannelAccount``)。成功时携带
|
||
加密后的配置;失败时仍可能携带已创建的占位账户以便上游
|
||
重试或清理。
|
||
onboarding_status: 账户 onboarding 状态(``OnboardingStatus``)。
|
||
成功落库通常为 ``CONFIGURED`` 或 ``VERIFIED``;接入失败为
|
||
``FAILED``。``StrEnum`` 兼容 JSON 序列化,可直接用于控制面
|
||
响应与持久化层字符串字段。
|
||
failure_reason: 失败原因(失败时填充,成功时为 ``None``)。
|
||
|
||
关联约束:INV-8(必填字段在 ``__post_init__`` 中校验,端口 @pre)。
|
||
"""
|
||
|
||
account: ChannelAccount
|
||
onboarding_status: OnboardingStatus
|
||
failure_reason: str | None = None
|
||
|
||
def __post_init__(self) -> None:
|
||
"""校验 ``account`` 不可为 ``None``(INV-8 / 端口 @pre)。
|
||
|
||
``account`` 为 finalize 流程的核心载体,``None`` 表示上游未
|
||
正确构造账户对象,在契约层即拦截,避免空值流入应用层
|
||
onboarding 管道后才暴露。
|
||
"""
|
||
if self.account is None:
|
||
raise ValidationError("account", "must not be None")
|