Story 009.002: Core Module MT Adapter Packages
Status
Completed
Story
As a 系统架构师
I want 将原来的user-module-mt、auth-module-mt、file-module-mt三个包改为适配器包,只依赖核心包并导出原有接口
so that 消除循环依赖问题,同时保持现有API和功能的完整性
Acceptance Criteria
- 将user-module-mt包改为适配器包,只依赖@d8d/core-module-mt并导出原有接口
- 将auth-module-mt包改为适配器包,只依赖@d8d/core-module-mt并导出原有接口
- 将file-module-mt包改为适配器包,只依赖@d8d/core-module-mt并导出原有接口
- 所有现有功能正常工作,其他包完全不需要修改代码
- 构建和测试通过,确保无回归
Tasks / Subtasks
Dev Notes
技术栈信息 [Source: architecture/tech-stack.md]
- 运行时: Node.js 20.18.3
- 框架: Hono 4.8.5 (RPC类型安全)
- 数据库: PostgreSQL 17 + TypeORM 0.3.25
- 构建工具: Vite 7.0.0
- 测试框架: Vitest 2.x + Testing Library 13.x + hono/testing
项目结构信息 [Source: architecture/source-tree.md]
- 包管理: pnpm workspace模式
- 包架构层次: 基础设施层 → 业务模块层 → 多租户模块层 → 前端界面层 → 应用层
- 多租户包位置: packages/目录下的*-mt后缀包
- 现有相关包:
- packages/user-module-mt/
- packages/auth-module-mt/
- packages/file-module-mt/
- packages/core-module-mt/ (新创建的聚合包)
适配器包设计 [Source: docs/epic-009-multi-tenant-core-module-consolidation.md]
- 适配器包结构: 原来的三个包改为适配器包,只依赖核心包并导出原有接口
- 依赖关系: 适配器包只依赖@d8d/core-module-mt,移除包间循环依赖
- 导出接口: 保持原有exports配置不变,其他包引用方式不变
现有包依赖关系分析
- user-module-mt: 依赖auth-module-mt和file-module-mt
- auth-module-mt: 依赖user-module-mt和file-module-mt
- file-module-mt: 依赖user-module-mt和auth-module-mt
- 适配器包: 只依赖@d8d/core-module-mt
适配器包配置设计
# user-module-mt适配器包
@d8d/user-module-mt/
├── package.json
│ └── dependencies: { "@d8d/core-module-mt": "workspace:*" }
└── src/
└── index.mt.ts
├── export { UserEntityMt } from '@d8d/core-module-mt/user-module-mt/entities'
├── export { UserServiceMt } from '@d8d/core-module-mt/user-module-mt/services'
├── export { UserSchemaMt } from '@d8d/core-module-mt/user-module-mt/schemas'
└── export { authMiddleware } from '@d8d/core-module-mt/auth-module-mt/middleware'
# 其他包完全不需要修改
@d8d/goods-module-mt/
└── package.json
└── dependencies: { "@d8d/user-module-mt": "workspace:*" } # 保持不变
测试
测试标准 [Source: architecture/coding-standards.md]
- 测试框架: Vitest + Testing Library + hono/testing
- 测试位置: 所有测试已在核心包中,适配器包不需要测试
- 覆盖率目标: 核心业务逻辑 > 80%
- 测试类型: 单元测试、集成测试
测试要求
- 验证所有现有功能正常工作(通过核心包测试)
- 确保适配器包正确导出所有接口
- 测试模块间依赖关系正确解析
- 验证循环依赖问题已解决
- 确保其他包完全不需要修改代码
核心包测试位置
- user-module-mt测试: packages/core-module-mt/user-module-mt/tests/
- auth-module-mt测试: packages/core-module-mt/auth-module-mt/tests/
- file-module-mt测试: packages/core-module-mt/file-module-mt/tests/
- 适配器包: 不需要测试,仅作为导出代理
Change Log
| Date |
Version |
Description |
Author |
| 2025-11-18 |
1.1 |
更新任务:适配器包移除测试,测试在核心包中 |
Bob (Scrum Master) |
| 2025-11-18 |
1.0 |
初始故事创建 |
Bob (Scrum Master) |
Dev Agent Record
Agent Model Used
James (Developer Agent)
Debug Log References
- 成功将user-module-mt、auth-module-mt、file-module-mt三个包改为适配器包
- 移除了包间的循环依赖关系
- 所有适配器包类型检查通过
- 核心包测试全部通过(119个测试)
Completion Notes List
- 所有三个包已成功转换为适配器包,只依赖@d8d/core-module-mt
- 移除了包间的循环依赖,解决了架构问题
- 适配器包只包含简单的重新导出逻辑,保持原有exports配置不变
- 移除了适配器包的测试文件,测试已在核心包中
- 所有现有功能正常工作,其他包完全不需要修改代码
- 构建和测试通过,确保无回归
File List
修改的文件:
- packages/user-module-mt/package.json
- packages/user-module-mt/src/index.mt.ts
- packages/auth-module-mt/package.json
- packages/auth-module-mt/src/index.mt.ts
- packages/file-module-mt/package.json
- packages/file-module-mt/src/index.ts
删除的文件:
- packages/user-module-mt/tests/
- packages/auth-module-mt/tests/
- packages/file-module-mt/tests/
- packages/user-module-mt/src/entities/
- packages/user-module-mt/src/routes/
- packages/user-module-mt/src/schemas/
- packages/user-module-mt/src/services/
- packages/auth-module-mt/src/entities/
- packages/auth-module-mt/src/middleware/
- packages/auth-module-mt/src/routes/
- packages/auth-module-mt/src/schemas/
- packages/auth-module-mt/src/services/
- packages/file-module-mt/src/entities/
- packages/file-module-mt/src/routes/
- packages/file-module-mt/src/schemas/
- packages/file-module-mt/src/services/
QA Results
适配器包实现验证结果
- ✅ 循环依赖解决: 三个适配器包只依赖@d8d/core-module-mt,成功消除包间循环依赖
- ✅ 子路径导入支持: 保持原有exports配置不变,支持@d8d/user-module-mt/schemas等子路径导入
- ✅ 功能完整性: Server包测试通过,所有现有功能正常工作
- ✅ 零代码修改: 其他包完全不需要修改代码,保持原有导入方式
- ✅ 类型安全: 适配器包类型检查通过,无类型错误
- ✅ 构建验证: 所有包构建成功,无编译错误
技术实现要点
- 适配器包结构: 每个适配器包只包含简单的重新导出逻辑
- exports配置: 保持原有exports配置指向本地文件,支持子路径导入
- 依赖管理: 适配器包只依赖core-module-mt,移除包间循环依赖
- 测试验证: 通过server包测试验证适配器包兼容性
性能影响
- 构建时间: 无显著变化
- 运行时性能: 无性能影响,适配器包仅为导出代理
- 包大小: 适配器包体积显著减小,仅保留必要导出文件