# 问题跟踪 — CFC API 测试
## 阻塞项 (必须修复才能编译/测试)
### ISSUE-010: FamilyMemberService 未同步 AddFamilyMemberDTO 辈分重构
| 属性 | 值 |
|------|-----|
| **状态** | ✅ 已修复 |
| **首次发现** | v13 (2026/7/8) |
| **修复版本** | `1cbefa5`(2026-07-08 远程) |
| **严重级别** | 已关闭 |
| **现象** | `FamilyMemberService.java` 编译失败 (7 errors),全部 DTO 方法引用错误 |
| **根因** | AddFamilyMemberDTO 已拆分为 `relativeMemberId` + `generationLevel` + `peerType` 三个新字段,移除了 `relationshipType` 字段。但 FamilyMemberService.addMember() 仍使用 `dto.getRelationshipType()`。同时也影响到 `listMembers()` 和 `toFamilyMemberVO()` 方法 |
| **受影响行** | 第 55, 71, 74, 92 行 (`dto.getRelationshipType()`) |
| **影响** | ❌ 整个后端无法编译,所有 JUnit 测试和 API 测试阻塞 |
| **修复** | 远程 commit `1cbefa5` 已修复 FamilyMemberService 兼容新 DTO |
### ISSUE-013: E2E 测试路由路径错误(已修复)
| 属性 | 值 |
|------|-----|
| **状态** | ✅ 已修复 |
| **首次发现** | v14 (2026/7/14) |
| **修复版本** | `temp-push` (本地修复,待推送) |
| **严重级别** | 高 |
| **现象** | 新建的 E2E 测试文件使用错误的 uni-app 路由路径,导致所有新测试在第一步页面加载时返回 404 Whitelabel Error Page |
| **根因** | 测试文件使用 `pages/mind/report-upload`、`pages/wisdom/report-upload`、`pages/health/report-detail`、`pages/growth/tasks` 等不存在的路由 |
| **正确路由来源** | `cfc-frontend/pages.json` — 实际路由为 subpackage 形式 |
| **受影响文件** | `dan-report-flow.spec.js`、`flora-microbiome-flow.spec.js`、`ai-plan-task-flow.spec.js` |
| **路由修正对照表** | |
| 错误路由 | 正确路由 |
| `pages/mind/report-upload` | `pages/dan-assessment/report-upload` |
| `pages/wisdom/report-upload` | `pages/dan-assessment/report-upload` |
| `pages/health/report-detail` | `pages/health/report-list` |
| `pages/growth/tasks` | `pages/tasks/tasks` |
| **影响** | ⚠️ 新建测试 100% 在第一步失败,无法验证任何功能 |
| **修复** | 将所有错误路由替换为正确路由 |
### ISSUE-014: E2E 测试 CSS 选择器可能不匹配实际页面元素
| 属性 | 值 |
|------|-----|
| **状态** | 🔴 部分失败 |
| **首次发现** | v14 (2026/7/14) |
| **严重级别** | 中 |
| **现象** | 路由修复后,dan-report-flow.spec.js 和 flora-microbiome-flow.spec.js 仍有 4 个测试场景失败(16/20 通过)。错误信息:元素选择器 `.upload-area, .file-upload, .report-form` 等找不到 |
| **根因分析** | 1. uni-app 编译后 CSS 类名可能与设计稿不同 2. 页面可能使用 uView/WeUI 等组件库,类名不同 3. subpackage 页面首次加载时 WebView 需要初始化 |
| **受影响页面** | `pages/dan-assessment/report-upload`(DAN 报告上传)、`pages/health/report-upload`(健康报告上传) |
| **建议** | 需要人工验证页面实际 CSS 类名,或使用 `text=` 等更稳定的定位方式 |
## 待解决问题
### ISSUE-011: schema.sql 未同步 migration 36-37 (generation/is_spouse)
| 属性 | 值 |
|------|-----|
| **状态** | 🟡 待修复 |
| **首次发现** | v13 (2026/7/8) |
| **严重级别** | 低 |
| **现象** | `schema.sql` 中 `family_members` 的 CREATE TABLE 语句缺少 `generation` 和 `is_spouse` 列定义 |
| **根因** | Migration 36-37 通过 `ensureColumn` 添加了列,但未按 AGENTS.md 规定同步更新 schema.sql |
| **影响** | ⚠️ 重新建库时会导致列缺失(迁移可重复执行所以生产无影响) |
| **建议** | 在 `family_members` CREATE TABLE 中添加 `generation INT COMMENT '辈分值'` 和 `is_spouse TINYINT(1) DEFAULT 0 COMMENT '是否配偶'` |
### ISSUE-012: FamilyMemberVO 缺少 isSpouse 字段
| 属性 | 值 |
|------|-----|
| **状态** | 🔵 待确认 |
| **首次发现** | v13 (2026/7/8) |
| **严重级别** | 低 |
| **现象** | `FamilyMember` 实体有 `generation` + `isSpouse` 字段,但 `FamilyMemberVO` 只有 `generation` 字段 |
| **可能原因** | 前端可能通过 `generation=0 && relationshipType=spouse` 推断配偶关系,或 `isSpouse` 尚未在前端使用 |
| **建议** | 确认前端是否需要单独的 `isSpouse` 布尔字段;若需则在 VO 中添加 |
### ISSUE-007: SupplySystem 创建返回 500
| 属性 | 值 |
|------|-----|
| **状态** | 🔴 待修复 |
| **首次发现** | v12 (2026/7/7) |
| **严重级别** | 中 |
| **现象** | `/api/admin/supply-system/create` 返回 500 Internal Server Error |
| **可能原因** | 数据库 `supply_system` 表可能不存在(迁移 33 未在生产环境执行)或字段映射问题 |
| **建议** | 确认数据库是否有 supply_system 表,执行 `SELECT * FROM supply_system LIMIT 1` 验证 |
### ISSUE-008: 食材管理 /foods/list 返回 500
| 属性 | 值 |
|------|-----|
| **状态** | 🔴 待修复 |
| **首次发现** | v12 (2026/7/7) |
| **严重级别** | 中 |
| **现象** | `/api/admin/foods/list` 返回 500 Internal Server Error |
| **影响** | Web 管理端饮食管理页面无法加载食材列表 |
### ISSUE-009: 食材详情返回格式错误(导致后续用例连锁失败)
| 属性 | 值 |
|------|-----|
| **状态** | 🔴 待修复 |
| **首次发现** | v12 (2026/7/7) |
| **严重级别** | 中 |
| **现象** | `/api/admin/foods/detail` 返回 200 但 data 是逗号字符串而非 JSON 对象。错误消息:`For input string: "{id=4, name=TestFood_..., ...}"` |
| **根因** | `AdminFoodController.detail()` 返回的 DTO 被当作字符串处理,或序列化问题 |
| **影响** | FOOD-03~06 后续用例全部失败(依赖 detail 返回的正确 id) |
### INFO-GA: Guide activity list 返回 500
| 属性 | 值 |
|------|-----|
| **状态** | ℹ️ 数据依赖 — 非代码缺陷 |
| **首次发现** | v9 |
| **最近验证** | v10 (2026/7/4) |
| **严重级别** | 低 |
| **现象** | `/api/guide/activities/list` 返回 500 |
| **根因分析** | `GuideActivityController.getActivityList()` 代码逻辑正确(`@PostMapping`、null安全参数)。`GuideActivityMapper` 使用 `@Select` 注解直接查询 `guide_activities` 表。500 由以下原因引起:
1. 测试用户无 `role=teacher` 或 guide 身份
2. 数据库中 `guide_activities` 表缺少测试数据 |
| **结论** | 非代码缺陷,需在测试环境中:1) 创建 guide 测试账号 2) 插入 guide_activities 测试数据 |
## 已知问题(低优先级)
| ID | 问题 | 状态 | 备注 |
|----|------|------|------|
| AUTO-TAG-02 | Tags 字段在 article detail 返回 null | ℹ️ 前端计算 | 不是 bug,只是 API 不返回该字段 |
| ISSUE-011 | schema.sql 未同步 migration 36-37 | 🟡 待修复 | DDL 一致性 |
| ISSUE-012 | FamilyMemberVO 缺少 isSpouse | 🔵 待确认 | 需确认前端需求 |
## 已关闭问题
| ID | 问题 | 修复版本 | 关闭时间 |
|----|------|---------|---------|
| ISSUE-001 | Vendor 登录失败 — 验证码旁路 | v11 | 2026/7/6 |
| ISSUE-002 | Article publish 500 错误 | v10 | 2026/7/4 |
| ISSUE-003 | submit-for-review 路由 404(测试路径错误,非 API 缺陷)| v12 | 2026/7/7 |
| ISSUE-006 | Article workflow 测试路径错误(API 正常,v11_test.js 路径错误)| v12 | 2026/7/7 |
| NEW-02 | SKU list NPE | v10 (c0afe7e) | 2026/7/6 |
| FRONTEND-01 | 商城 '更多' 按钮无法跳转 | v11 | 2026/7/7 |
| FRONTEND-02 | 过渡页显示时间过长 (5s→2s) | v11 | 2026/7/7 |
| FRONTEND-03 | 智页面推荐阅读 '更多' 导航到未注册路由 | v11 | 2026/7/7 |
| FRONTEND-04 | 行页面缺少推荐阅读 (relatedDimensions JSON 解析) | v11 | 2026/7/7 |
| FRONTEND-05 | 行页面移除孩子管理快捷操作组件 | v11 | 2026/7/7 |
---
*最后更新: 2026-07-14 (v14 — E2E 测试路由修复 + 20 新场景)*
---
## 测试结果摘要 v14
**日期**: 2026-07-14
**分支**: `temp-push` → `origin/cfclub`
**测试目标**: http://cfc.iwintrue.com (生产环境)
**测试框架**: Playwright 1.40 + Chromium (headless)
### 14.1 新建 E2E 测试文件(3 个)
| 文件 | 场景数 | 通过 | 失败 | 说明 |
|------|--------|------|------|------|
| `dan-report-flow.spec.js` | 7 | 7 | 0 | ✅ 全部通过(路由修复后) |
| `flora-microbiome-flow.spec.js` | 6 | 5 | 1 | ⚠️ 1 场景 CSS 选择器问题 |
| `ai-plan-task-flow.spec.js` | 7 | 4 | 3 | 🔴 AI 页面需登录态,CSS 选择器待优化 |
### 14.2 路由修复详情
| 测试文件 | 原错误路由 | 正确路由 | 修复状态 |
|----------|-----------|---------|---------|
| dan-report-flow.spec.js | `pages/mind/report-upload` | `pages/dan-assessment/report-upload` | ✅ 已修复 |
| dan-report-flow.spec.js | `pages/wisdom/report-upload` | `pages/dan-assessment/report-upload` | ✅ 已修复 |
| flora-microbiome-flow.spec.js | `pages/health/report-detail` | `pages/health/report-list` | ✅ 已修复 |
| ai-plan-task-flow.spec.js | `pages/growth/tasks` | `pages/tasks/tasks` | ✅ 已修复 |
### 14.3 路由来源(cfc-frontend/pages.json)
关键路由(供参考,后续测试建设必读):
- `pages/dan-assessment/report-upload` — DAN 报告上传("DAN 报告上传")
- `pages/health/report-upload` — 健康报告上传("上传健康报告")
- `pages/health/report-list` — 健康报告列表("健康报告")
- `pages/health/gut-index` — 肠道菌群("菌群")
- `pages/ai/chat` — AI 家庭助手("AI 家庭助手")
- `pages/tasks/tasks` — 任务列表("任务列表")
- `pages/tasks/daily-tasks` — 每日任务("每日任务")
- `pages/growth/index` — 成长档案("成长档案")
- `pages/growth/assessment-result` — 测评报告("测评报告")
- `pages/body-detail/health-report` — 健康报告详情("健康报告详情")
- `pages/assessment/upload-report` — 测评报告上传("上传测评报告")