007.008.integrate-allin-modules-to-server.story.md 12 KB

Story 007.008: 将Allin系统模块集成到packages/server

Status

Draft

Story

As a 开发者, I want 将史诗007中移植的所有Allin系统模块集成到packages/server中,配置路由和依赖, so that Allin系统的所有功能可以在当前项目中正常运行,API端点可以通过server访问。

Acceptance Criteria

  1. 分析packages/server的当前结构和依赖配置
  2. 在packages/server的package.json中添加所有Allin模块的workspace依赖
  3. 在packages/server/src/index.ts中导入并注册所有Allin模块的路由
  4. 在数据库初始化中注册所有Allin模块的实体
  5. 验证所有API端点可以通过server访问
  6. 通过类型检查和基本测试验证
  7. 确保与现有模块的兼容性

Tasks / Subtasks

  • 分析packages/server的当前结构和依赖配置 (AC: 1)
    • 分析packages/server/package.json的当前依赖配置
    • 文件位置: packages/server/package.json
    • 分析要点: 现有依赖结构、workspace依赖模式
    • 分析packages/server/src/index.ts的当前路由注册方式
    • 文件位置: packages/server/src/index.ts
    • 分析要点: 路由注册模式、数据库初始化方式
    • 分析现有模块的导入和导出模式
    • 参考文件: @d8d/core-module/*模块的导入方式
    • 分析要点: 模块导出结构、路由导出方式
  • 在packages/server的package.json中添加所有Allin模块的workspace依赖 (AC: 2)
    • 添加@d8d/allin-channel-module依赖
    • 包位置: allin-packages/channel-module
    • 包名: @d8d/allin-channel-module
    • 依赖类型: workspace依赖
    • 添加@d8d/allin-company-module依赖
    • 包位置: allin-packages/company-module
    • 包名: @d8d/allin-company-module
    • 依赖类型: workspace依赖
    • 添加@d8d/allin-disability-module依赖
    • 包位置: allin-packages/disability-module
    • 包名: @d8d/allin-disability-module
    • 依赖类型: workspace依赖
    • 添加@d8d/allin-order-module依赖
    • 包位置: allin-packages/order-module
    • 包名: @d8d/allin-order-module
    • 依赖类型: workspace依赖
    • 添加@d8d/allin-platform-module依赖
    • 包位置: allin-packages/platform-module
    • 包名: @d8d/allin-platform-module
    • 依赖类型: workspace依赖
    • 添加@d8d/allin-salary-module依赖
    • 包位置: allin-packages/salary-module
    • 包名: @d8d/allin-salary-module
    • 依赖类型: workspace依赖
    • 添加@d8d/allin-enums依赖
    • 包位置: allin-packages/enums
    • 包名: @d8d/allin-enums
    • 依赖类型: workspace依赖
    • 验证依赖配置正确性
    • 验证方法: 运行pnpm install检查依赖解析
    • 验证标准: 无依赖解析错误
  • 在packages/server/src/index.ts中导入并注册所有Allin模块的路由 (AC: 3)
    • 导入@d8d/allin-channel-module的路由
    • 导入语句: import { channelRoutes } from '@d8d/allin-channel-module'
    • 路由注册: api.route('/api/v1/channel', channelRoutes)
    • 路由路径: /api/v1/channel
    • 导入@d8d/allin-company-module的路由
    • 导入语句: import { companyRoutes } from '@d8d/allin-company-module'
    • 路由注册: api.route('/api/v1/company', companyRoutes)
    • 路由路径: /api/v1/company
    • 导入@d8d/allin-disability-module的路由
    • 导入语句: import { disabilityRoutes } from '@d8d/allin-disability-module'
    • 路由注册: api.route('/api/v1/disability', disabilityRoutes)
    • 路由路径: /api/v1/disability
    • 导入@d8d/allin-order-module的路由
    • 导入语句: import { orderRoutes } from '@d8d/allin-order-module'
    • 路由注册: api.route('/api/v1/order', orderRoutes)
    • 路由路径: /api/v1/order
    • 导入@d8d/allin-platform-module的路由
    • 导入语句: import { platformRoutes } from '@d8d/allin-platform-module'
    • 路由注册: api.route('/api/v1/platform', platformRoutes)
    • 路由路径: /api/v1/platform
    • 导入@d8d/allin-salary-module的路由
    • 导入语句: import { salaryRoutes } from '@d8d/allin-salary-module'
    • 路由注册: api.route('/api/v1/salary', salaryRoutes)
    • 路由路径: /api/v1/salary
    • 验证路由导入正确性
    • 验证方法: 检查TypeScript类型错误
    • 验证标准: 无导入错误,路由类型正确
  • 在数据库初始化中注册所有Allin模块的实体 (AC: 4)
    • 导入所有Allin模块的实体
    • 导入语句: 从每个模块导入主要实体
    • 实体列表:
      • Channel from @d8d/allin-channel-module
      • Company from @d8d/allin-company-module
      • DisabledPerson, DisabledBankCard, DisabledPhoto, DisabledRemark, DisabledVisit from @d8d/allin-disability-module
      • EmploymentOrder, OrderPerson, OrderPersonAsset from @d8d/allin-order-module
      • Platform from @d8d/allin-platform-module
      • SalaryLevel from @d8d/allin-salary-module
    • 更新initializeDataSource调用
    • 当前调用: initializeDataSource([UserEntity, Role, File, SystemConfig, AreaEntity])
    • 更新后: 添加所有Allin实体到数组中
    • 位置: packages/server/src/index.ts:16
    • 验证实体注册正确性
    • 验证方法: 检查数据库初始化日志
    • 验证标准: 所有实体成功注册,无TypeORM错误
  • 验证所有API端点可以通过server访问 (AC: 5)
    • 启动开发服务器测试
    • 命令: pnpm --filter @d8d/server dev
    • 验证方法: 访问/doc端点查看OpenAPI文档
    • 验证标准: 所有Allin模块的API端点出现在文档中
    • 测试关键API端点
    • 测试工具: 使用curl或Postman
    • 测试端点:
      • GET /api/v1/channel/getAllChannels - 渠道列表
      • GET /api/v1/company/getAllCompanies - 公司列表
      • GET /api/v1/disability/getAllDisabledPersons - 残疾人列表
      • GET /api/v1/order/getAllOrders - 订单列表
      • GET /api/v1/platform/getAllPlatforms - 平台列表
      • GET /api/v1/salary/getAllSalaryLevels - 薪资列表
    • 验证标准: 返回正确的响应格式和状态码
    • 验证认证中间件工作正常
    • 测试方法: 测试需要认证的端点
    • 验证标准: 未认证请求返回401,认证请求正常响应
  • 通过类型检查和基本测试验证 (AC: 6)
    • 运行TypeScript类型检查
    • 命令: pnpm --filter @d8d/server typecheck
    • 验证标准: 无类型错误
    • 运行server测试
    • 命令: pnpm --filter @d8d/server test
    • 验证标准: 所有现有测试通过
    • 验证模块导入无错误
    • 验证方法: 检查编译输出
    • 验证标准: 成功编译,无导入错误
  • 确保与现有模块的兼容性 (AC: 7)
    • 验证现有功能不受影响
    • 测试现有API端点:
      • GET /api/v1/users - 用户管理
      • GET /api/v1/auth/profile - 认证
      • GET /api/v1/files - 文件管理
      • GET /api/v1/areas - 区域管理
    • 验证标准: 现有端点正常工作
    • 验证路由无冲突
    • 检查方法: 检查所有路由路径唯一性
    • 验证标准: 无路由路径冲突
    • 验证依赖无冲突
    • 检查方法: 检查package.json依赖版本
    • 验证标准: 无版本冲突,依赖解析正常

Dev Notes

先前故事洞察

  • 故事007.001-007.007:已完成所有Allin系统后端模块的移植
    • 007.001: 渠道管理模块 (@d8d/allin-channel-module)
    • 007.002: 公司管理模块 (@d8d/allin-company-module)
    • 007.003: 枚举常量包 (@d8d/allin-enums)
    • 007.004: 残疾人管理模块 (@d8d/allin-disability-module)
    • 007.005: 订单管理模块 (@d8d/allin-order-module)
    • 007.006: 平台管理模块 (@d8d/allin-platform-module)
    • 007.007: 薪资管理模块 (@d8d/allin-salary-module)
  • 技术栈转换已完成:所有模块已从NestJS转换为Hono架构
  • API集成测试已完成:每个模块都有完整的集成测试

数据模型

  • Allin系统实体列表
    1. Channel - 渠道管理实体
    2. Company - 公司管理实体
    3. DisabledPerson, DisabledBankCard, DisabledPhoto, DisabledRemark, DisabledVisit - 残疾人管理实体
    4. EmploymentOrder, OrderPerson, OrderPersonAsset - 订单管理实体
    5. Platform - 平台管理实体
    6. SalaryLevel - 薪资管理实体
  • 实体关系:模块间存在依赖关系,已在移植时处理

API规范

  • API路径前缀/api/v1/
  • 模块路由路径
    • /api/v1/channel - 渠道管理
    • /api/v1/company - 公司管理
    • /api/v1/disability - 残疾人管理
    • /api/v1/order - 订单管理
    • /api/v1/platform - 平台管理
    • /api/v1/salary - 薪资管理
  • 认证要求:所有端点需要JWT认证(通过中间件处理)
  • 响应格式:统一JSON格式,包含successdatamessage字段

集成规范

  • 路由注册模式:使用api.route()方法注册模块路由
  • 数据库初始化:使用initializeDataSource()注册所有实体
  • 依赖管理:使用workspace依赖,确保版本一致性
  • 类型安全:TypeScript严格模式,确保类型兼容性

文件位置

  • server包位置packages/server/
  • 配置文件
    • package.json - 依赖配置
    • src/index.ts - 主入口文件,路由注册
  • Allin模块位置allin-packages/目录下各个模块
  • 参考文件
    • packages/server/src/index.ts - 现有路由注册模式
    • @d8d/core-module/* - 现有模块导入模式

测试要求

  • 测试框架:Vitest
  • 测试类型:集成测试,验证API端点可访问性
  • 测试工具:使用testClient进行API测试
  • 验证重点
    1. 路由注册正确性
    2. 数据库实体初始化
    3. API端点响应
    4. 认证中间件工作
    5. 与现有模块兼容性

技术约束

  • 技术栈:Hono、TypeORM、TypeScript、OpenAPI
  • 编码标准:遵循现有编码规范
  • 包管理:pnpm workspace依赖管理
  • 模块导出:每个模块必须导出{moduleName}Routes和主要实体
  • 类型安全:必须通过TypeScript类型检查

项目结构注意事项

  • 目录结构:Allin模块在allin-packages/目录,server在packages/server/
  • 依赖管理:通过workspace依赖引用,确保版本一致性
  • 路由冲突:确保路由路径唯一,不与现有路由冲突
  • 实体注册:所有实体必须在数据库初始化时注册
  • 认证中间件:确保Allin模块路由也受认证保护

Testing

测试标准

  • 测试框架:使用Vitest进行集成测试
  • 测试位置packages/server/tests/目录
  • 测试类型:API集成测试,验证端点可访问性
  • 覆盖率要求:确保现有测试覆盖率不下降

本故事特定测试要求

  1. 依赖配置测试:验证package.json依赖配置正确
  2. 路由注册测试:验证所有Allin模块路由正确注册
  3. 实体初始化测试:验证数据库实体成功注册
  4. API端点测试:验证关键API端点可访问
  5. 兼容性测试:验证现有功能不受影响
  6. 认证测试:验证认证中间件对Allin路由生效

测试执行流程

  1. 更新依赖配置后,运行pnpm install验证依赖解析
  2. 更新路由注册后,运行TypeScript类型检查
  3. 启动开发服务器,访问OpenAPI文档验证路由注册
  4. 测试关键API端点,验证响应正确性
  5. 运行现有测试套件,验证兼容性
  6. 检查测试覆盖率,确保不下降

Change Log

Date Version Description Author
2025-12-03 1.0 初始故事创建 John (Product Manager)

Dev Agent Record

此部分由开发代理在实现过程中填写

Agent Model Used

Claude Code (d8d-model)

Debug Log References

待实现时填写

Completion Notes List

待实现时填写

File List

待实现时填写

QA Results

Results from QA Agent QA review of the completed story implementation