Browse Source

📝 docs(epic-006): 创建故事4并更新编码标准文档

- 创建故事006.004:商品API父子商品支持优化
- 更新architecture/coding-standards.md中的测试目录描述
  - 从`__tests__`修正为`tests`文件夹
  - 添加实际示例说明
  - 更新版本信息到2.5

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 tháng trước cách đây
mục cha
commit
50e61a6262

+ 2 - 1
docs/architecture/coding-standards.md

@@ -3,6 +3,7 @@
 ## 版本信息
 | 版本 | 日期 | 描述 | 作者 |
 |------|------|------|------|
+| 2.5 | 2025-12-12 | 修正测试目录描述,从 `__tests__` 更新为 `tests` | Bob (Scrum Master) |
 | 2.4 | 2025-09-20 | 与主架构文档版本一致 | Winston |
 
 ## 现有标准合规性
@@ -13,7 +14,7 @@
 
 ## 增强特定标准
 - **测试框架**: 使用Vitest + Testing Library + hono/testing + Playwright
-- **测试位置**: `__tests__` 文件夹与源码并列
+- **测试位置**: `tests` 文件夹与源码并列(例如:`packages/goods-module-mt/tests/` 与 `packages/goods-module-mt/src/` 并列)
 - **覆盖率目标**: 核心业务逻辑 > 80%
 - **测试类型**: 单元测试、集成测试、E2E测试
 

+ 160 - 0
docs/stories/006.004.goods-api-parent-child-support-optimization.story.md

@@ -0,0 +1,160 @@
+# Story 006.004: 商品API父子商品支持优化
+
+## Status
+Draft
+
+## Story
+**As a** 商品管理员和普通用户
+**I want** 商品API能正确处理父子商品关系,提供优化的查询性能和清晰的父子关系展示
+**so that** 管理员能有效管理父子商品,用户能获得正确的商品信息,系统性能良好
+
+## Acceptance Criteria
+1. 商品详情API:根据商品类型返回相应数据(父商品+子商品列表或子商品+父商品信息)
+2. 管理员商品API:增强父子商品关系展示和查询优化,**不默认过滤父商品**(管理员需要完整视图)
+3. 商品列表查询性能优化
+4. 添加spuId查询参数支持,管理员可通过`spuId=0`过滤只显示父商品
+5. **管理员商品管理列表页面调整**:
+   - 在商品列表页面添加父子商品关系展示(如显示"父商品"、"子商品"标签)
+   - 添加"只显示父商品"筛选选项,使用spuId=0参数过滤
+   - 优化父子商品关系的可视化展示,便于管理员识别和管理
+
+## Tasks / Subtasks
+- [ ] 优化商品详情API,支持父子商品信息返回 (AC: 1)
+  - [ ] 修改商品详情查询逻辑,根据商品类型返回相应数据
+  - [ ] 父商品详情:返回商品详情 + 子商品列表(作为规格选项)
+  - [ ] 子商品详情:返回子商品详情 + 父商品基本信息
+  - [ ] 保持API向后兼容性
+- [ ] 增强管理员商品API查询功能 (AC: 2, 4)
+  - [ ] 移除管理员商品列表的默认spuId过滤(保持完整视图)
+  - [ ] 添加spuId查询参数支持,支持spuId=0过滤只显示父商品
+  - [ ] 添加spuId查询参数支持,支持spuId>0过滤显示指定父商品的子商品
+  - [ ] 优化查询性能,添加适当的数据库索引
+- [ ] 优化商品列表查询性能 (AC: 3)
+  - [ ] 分析现有查询性能瓶颈
+  - [ ] 优化数据库查询语句,减少不必要的关联查询
+  - [ ] 添加spuId字段的数据库索引(如果不存在)
+  - [ ] 确保多租户查询性能良好
+- [ ] 增强管理员商品管理列表页面 (AC: 5)
+  - [ ] 在商品列表表格中添加父子关系展示列
+  - [ ] 添加"父商品"、"子商品"标签或图标标识
+  - [ ] 添加"只显示父商品"筛选选项,调用API时传递spuId=0参数
+  - [ ] 优化父子商品关系的可视化展示
+  - [ ] 保持现有UI功能不变,仅增强展示和筛选
+- [ ] 添加单元测试和集成测试 (AC: 1-5)
+  - [ ] 为商品详情API添加测试,验证父子商品信息返回
+  - [ ] 为管理员商品API添加测试,验证spuId查询参数功能
+  - [ ] 为商品列表查询性能添加测试
+  - [ ] 更新现有测试,确保向后兼容性
+  - [ ] 添加前端组件测试,验证父子关系展示和筛选功能
+
+## Dev Notes
+
+### 技术栈信息 [Source: architecture/tech-stack.md]
+- **后端框架**: Hono 4.8.5 + TypeScript
+- **数据库**: PostgreSQL 17 + TypeORM 0.3.25
+- **验证**: Zod schema验证
+- **API设计**: RESTful API,使用通用CRUD服务
+- **多租户支持**: 租户ID字段过滤,数据隔离
+
+### 源码树信息 [Source: architecture/source-tree.md]
+- **商品模块包**: `packages/goods-module-mt/` - 多租户商品管理模块
+- **商品管理UI包**: `packages/goods-management-ui-mt/` - 多租户商品管理界面
+- **API路由位置**: `packages/goods-module-mt/src/routes/`
+- **实体位置**: `packages/goods-module-mt/src/entities/goods.entity.mt.ts`
+- **Schema位置**: `packages/goods-module-mt/src/schemas/`
+- **前端组件位置**: `packages/goods-management-ui-mt/src/components/GoodsManagement.tsx`
+
+### 数据模型信息 [Source: architecture/data-model-schema-changes.md]
+- **商品实体字段**:
+  - `spuId`: number - 主商品ID,0表示父商品或单规格商品,>0表示子商品
+  - `spuName`: string | null - 主商品名称
+  - `tenantId`: number - 租户ID,用于多租户数据隔离
+  - `state`: number - 状态(1可用,2不可用)
+- **父子商品关系**: 通过spuId字段建立父子关系,子商品的spuId指向父商品的id
+
+### API信息
+- **公共商品列表API**: `publicGoodsRoutesMt` - 默认只返回父商品(spuId=0)[Source: packages/goods-module-mt/src/routes/public-goods-routes.mt.ts:34]
+- **管理员商品列表API**: `adminGoodsRoutesMt` - 无默认过滤,显示所有商品 [Source: packages/goods-module-mt/src/routes/admin-goods-routes.mt.ts]
+- **获取子商品列表API**: `GET /api/v1/goods/{id}/children` - 已实现 [Source: packages/goods-module-mt/src/routes/public-goods-children.mt.ts]
+- **API聚合**: 通过`admin-goods-aggregated.mt.ts`聚合基础CRUD和父子商品管理路由
+
+### 现有组件分析
+- **`GoodsManagement.tsx`当前状态**:
+  - 显示商品列表表格,包含基本商品信息
+  - 支持搜索、分页、创建、编辑、删除功能
+  - 集成父子商品管理面板(`GoodsParentChildPanel`)
+  - **缺失功能**: 父子关系展示列、"只显示父商品"筛选选项
+- **`publicGoodsRoutesMt`当前状态**:
+  - 默认过滤:`defaultFilters: { state: 1, spuId: 0 }`
+  - 只返回可用状态的父商品
+- **`adminGoodsRoutesMt`当前状态**:
+  - 无默认过滤,显示所有商品
+  - 支持完整CRUD操作
+
+### 文件位置
+- **后端路由文件**:
+  - `packages/goods-module-mt/src/routes/public-goods-routes.mt.ts` - 公共商品路由
+  - `packages/goods-module-mt/src/routes/admin-goods-routes.mt.ts` - 管理员商品路由
+  - `packages/goods-module-mt/src/routes/admin-goods-aggregated.mt.ts` - 聚合路由
+  - `packages/goods-module-mt/src/routes/public-goods-children.mt.ts` - 获取子商品列表路由
+- **前端组件文件**:
+  - `packages/goods-management-ui-mt/src/components/GoodsManagement.tsx` - 商品管理主组件
+- **实体文件**:
+  - `packages/goods-module-mt/src/entities/goods.entity.mt.ts` - 商品实体定义
+- **Schema文件**:
+  - `packages/goods-module-mt/src/schemas/public-goods.schema.mt.ts` - 公共商品Schema
+  - `packages/goods-module-mt/src/schemas/admin-goods.schema.mt.ts` - 管理员商品Schema
+
+### 编码标准 [Source: architecture/coding-standards.md]
+- **测试框架**: Vitest + Testing Library + hono/testing
+- **测试位置**: `tests`文件夹与源码并列(例如:`packages/goods-module-mt/tests/` 与 `packages/goods-module-mt/src/` 并列)
+- **覆盖率目标**: 核心业务逻辑 > 80%
+- **测试类型**: 单元测试、集成测试
+- **RPC客户端架构**: 使用单例模式的客户端管理器,通过`clientManager.get().api.$method`调用
+
+### Testing
+- **测试框架**: Vitest + Testing Library + hono/testing
+- **测试文件位置**:
+  - 后端: `packages/goods-module-mt/tests/integration/`
+  - 前端: `packages/goods-management-ui-mt/tests/unit/`
+- **测试标准**:
+  - API端点功能测试
+  - 查询参数验证测试
+  - 父子商品关系逻辑测试
+  - 性能测试验证
+  - 前端组件渲染和交互测试
+- **测试模式**:
+  - 使用`vi.mock()` mock API客户端
+  - 使用测试数据库进行集成测试
+  - 验证API响应格式和状态码
+  - 验证前端组件状态变化
+- **具体测试要求**:
+  - 测试商品详情API的父子商品信息返回
+  - 测试管理员商品API的spuId查询参数功能
+  - 测试"只显示父商品"筛选功能
+  - 测试父子关系展示列的正确显示
+  - 确保现有功能不受影响
+
+### 项目结构注意事项
+- 保持多租户支持完整,所有查询必须包含tenantId过滤
+- 父子商品必须在同一租户下
+- 保持API向后兼容性,不影响现有客户端
+- 性能优化不能影响现有功能
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-12-12 | 1.1 | 更新测试目录描述,从 `__tests__` 修正为 `tests` | Bob (Scrum Master) |
+| 2025-12-12 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
+
+## Dev Agent Record
+
+### Agent Model Used
+
+### Debug Log References
+
+### Completion Notes List
+
+### File List
+
+## QA Results