Skip to content

feat: 支持 P1 Web 通知渠道一键测试 (#1200) - #1217

Closed
massif-01 wants to merge 3 commits into
ZhuLinsen:mainfrom
massif-01:fix/1200-notification-baseline
Closed

feat: 支持 P1 Web 通知渠道一键测试 (#1200)#1217
massif-01 wants to merge 3 commits into
ZhuLinsen:mainfrom
massif-01:fix/1200-notification-baseline

Conversation

@massif-01

Copy link
Copy Markdown
Collaborator

PR 类型

  • fix
  • feat
  • refactor
  • docs
  • chore
  • test

背景与问题

Issue #1200 的 P0 配置基线已通过 #1205 合入。本 PR 继续实现 P1:Web 设置页需要支持对单个通知渠道执行一键真实测试,测试应使用当前页面草稿值,不保存 .env,并返回成功/失败、耗时、错误摘要;自定义 Webhook 需要展示逐 URL attempts。

具体改动

  • 后端新增 POST /api/v1/system/config/notification/test-channel 与请求/响应 schema。
  • SystemConfigService.test_notification_channel() 中合成临时通知配置,并直接实例化目标 sender 发送测试消息。
  • 各通知 sender 增加测试路径可选 timeout_seconds 参数,默认发送行为保持不变。
  • 自定义 Webhook 增加 test_custom_webhooks(),按 URL 顺序返回 attempts。
  • Web 设置页通知分类新增 NotificationTestPanel,接入渠道选择、标题、正文、timeout、结果和 attempts 展示。
  • 补充后端/API/sender/Web 单元测试。
  • 更新 docs/notifications.mddocs/full-guide.mddocs/full-guide_EN.mddocs/CHANGELOG.md

关联 Issue

Refs #1200

验证命令与结果

git fetch upstream
git merge --autostash upstream/fix/1200-notification-baseline
npm ci
./scripts/ci_gate.sh
cd apps/dsa-web && npm run lint
cd apps/dsa-web && npm run build
cd apps/dsa-web && npm run test -- src/api/__tests__/systemConfig.test.ts src/components/settings/__tests__/NotificationTestPanel.test.tsx src/pages/__tests__/SettingsPage.test.tsx
git diff --check

关键输出/结论:

  • npm ci:执行成功;npm audit 报告依赖树中已有漏洞,但安装未失败。
  • ./scripts/ci_gate.sh1731 passed, 2 deselected, 47 warnings, 139 subtests passed,backend gate 全部通过。
  • npm run lint:通过。
  • npm run build:通过;Vite 仍提示既有的大 chunk warning。
  • npm run test -- ...3 passed (3)26 passed (26)
  • git diff --check:通过。

兼容性与风险

  • 向后兼容:不会重写或迁移现有 .env
  • 默认通知发送行为保持不变;sender 新增的 timeout 参数均为 keyword-only 可选参数,未传入时沿用既有默认值。
  • 新增 Web 测试只在用户显式点击测试按钮时发送真实外部通知。
  • 测试响应返回给 Web 前已统一脱敏;token、secret、password、Bearer、query 参数、URL userinfo 和疑似 path token 均会被 mask。
  • 剩余风险:第三方通知服务可能返回不同格式的 provider-specific 错误体,本期 P1 仅承诺通用错误摘要。

回滚方案

回滚本 PR 即可。该功能不持久化测试请求,也不重写现有 .env,因此无需配置 migration 或数据回滚。

EXTRACT_PROMPT 变更(如适用)

不适用。

展开:完整 EXTRACT_PROMPT
未修改。

检查清单

  • 本 PR 有明确动机和业务价值 / This PR has a clear motivation and value
  • 已提供可复现的验证命令与结果 / Reproducible verification commands and results are included
  • 已评估兼容性与风险 / Compatibility and risk have been assessed
  • 已提供回滚方案 / A rollback plan is provided
  • 若涉及用户可见变更,已同步更新相关文档与 docs/CHANGELOG.mdREADME.md 仅在首页级信息变化时更新,细节优先写入 docs/*.md / If user-visible changes are included, relevant docs and docs/CHANGELOG.md are updated; README.md is updated only for homepage-level changes, with details kept in docs/*.md

@github-actions

github-actions Bot commented May 6, 2026

Copy link
Copy Markdown

🤖 自动审查报告

项目 结果
📊 变更文件 30 个
➕ 新增行数 964 行
➖ 删除行数 96 行
🔍 静态检查 ✅ 通过
🧠 AI 审查 ✅ 已完成

📁 修改的文件

  • 📝 .env.example (+4/-0)
  • 📝 .github/workflows/daily_analysis.yml (+5/-0)
  • 📝 api/v1/endpoints/system_config.py (+46/-0)
  • 📝 api/v1/schemas/system_config.py (+50/-0)
  • 📝 apps/dsa-web/src/api/__tests__/systemConfig.test.ts (+50/-0)
  • 📝 apps/dsa-web/src/api/systemConfig.ts (+24/-0)
  • 🆕 apps/dsa-web/src/components/settings/NotificationTestPanel.tsx (+195/-0)
  • 🆕 apps/dsa-web/src/components/settings/__tests__/NotificationTestPanel.test.tsx (+60/-0)
  • 📝 apps/dsa-web/src/components/settings/index.ts (+1/-0)
  • 📝 apps/dsa-web/src/pages/SettingsPage.tsx (+8/-0)
  • 📝 apps/dsa-web/src/pages/__tests__/SettingsPage.test.tsx (+34/-1)
  • 📝 apps/dsa-web/src/types/systemConfig.ts (+44/-0)
  • 📝 docs/CHANGELOG.md (+2/-0)
  • 📝 docs/full-guide.md (+11/-1)
  • 📝 docs/full-guide_EN.md (+11/-1)
  • 🆕 docs/notifications.md (+68/-0)
  • 📝 main.py (+17/-0)
  • 📝 src/config.py (+1/-0)
  • 📝 src/core/config_registry.py (+31/-0)
  • 📝 src/notification.py (+64/-37)

... 还有 10 个文件


🧠 AI 代码审查意见

结论

Ready to Merge

结构化审查结果

  • 必要性
  • 关联性
    • 通过。PR 描述中明确关联了 Refs #1200,证据充分。
  • 类型
    • 匹配 feat。本次变更引入了全新的用户可见功能(通知渠道测试),符合 feat 类型定义。
  • 描述完整性
    • 完整。PR 描述包含了所有要求的信息:背景与问题、具体改动(涵盖后端、前端、测试、文档)、详细的验证命令与结果(包括 ci_gate.sh 的执行情况)、兼容性与风险评估、回滚方案,且检查清单全部勾选。特别值得称赞的是,对 CI 检查状态和 ./scripts/ci_gate.sh 的执行情况提供了详细的说明,符合审查要求。
  • 风险级别
      • 关键风险:描述中已提及第三方通知服务可能返回不同格式的错误体,本期 P1 仅承诺通用错误摘要。这是可接受的短期限制,且已明确。
      • 缓解措施
        • 新增功能不重写或迁移现有 .env 文件。
        • 默认通知发送行为保持不变,新增参数为可选且不影响现有调用。
        • Web 测试只在用户显式点击时发送,避免意外。
        • 测试响应在返回 Web 前已进行统一脱敏,增强了安全性。
        • 提供了清晰的回滚方案。
  • 必改项
    • 。基于现有信息和 diff,未发现阻断合入的问题。
  • 建议项
    • 。PR 描述和代码质量(基于可见 diff)都非常高,没有发现需要进一步建议的点。

详细审查意见

本次 PR 的质量非常高,从描述到代码实现细节都考虑得非常周全。

  • 后端 API 设计POST /api/v1/system/config/notification/test-channel 及其请求/响应 schema 设计合理,NotificationTestAttempt 提供了详细的尝试结果,对于自定义 Webhook 等多目标场景尤为重要。
  • 前端实现NotificationTestPanel.tsx 组件功能完整,状态管理清晰,UI 友好,能够展示详细的测试结果和错误信息。前端 API 层的 snake_case <-> camelCase 转换也处理得当。
  • 测试覆盖:PR 描述和文件列表都表明新增了大量的单元测试,包括后端 API、服务层、各 sender 以及前端组件,这极大保障了新功能的健壮性。
  • 文档同步:明确提及更新了 docs/CHANGELOG.md 及其他相关文档,确保了用户可见变更的记录和说明。
  • 兼容性和安全性:对向后兼容、默认行为、用户显式操作和敏感信息脱敏的考虑,体现了良好的工程实践。

整体而言,这是一个准备充分、实现高质量的 PR。


💡 提示: 请确保代码已通过本地测试,并遵循项目代码规范。

@massif-01

Copy link
Copy Markdown
Collaborator Author

已用从 upstream/main 新建的 P1 专用分支重开:#1218。关闭这个旧 draft PR,避免保留冲突 head。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants