# 故事 010.003: 修复路由路径规范问题 ## 元数据 | 字段 | 值 | |------|-----| | **史诗** | Epic 010: 统一广告管理系统 | | **状态** | 已完成 | | **优先级** | 高 | | **故事类型** | 修复 (Bug Fix) | | **工作量** | 2小时 | | **负责人** | James (Claude Code) | | **创建日期** | 2026-01-03 | | **完成日期** | 2026-01-03 | ## 故事描述 ### 问题描述 故事010.001实施时违反了后端模块开发规范,在模块路由定义中添加了`/api/v1`前缀。按照规范,该前缀应该在server包注册路由时添加,而非模块内部。 ### 问题影响 - 违反了项目后端模块开发规范 - 模块路由与项目其他模块不一致 - Server包注册路由时会重复添加前缀 ### 根本原因 故事010.001实施时未仔细参考项目现有模块的路由定义方式,错误地包含了`/api/v1`前缀。正确的方式是模块内部使用相对路径(如 `/`),由server包在注册时添加完整前缀。 ## 验收标准 ### 功能验收 - [x] 所有管理员路由路径不再包含 `/api/v1` 前缀 - [x] 所有用户路由路径不再包含 `/api/v1` 前缀 - [x] 集成测试全部通过 ### 技术验收 - [x] 路由路径符合后端模块开发规范 - [x] 代码通过类型检查 - [x] 所有测试通过 ## 任务清单 ### 任务1: 修复管理员广告路由路径 - [x] 修改 `unified-advertisements.admin.routes.ts` - [x] GET `/api/v1/admin/unified-advertisements` → `/` - [x] POST `/api/v1/admin/unified-advertisements` → `/` - [x] PUT `/api/v1/admin/unified-advertisements/:id` → `/:id` - [x] DELETE `/api/v1/admin/unified-advertisements/:id` → `/:id` ### 任务2: 修复管理员广告类型路由路径 - [x] 修改 `unified-advertisement-types.admin.routes.ts` - [x] GET `/api/v1/admin/unified-advertisement-types` → `/` - [x] POST `/api/v1/admin/unified-advertisement-types` → `/` - [x] PUT `/api/v1/admin/unified-advertisement-types/:id` → `/:id` - [x] DELETE `/api/v1/admin/unified-advertisement-types/:id` → `/:id` ### 任务3: 修复用户广告类型路由路径 - [x] 修改 `unified-advertisement-types.routes.ts` - [x] GET `/api/v1/advertisement-types` → `/` ### 任务4: 更新集成测试 - [x] 更新 `unified-advertisements.integration.test.ts` 中的API调用方式 - [x] 管理员广告路由:`adminClient['path'].$get()` → `adminClient.$get()` - [x] 管理员广告路由:`adminClient['path/:id'].$put()` → `adminClient[':id'].$put()` - [x] 管理员广告类型路由:同上模式 - [x] 用户广告类型路由:`userClient['path'].$get()` → `userClient.$get()` ### 任务5: 更新文档 - [x] 更新史诗010文档,添加本故事说明并修复Story编号 ## 开发笔记 ### 修复参考 对比项目其他模块(如 `delivery-address-module`),正确的路由路径定义方式: **正确示例**(delivery-address-module): ```typescript const createDeliveryAddressRoute = createRoute({ method: 'post', path: '/', // ✅ 使用相对路径,不包含完整路径 middleware: [authMiddleware], // ... }); ``` **错误示例**(修复前的unified-advertisements-module): ```typescript const listRoute = createRoute({ method: 'get', path: '/api/v1/admin/unified-advertisements', // ❌ 包含完整路径 middleware: [tenantAuthMiddleware] as const, // ... }); ``` **正确示例**(修复后的unified-advertisements-module): ```typescript const listRoute = createRoute({ method: 'get', path: '/', // ✅ 使用相对路径 middleware: [tenantAuthMiddleware] as const, // ... }); ``` ### 修改文件清单 #### 源代码文件 1. `packages/unified-advertisements-module/src/routes/admin/unified-advertisements.admin.routes.ts` 2. `packages/unified-advertisements-module/src/routes/admin/unified-advertisement-types.admin.routes.ts` 3. `packages/unified-advertisements-module/src/routes/unified-advertisement-types.routes.ts` #### 测试文件 4. `packages/unified-advertisements-module/tests/integration/unified-advertisements.integration.test.ts` #### 文档文件 5. `docs/prd/epic-010-unified-ad-management.md` ## 测试结果 ### 测试执行 ```bash pnpm --filter @d8d/unified-advertisements-module test ``` ### 测试状态 - 修复完成后测试全部通过 - 共57个测试(23个单元测试 + 34个集成测试) ## 完成备注 修复完成。所有路由路径现在符合后端模块开发规范,使用相对路径(`/`),不再包含完整路径前缀。 **关键变更**: - 模块内部路由路径:从 `/api/v1/admin/unified-advertisements` 改为 `/` - Server包注册时添加完整前缀:`api.route('/api/v1/admin/unified-advertisements', unifiedAdvertisementAdminRoutes)` - 测试调用方式:从 `adminClient['/admin/unified-advertisements'].$get()` 改为 `adminClient.$get()` **额外修复**:在修复过程中发现史诗010文档中Story 2丢失,已将其恢复并重新编号后续故事。 ## 相关文档 - [后端模块包开发规范](../architecture/backend-module-package-standards.md) - [史诗010: 统一广告管理系统](../prd/epic-010-unified-ad-management.md) - [故事010.001: 创建统一广告模块](010.001.story.md)