|
|
@@ -0,0 +1,272 @@
|
|
|
+# 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格式,包含`success`、`data`、`message`字段
|
|
|
+
|
|
|
+### 集成规范
|
|
|
+- **路由注册模式**:使用`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
|