2
0

012.001.story.md 8.6 KB

故事 012.001:数据库架构扩展

状态

草稿

故事

作为系统开发人员, 我希望扩展数据库架构以支持用人方小程序功能, 以便后续的API实现有完整的数据支持和准确的年龄统计。

验收标准

从史诗文件复制的验收标准编号列表

  1. disabled_person表成功添加birth_date字段,现有记录该字段值为NULL
  2. order_person_asset表的asset_type枚举扩展完成,新增视频类型枚举值
  3. users2表成功添加company_id字段,现有admin用户的该字段值为NULL
  4. 数据库迁移脚本可正确执行向前和向后迁移
  5. TypeORM实体定义更新完成
  6. 现有业务功能不受影响,测试通过

任务 / 子任务

将故事分解为实施所需的具体任务和子任务。 在相关处引用适用的验收标准编号。

  • 任务1:向disabled_person表添加可为空的birth_date字段(AC:1)
    • 修改allin-packages/disability-module/src/entities/disabled-person.entity.ts以添加birthDate字段
    • 在disability-module中更新对应的schema验证
    • 创建添加birth_date列的数据库迁移脚本
  • 任务2:扩展order_person_asset表中的asset_type枚举(AC:2)
    • 更新allin-packages/order-module/src/schemas/order.schema.ts中的AssetType枚举
    • 添加新的视频类型:salary_videotax_videocheckin_videowork_video
    • 确保向后兼容现有的枚举值
    • 更新order-person-asset.entity.ts中的实体验证
  • 任务3:向users2表添加可为空的company_id字段(AC:3)
    • 定位用户实体(可能在user-module或auth-module中)
    • 添加companyId字段,外键引用employer_company.company_id
    • 创建添加company_id列的数据库迁移脚本
  • 任务4:创建数据库迁移脚本(AC:4)
    • 为所有三个schema变更创建向前迁移脚本
    • 创建向后/回滚迁移脚本
    • 在测试数据库上测试迁移脚本
  • 任务5:更新TypeORM实体定义(AC:5)
    • 更新实体定义以反映新字段和枚举值
    • 验证所有模块中的schema一致性
  • 任务6:验证和测试(AC:6)
    • 运行现有测试以确保没有回归
    • 为新字段和枚举值添加单元测试
    • 测试与现有数据的向后兼容性
    • 验证所有现有业务功能正常工作

开发笔记

仅填充从docs文件夹中的实际工件提取的相关信息,与此故事相关:

先前故事洞察

史诗012中无先前故事(这是第一个故事)。

数据模型

基于现有实体定义:

DisabledPerson实体(allin-packages/disability-module/src/entities/disabled-person.entity.ts):

  • 主键:id(映射到person_id列)[来源:architecture/backend-module-package-standards.md#实体设计规范]
  • 字段命名约定:数据库下划线 → TypeScript驼峰命名 [来源:architecture/backend-module-package-standards.md#字段命名转换]
  • 当前字段包括:namegenderidCarddisabilityIddisabilityTypedisabilityLevelphonejobStatus
  • 缺少birth_date字段(DATE类型)用于准确年龄计算
  • 新字段应为可为空:birthDate?: Date [来源:docs/prd/epic-012-api-supplement-for-employer-mini-program.md#故事012-01]
  • 注意birth_date字段应为DATE类型,用于存储出生日期而非时间戳

OrderPersonAsset实体(allin-packages/order-module/src/entities/order-person-asset.entity.ts):

  • 主键:id(映射到op_id列)
  • assetType字段使用AssetType枚举(varchar(50))
  • 当前枚举值:tax(税务)、salary(薪资)、job_result(工作成果)、contract_sign(合同签署)、disability_cert(残疾证明)、other(其他)[来源:allin-packages/order-module/src/schemas/order.schema.ts]
  • 需要扩展的视频类型:salary_video(工资视频)、tax_video(个税视频)、checkin_video(打卡视频)、work_video(工作视频)
  • 枚举值应为小写字符串加下划线 [来源:architecture/backend-module-package-standards.md#枚举值一致性]
  • 枚举值对比
    • 现有:tax, salary, job_result, contract_sign, disability_cert, other
    • 新增:salary_video, tax_video, checkin_video, work_video
    • 全部:tax, salary, job_result, contract_sign, disability_cert, other, salary_video, tax_video, checkin_video, work_video

用户实体(待定位):

  • 基于史诗描述,users2表需要company_id字段
  • 应引用employer_company.company_id作为外键
  • 字段应为可为空(现有admin用户为NULL)[来源:docs/prd/epic-012-api-supplement-for-employer-mini-program.md#故事012-01]
  • 注意:需要在packages/user-modulepackages/auth-module中查找对应的用户实体文件。如果不存在,可能需要基于users2表创建新的实体

API规范

不适用于此仅schema的故事。后续故事将使用这些schema变更实现API。

组件规范

不适用(后端schema故事)。

文件位置

基于项目结构 [来源:architecture/source-tree.md]:

  • allin-packages/disability-module/src/entities/disabled-person.entity.ts
  • allin-packages/order-module/src/entities/order-person-asset.entity.ts
  • allin-packages/order-module/src/schemas/order.schema.ts
  • 用户实体位置:需要定位(检查packages/user-modulepackages/auth-module
  • 迁移脚本:应在适当位置创建(基于现有迁移模式TBD)

技术约束

  • 向后兼容性:所有新字段必须可为空,现有数据不受影响 [来源:docs/prd/epic-012-api-supplement-for-employer-mini-program.md#兼容性要求]
  • 数据库:PostgreSQL 17,TypeORM 0.3.25 [来源:architecture/tech-stack.md]
  • 枚举扩展:必须保留现有枚举值,添加新值 [来源:docs/prd/epic-012-api-supplement-for-employer-mini-program.md#风险缓解]
  • 迁移脚本:必须支持向前和向后迁移 [来源:docs/prd/epic-012-api-supplement-for-employer-mini-program.md#任务列表]

项目结构说明

  • Monorepo结构,allin-packages/用于业务模块 [来源:architecture/source-tree.md]
  • 每个模块遵循后端模块包标准 [来源:architecture/backend-module-package-standards.md]
  • 实体命名:disabled-person.entity.ts(kebab-case)[来源:architecture/source-tree.md#集成指南]
  • 字段映射:数据库birth_date → TypeScriptbirthDate [来源:architecture/backend-module-package-standards.md#字段命名转换]

测试

列出开发者需要遵循的相关测试标准:

测试文件位置

  • 单元测试:allin-packages/{模块名称}/tests/unit/**/*.test.ts [来源:architecture/testing-strategy.md#单元测试]
  • 集成测试:allin-packages/{模块名称}/tests/integration/**/*.test.ts [来源:architecture/testing-strategy.md#集成测试]

测试标准

  • 测试框架:Vitest [来源:architecture/testing-strategy.md#单元测试]
  • 数据库测试:使用测试数据库和事务回滚 [来源:architecture/testing-strategy.md#数据库测试策略]
  • 覆盖率要求:单元测试 ≥ 80%,集成测试 ≥ 60% [来源:architecture/testing-strategy.md#测试覆盖率标准]

测试框架和模式

  • 单元测试:测试单个实体和schema
  • 集成测试:测试数据库迁移脚本和schema变更
  • 向后兼容性测试:验证现有数据和查询正常工作
  • 枚举验证测试:测试新枚举值是否被接受

此故事的特定测试要求

  1. Schema验证测试:验证新字段是否正确可为空
  2. 枚举扩展测试:验证新枚举值适用于现有代码
  3. 迁移测试:测试向前和向后迁移脚本
  4. 回归测试:运行现有模块测试以确保没有破坏
  5. 外键测试:验证company_id外键关系

变更日志

跟踪对此故事文档所做的更改

日期 版本 描述 作者
2025-12-13 1.0 初始故事创建 Bob(Scrum Master)
2025-12-13 1.1 转换为中文,应用检查清单改进建议 Bob(Scrum Master)

开发代理记录

此部分由开发代理在实施过程中填充

使用的代理模型

{{agent_model_name_version}}

调试日志引用

引用在开发过程中生成的任何调试日志或跟踪

完成笔记列表

关于任务完成和遇到的任何问题的笔记

文件列表

列出在故事实施过程中创建、修改或受影响的所有文件

QA结果

来自QA代理对已完成故事实施的QA审查结果