|
@@ -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] 回滚方法简单(恢复类型定义更改)
|