Sfoglia il codice sorgente

docs(story013.001): 创建故事013.001类型错误修复文档

- 创建故事013.001详细文档,修复残疾人后端模块类型错误
- 包含任务分解、技术笔记、风险缓解和验证检查清单
- 为史诗013类型错误修复提供实施指导

🤖 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 settimana fa
parent
commit
f7a6bb0cd1
1 ha cambiato i file con 140 aggiunte e 0 eliminazioni
  1. 140 0
      docs/stories/013.001.story.md

+ 140 - 0
docs/stories/013.001.story.md

@@ -0,0 +1,140 @@
+# 故事 013.001:修复残疾人后端模块类型错误
+
+## 状态
+Ready for Development
+
+## 故事
+**作为**系统开发人员,
+**我希望**修复残疾人后端模块中的类型错误,
+**以便**提高代码质量、减少运行时错误风险并增强TypeScript类型安全性。
+
+## 验收标准
+从史诗文件复制的验收标准编号列表
+
+1. [ ] 残疾人后端模块类型检查通过(`pnpm typecheck`无错误)
+2. [ ] 所有集成测试通过,类型错误已修复
+3. [ ] 现有API功能正常,无回归
+4. [ ] 类型定义更加精确,减少`any`类型使用
+5. [ ] 代码符合项目类型安全标准
+
+## 任务 / 子任务
+将故事分解为实施所需的具体任务和子任务。
+在相关处引用适用的验收标准编号。
+
+### 任务1:分析并修复`aggregated.routes.ts`类型错误(AC:1,2,3)
+- [ ] 分析`src/routes/aggregated.routes.ts`第134行的类型错误:`bankCards`属性类型不兼容
+- [ ] 分析第204行的类似类型错误
+- [ ] 检查`createDisabledPersonWithAllData`函数的参数类型定义
+- [ ] 修复`File`类型与`null`类型冲突问题
+- [ ] 确保修复后的代码通过类型检查
+
+### 任务2:修复集成测试类型错误(AC:1,2,3)
+- [ ] 分析`tests/integration/person-extension.integration.test.ts`中的类型错误:
+  - 第88行:数组类型与单个实体类型混淆错误
+  - 第106行:`EmploymentOrder`数组类型错误
+  - 第145行:数组属性访问错误
+  - 第231行:数组属性访问错误
+  - 第258行:动态属性访问缺乏类型保护
+  - 第294行:数组属性访问错误
+  - 第317-320行:动态属性访问错误
+  - 第372-375行:动态属性访问错误
+- [ ] 修复数组类型与实体类型的混淆
+- [ ] 添加类型保护或精确类型断言
+- [ ] 确保测试代码类型正确
+
+### 任务3:检查并修复其他潜在类型问题(AC:1,4,5)
+- [ ] 检查整个残疾人模块中`any`类型的使用
+- [ ] 优化Zod schema的类型推断
+- [ ] 确保TypeORM实体与TypeScript类型一致
+- [ ] 修复其他可能存在的类型警告或错误
+
+### 任务4:验证修复结果(AC:1,2,3,5)
+- [ ] 运行类型检查:`cd allin-packages/disability-module && pnpm typecheck`
+- [ ] 运行所有测试:`cd allin-packages/disability-module && pnpm test`
+- [ ] 验证现有API功能正常
+- [ ] 确保无回归
+
+## 技术笔记
+
+### 现有系统集成
+- **集成模块**:残疾人管理模块 (`@d8d/allin-disability-module`)
+- **技术栈**:TypeScript 5.8.3、Hono 4.8.5、Zod 4.1.12、TypeORM 0.3.20、Vitest 3.2.4
+- **遵循模式**:
+  - TypeORM实体模式(`src/entities/`)
+  - Zod schema验证模式(`src/schemas/`)
+  - Hono路由模式(`src/routes/`)
+  - 集成测试模式(`tests/integration/`)
+- **接触点**:
+  - `aggregated.routes.ts`:聚合路由处理
+  - `person-extension.integration.test.ts`:人才扩展API集成测试
+  - 实体定义与schema验证的集成
+
+### 关键约束
+1. **向后兼容**:API接口必须保持不变,只进行类型层面的修复
+2. **测试完整性**:所有现有测试必须通过,包括集成测试
+3. **类型安全**:修复后应提高类型安全性,减少运行时错误风险
+4. **性能影响**:类型修复不应影响运行时性能
+
+### 集成方法
+1. **类型推断优化**:利用Zod schema的类型推断能力,减少手动类型定义
+2. **类型保护**:在动态属性访问处添加类型保护
+3. **精确类型**:使用具体的类型定义替代`any`类型
+4. **测试驱动修复**:基于现有测试验证修复的正确性
+
+## 开发笔记
+仅填充从docs文件夹中的实际工件提取的相关信息,与此故事相关:
+
+### 先前故事洞察
+史诗013中无先前故事(这是第一个故事)。
+
+### 已知类型错误详情
+1. **`aggregated.routes.ts`错误**:
+   - 错误位置:第134行和第204行
+   - 错误描述:`bankCards`属性中`File`类型与`null`类型冲突
+   - 涉及类型:`Partial<DisabledBankCard>[]`与包含`File`属性的对象数组不兼容
+
+2. **集成测试类型错误**:
+   - 数组类型与单个实体类型混淆(`DisabledPerson[]` vs `DisabledPerson`)
+   - 动态属性访问缺乏类型保护(如`薪资历史`、`征信信息`、`视频列表`)
+   - 数组属性访问错误(`.id`访问数组而不是数组元素)
+
+3. **潜在类型问题**:
+   - `any`类型的使用可能隐藏类型错误
+   - Zod schema与TypeORM实体类型可能不完全一致
+   - 响应类型定义可能不够精确
+
+### 修复策略
+1. **精确类型定义**:分析并修复`createDisabledPersonWithAllData`函数的参数和返回值类型
+2. **类型保护**:在动态属性访问处添加`in`操作符检查或类型守卫
+3. **数组处理**:确保数组操作正确处理数组类型而非单个元素
+4. **测试修复**:修复测试代码中的类型错误,确保测试逻辑正确
+
+### 风险缓解
+- **主要风险**:类型修复可能引入新的逻辑错误
+- **缓解措施**:小范围逐步修复,充分测试验证
+- **回滚计划**:如果修复导致问题,可以恢复类型定义更改
+
+### 兼容性验证
+- [x] 无破坏性API更改(仅类型层面修复)
+- [x] 无数据库schema更改(仅类型定义)
+- [x] UI更改遵循现有设计模式(不适用,仅后端类型修复)
+- [x] 性能影响可忽略(仅编译时类型检查)
+
+### 相关技术文档
+- 史诗013文档:`docs/prd/epic-013-type-error-fixes.md`
+- 项目架构:`docs/architecture/`
+- TypeScript配置:`tsconfig.json`
+
+### 验证检查清单
+
+#### 范围验证
+- [x] 故事可以在一个开发会话中完成(聚焦类型修复)
+- [x] 集成方法直接(仅类型定义修改)
+- [x] 遵循现有模式(TypeScript类型模式)
+- [x] 无需设计或架构工作(纯修复工作)
+
+#### 清晰度检查
+- [x] 故事需求明确(修复具体类型错误)
+- [x] 集成点明确指定(`aggregated.routes.ts`和集成测试)
+- [x] 成功标准可测试(类型检查通过、测试通过)
+- [x] 回滚方法简单(恢复类型定义更改)