2026-07-03 17:23:59 +08:00
|
|
|
|
# MVP 完整验收报告(T-402)
|
|
|
|
|
|
|
|
|
|
|
|
> 日期:2026-07-03
|
|
|
|
|
|
> 范围:按 [`02-requirements.md`](02-requirements.md) 的第一版 MVP / P0 验收标准验收。
|
|
|
|
|
|
> 结论:**P0 验收通过**。同一 119 条测试按验收域拆分运行全部通过;一次单条全量 `manage.py test` 曾因远程 MySQL 连接重置中断,已登记为测试环境稳定性问题。
|
|
|
|
|
|
|
|
|
|
|
|
## 验收矩阵
|
|
|
|
|
|
|
|
|
|
|
|
| P0 验收项 | 结论 | 主要证据 |
|
|
|
|
|
|
| --- | --- | --- |
|
2026-07-08 14:19:00 +08:00
|
|
|
|
| 用户注册 / 登录 | PASS | T-402 历史验收口径为 `apps.portal` 注册创建 0 点钱包且不写赠点流水;T-605 后注册为免邮箱验证、注册后可直接登录,邮箱仍必填且唯一。2026-07-08 新需求已登记为 T-608,后续需改为注册赠送 100 点并写 `signup_bonus` 流水 |
|
2026-07-03 17:23:59 +08:00
|
|
|
|
| API Key 自助管理 | PASS | `apps.portal`:Key 明文只显示一次、列表仅显示 prefix、删除为吊销、不可删除他人 Key;`apps.api`:缺失/无效 Key 为 401,吊销 Key 为 403 |
|
|
|
|
|
|
| 扫码充值 | PASS | `apps.portal` / `apps.api`:创建 pending 订单不直接加点、不写流水;二维码票据展示;状态轮询只允许本人订单;主动查单可补入账 |
|
|
|
|
|
|
| 个人中心 / 记录 | PASS | `apps.portal`:余额、充值总额、入账点数、消费/退款记录与实际订单/流水一致;充值记录和消费记录分页且仅见本人 |
|
|
|
|
|
|
| 生成标题 API | PASS | `apps.api`:有效 API Key + 合法 prompt 返回标题、扣点并写调用记录;缺失/无效 Key 返回 401 |
|
|
|
|
|
|
| 生成图片 API | PASS | `apps.api`:有效 API Key 返回图片 URL,图片结果不把 provider raw/base64 写入调用记录;上游错误和能力错误会退点 |
|
|
|
|
|
|
| 点数计费与扣减 | PASS | `apps.billing` / `apps.api`:按别名+分辨率计费,余额不足返回 402 且不调上游;并发扣点不超扣、不为负 |
|
|
|
|
|
|
| 余额查询 API | PASS | `apps.api`:余额响应与 `PointsLedger.points_delta` 累加一致;Web session 不能调用外部余额接口 |
|
|
|
|
|
|
| 充值转点数 | PASS | `apps.api` / `apps.billing`:微信/支付宝 mock 回调验签后幂等入账;重复回调只入账一次;签名失败或金额不一致不入账 |
|
|
|
|
|
|
| 调用记录 / 点数流水 | PASS | `apps.api` / `apps.billing`:成功、失败退点、充值、运营调整均写记录/流水;流水约束拒绝 0 变动、负余额和重复 refund/recharge |
|
|
|
|
|
|
| 运营后台 | PASS | `apps.users` / `apps.billing` / `apps.ai`:admin 可登录;用户、钱包、API Key、规则、汇率、订单、流水、调用记录、模型配置和审计均可管理/检索;API Key / AI key 脱敏;手工调点经计费层写 `adjust` 流水 |
|
|
|
|
|
|
| 可插拔模型 | PASS | `apps.ai` / `apps.billing`:`ModelAlias` 解析别名到当前 active `AiModel`;后台变更有审计;改别名指向后调用方别名不变,计费规则仍按别名生效 |
|
|
|
|
|
|
|
|
|
|
|
|
## 验证命令
|
|
|
|
|
|
|
|
|
|
|
|
- `./init.ps1`:通过。
|
|
|
|
|
|
- `py -3.12 manage.py check`:通过,0 issues。
|
|
|
|
|
|
- `py -3.12 manage.py makemigrations --check --dry-run`:通过,No changes detected。
|
|
|
|
|
|
- `py -3.12 manage.py test apps.portal --noinput --keepdb --verbosity 2`:通过,21 tests OK。
|
|
|
|
|
|
- `py -3.12 manage.py test apps.ai --noinput --keepdb --verbosity 2`:通过,26 tests OK。
|
|
|
|
|
|
- `py -3.12 manage.py test apps.api --noinput --keepdb --verbosity 2`:通过,39 tests OK。
|
|
|
|
|
|
- `py -3.12 manage.py test apps.billing apps.users --noinput --keepdb --verbosity 2`:通过,33 tests OK。
|
|
|
|
|
|
- `py -3.12 manage.py smoke_ai_generation title --recorded`:通过,录制标题 smoke OK。
|
|
|
|
|
|
- `py -3.12 manage.py smoke_ai_generation image --recorded`:通过,录制图片 smoke OK。
|
|
|
|
|
|
- `py -3.12 manage.py findstatic portal/vendor/bootstrap/bootstrap.min.css portal/vendor/qrcode/qrcode.js --verbosity 1`:通过,两个本地 static 文件均可找到。
|
|
|
|
|
|
- `py -3.12 -m compileall apps config`:通过。
|
|
|
|
|
|
- `git diff --check`:通过,仅 Windows CRLF 提示。
|
|
|
|
|
|
|
|
|
|
|
|
## 已知限制
|
|
|
|
|
|
|
|
|
|
|
|
- 一次单条 `py -3.12 manage.py test --noinput --keepdb --verbosity 2` 发现 119 tests,已运行 98 tests 后远程 MySQL 在 `apps.portal.tests.PortalAccountFlowTests.setUpClass` 阶段连接重置;已通过用例无断言失败。随后按 `portal` / `ai` / `api` / `billing+users` 四组拆分,合计同一 119 条测试全部通过。
|
|
|
|
|
|
- 测试阶段仍有 allauth `account.EmailAddress` 条件唯一约束在 MySQL 上不可创建的 `models.W036` 警告;本项目账号邮箱唯一性由 `user.email` 唯一约束承担。
|
|
|
|
|
|
- 真实微信/支付宝商户密钥、证书、生产 SDK 依赖和公网回调地址仍待提供;MVP 验收使用 mock 支付路径。
|
|
|
|
|
|
- 真实 AI 上游调用和图片同步真实耗时仍需配置 `AI_KEY_ENCRYPTION_KEY`、导入真实 AiModel/ModelAlias 后执行;部署超时口径已登记到 T-403。
|