Files
cmautobuy/docs/task/222-Admin修复AI服务商配置新增后未落库.md
T
2026-08-14 11:05:24 +08:00

3.4 KiB

222 Admin:修复 AI 服务商配置新增后未落库

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#199 / AI规格批量匹配
  • 状态:已完成,待用户验收
  • 日期:2026-08-14
  • Gitea 工单:#222

背景与目标

管理员在“AI 配置”提交合法服务商信息后,页面执行正常的 303 See Other 跳转,但新增 配置没有落库,因而无法继续保存 API Key、测试连接和启用。目标是恢复新增流程,并让默认 测试在不依赖真实 MySQL 时也能捕获 SQL 参数数量错误。

最终方案

InsertAIProvider 的字段列表在两个固定值后只剩创建人、更新人、创建时间和更新时间四个 字段,原 SQL 却提供了五个尾部占位符。现已把尾部占位符改为四个,使总计 11 个占位符与 11 个实参逐项对应。

新增轻量假 Execer 测试,在默认测试环境核对占位符数量、参数数量、参数顺序以及固定的 enabled=0、last_test_status='pending'。另增加 MySQL 集成用例验证新增、列表回显、 create 审计、重名拒绝和失败事务一致性,并增加 Web 测试区分成功/校验失败的 303 跳转与 数据库异常的 500 响应。

本次没有数据库结构变化,不增加迁移,也不改变 API Key 的独立密钥存储流程。此前失败的 新增请求没有成功提交,不需要清理数据。

改了哪些

  • admin/repository/ai_config.go:修正新增配置 INSERT 占位符数量。
  • admin/repository/ai_config_test.go:增加无需数据库的 SQL 参数契约测试。
  • admin/service/ai_config_test.go:增加真实 MySQL 新增、审计、查询、重名和事务测试。
  • admin/handler/web/ai_config_test.go:增加 303 成功/错误参数、500 数据库异常以及真实 MySQL 页面提交后的列表回显测试。

验收结果

验收标准 结果
合法配置可以执行参数数量正确的 INSERT,跳转后可由列表查询 通过;真实 MySQL 项已编写但当前环境跳过
默认测试保护占位符数量和字段参数顺序 通过
配置与 create 审计同事务,失败不留半条数据 通过;真实 MySQL 项已编写但当前环境跳过
重名和非法输入不新增并给出明确错误 通过;重名真实 MySQL项当前环境跳过
成功 303 使用 msg,校验失败使用 error,数据库异常返回 500 通过
不改 schema 和 API Key 独立保存流程 通过
固定 Go 1.23.0 的 build、test、vet 通过

测试

  • 执行的命令:
    • go test ./repository ./service ./handler/web -run 'Test(InsertAIProvider|SaveAIProviderConfig|RedirectAIConfig|AIConfigSave_)' -count=1 -v
    • $env:GOTOOLCHAIN='go1.23.0'; go build ./...; go test ./... -count=1; go vet ./...
    • git diff --check
  • 结果:默认 SQL 契约和 Web 回归测试通过;固定 Go 1.23.0 的完整构建、测试和 vet 通过。 MySQL 专项用例被测试套件发现,并在未设置测试库开关时明确跳过。
  • 没验证到的部分:当前环境没有启用 CMAUTOBUY_MYSQL_TEST=1 的独立 MySQL 8.4 _test 基础库,因此没有实际执行新增、审计和列表回显集成用例;没有使用生产库代替。 未在用户当前浏览器中重新提交表单进行人工验收。

相关提交

  • 01469f7 fix: 修复 AI 服务商配置新增失败 (#222)