008.003.tenant-module-server-integration.story.md 7.6 KB

Story 008.003: 租户模块集成到server

Status

Ready for Review

Story

As a 系统超级管理员 I want 将租户模块包集成到server中 so that server能够支持租户管理操作,包括租户CRUD、超级管理员认证和租户数据隔离

Acceptance Criteria

  1. 将租户模块包(@d8d/tenant-module-mt)集成到server中
  2. 包括租户管理路由、超级管理员认证和租户数据隔离功能
  3. 确保server能够支持租户管理操作

Tasks / Subtasks

  • 验证租户模块包可用性和导出 (AC: 1)
    • 检查租户模块包的package.json配置
    • 验证包有正确的路由导出(tenantRoutes、authRoutes)
    • 验证包有正确的实体导出(TenantEntityMt)
    • 验证包有正确的中间件导出(tenantAuthMiddleware)
  • 添加租户模块包依赖到server (AC: 1)
    • 在packages/server/package.json中添加@d8d/tenant-module-mt依赖
    • 验证依赖版本兼容性
  • 导入租户模块包实体到数据库初始化 (AC: 2)
    • 在packages/server/src/index.ts中导入TenantEntityMt
    • 将TenantEntityMt添加到initializeDataSource实体列表
    • 验证数据库初始化正确性
  • 注册租户管理路由到server (AC: 1)
    • 在packages/server/src/index.ts中导入tenantRoutes
    • 注册租户管理路由到/api/v1/tenants路径
    • 验证路由配置正确性
  • 注册租户认证路由到server (AC: 2)
    • 在packages/server/src/index.ts中导入authRoutes
    • 注册租户认证路由到/api/v1/tenant-auth路径
    • 验证认证路由配置正确性
  • 验证租户管理功能 (AC: 3)
    • 测试租户CRUD操作(创建、读取、更新、删除)
    • 测试超级管理员认证功能
    • 验证租户数据隔离机制
  • 执行回归测试 (AC: 3)
    • 运行现有功能回归测试
    • 验证向后兼容性
    • 确保性能无明显下降

Dev Notes

技术栈信息 [Source: architecture/tech-stack.md]

  • 后端框架: Node.js 20.18.3 + TypeScript
  • Web框架: Hono 4.8.5
  • 数据库: PostgreSQL 17
  • ORM: TypeORM 0.3.25
  • 认证: JWT 9.0.2

项目结构信息 [Source: architecture/source-tree.md]

  • Server位置: packages/server/
  • 路由配置: packages/server/src/index.ts
  • 租户模块包位置: packages/tenant-module-mt/
  • 数据库连接: packages/shared-utils/src/data-source.ts

租户模块包实际结构 [基于实际包检查]

租户模块包(@d8d/tenant-module-mt)提供以下功能:

实体:

  • TenantEntityMt - 租户实体,包含租户名称、代码、状态、配置等字段

路由:

  • tenantRoutes - 租户管理路由,使用通用CRUD服务,支持租户CRUD操作
  • authRoutes - 超级管理员认证路由,支持固定超级管理员账号登录

中间件:

  • tenantAuthMiddleware - 租户认证中间件,验证超级管理员权限

服务:

  • TenantService - 租户服务,提供租户业务逻辑

现有集成模式 [Source: packages/server/src/index.ts]

当前server已经集成了多个多租户模块包,集成模式为:

// 包导入
import { userRoutesMt as userModuleRoutes } from '@d8d/user-module-mt'
import { authRoutes as authModuleRoutes } from '@d8d/auth-module-mt'

// 路由注册
export const userRoutes = api.route('/api/v1/users', userModuleRoutes)
export const authRoutes = api.route('/api/v1/auth', authModuleRoutes)

// 实体初始化
initializeDataSource([
  UserEntityMt, RoleMt, FileMt,
  // ... 其他实体
])

租户模块包集成模式 [基于实际包结构]

// 租户模块包导入
import { tenantRoutes } from '@d8d/tenant-module-mt'
import { authRoutes as tenantAuthRoutes } from '@d8d/tenant-module-mt'
import { TenantEntityMt } from '@d8d/tenant-module-mt'

// 租户路由注册
export const tenantApiRoutes = api.route('/api/v1/tenants', tenantRoutes)
export const tenantAuthApiRoutes = api.route('/api/v1/tenant-auth', tenantAuthRoutes)

// 租户实体添加到数据库初始化
initializeDataSource([
  // ... 现有实体
  TenantEntityMt  // 添加租户实体
])

超级管理员认证机制 [Source: packages/tenant-module-mt/src/routes/auth.routes.ts]

  • 使用固定的超级管理员账号:用户名 superadmin,密码 admin123
  • 超级管理员ID固定为 1
  • 登录成功后生成JWT token
  • 租户管理操作需要超级管理员权限

租户管理功能 [Source: packages/tenant-module-mt/src/routes/index.ts]

  • 使用通用CRUD服务创建租户管理路由
  • 支持租户CRUD操作(创建、读取、更新、删除)
  • 支持搜索字段:租户名称、代码、联系人姓名、电话
  • 使用租户认证中间件保护路由
  • 不使用数据权限控制,由超级管理员统一管理

基于故事008.001和008.002实现经验的注意事项

  • 包命名一致性: 确保server使用的租户模块包名与包实际名称一致
  • 导出验证: 基于故事008.001经验,需要验证租户模块包有正确的路由和实体导出
  • 依赖管理: 需要更新server的package.json,添加租户模块包依赖
  • 实体初始化: 需要将租户实体添加到数据库初始化列表
  • 向后兼容性: 保持现有API接口路径不变,新增租户相关API
  • 测试策略: 基于故事008.001经验,需要验证包导入、路由注册和功能测试

测试要求

  • 使用Vitest进行集成测试 [Source: architecture/tech-stack.md#新技术添加]
  • 验证租户管理路由在server环境下的正确性
  • 测试超级管理员认证功能
  • 确保租户数据管理功能正常工作
  • 执行回归测试确保现有功能不受影响

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

This section is populated by the development agent during implementation

Agent Model Used

James (Developer Agent)

Debug Log References

  • 检查了租户模块包的实际导出结构
  • 验证了server包中租户模块的集成情况
  • 运行了server集成测试验证功能
  • 检查了git提交历史确认完成状态
  • 修复了租户模块包内部测试的类型错误
  • 重构了路由聚合以支持RPC类型推断
  • 验证了所有16个测试通过

Completion Notes List

  1. 集成完成: 租户模块已成功集成到server中,包括依赖、实体和路由
  2. 功能验证: 租户CRUD操作、超级管理员认证功能已验证
  3. 测试状态: server集成测试通过,租户模块包内部测试已修复类型错误
  4. 路由聚合: 按照用户模块模式重构了路由聚合,支持RPC类型推断
  5. 向后兼容: 现有功能不受影响,新增租户相关API路径

File List

已修改文件:

  • packages/server/package.json - 添加租户模块依赖
  • packages/server/src/index.ts - 集成租户实体和路由
  • packages/tenant-module-mt/src/routes/index.ts - 修复数据权限配置,重构路由聚合
  • packages/tenant-module-mt/src/schemas/tenant.schema.ts - 修复配置类型定义
  • packages/tenant-module-mt/tests/integration/tenant-routes.integration.test.ts - 修复类型错误
  • packages/tenant-module-mt/tests/integration/auth-routes.integration.test.ts - 修复类型错误

相关提交:

  • 94470a8 - ✨ feat(tenant): 集成租户模块并添加相关路由
  • c29c223 - 📝 docs(story): 更新租户模块集成文档状态和完成信息

QA Results

Results from QA Agent QA review of the completed story implementation