|
@@ -0,0 +1,190 @@
|
|
|
|
|
+# Story 010.001: system-config-mt-module
|
|
|
|
|
+
|
|
|
|
|
+## Status
|
|
|
|
|
+Draft
|
|
|
|
|
+
|
|
|
|
|
+## Story
|
|
|
|
|
+**As a** 系统管理员,
|
|
|
|
|
+**I want** 在多租户核心包中创建系统配置模块,实现系统配置实体、Schema定义,并复用共享CRUD包自动获得完整CRUD功能,
|
|
|
|
|
+**so that** 可以为小程序登录、支付等场景提供租户隔离的系统配置管理
|
|
|
|
|
+
|
|
|
|
|
+## Acceptance Criteria
|
|
|
|
|
+1. 在多租户核心包中创建系统配置模块 (`packages/core-module-mt/system-config-module-mt/`)
|
|
|
|
|
+2. 实现系统配置实体,包含租户ID、配置键、配置值、描述等字段
|
|
|
|
|
+3. 创建对应的Zod Schema定义用于验证
|
|
|
|
|
+4. 继承GenericCrudService抽象类,自动获得多租户隔离、用户跟踪、完整CRUD API
|
|
|
|
|
+5. 使用createCrudRoutes生成完整的CRUD路由
|
|
|
|
|
+6. 验证现有功能保持完整,无回归
|
|
|
|
|
+
|
|
|
|
|
+## Tasks / Subtasks
|
|
|
|
|
+- [ ] 创建系统配置多租户模块目录结构 (AC: 1)
|
|
|
|
|
+ - [ ] 创建 `packages/core-module-mt/system-config-module-mt/` 目录
|
|
|
|
|
+ - [ ] 遵循现有模块结构模式
|
|
|
|
|
+- [ ] 实现系统配置实体 (AC: 2)
|
|
|
|
|
+ - [ ] 创建 `src/entities/system-config.entity.mt.ts`
|
|
|
|
|
+ - [ ] 定义租户ID、配置键、配置值、描述等字段
|
|
|
|
|
+ - [ ] 添加TypeORM装饰器
|
|
|
|
|
+- [ ] 创建Schema定义 (AC: 3)
|
|
|
|
|
+ - [ ] 创建 `src/schemas/system-config.schema.mt.ts`
|
|
|
|
|
+ - [ ] 定义创建、更新、获取、列表Schema
|
|
|
|
|
+ - [ ] 使用Zod OpenAPI扩展
|
|
|
|
|
+- [ ] 实现系统配置服务 (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/services/system-config.service.mt.ts`
|
|
|
|
|
+ - [ ] 继承GenericCrudService抽象类
|
|
|
|
|
+ - [ ] 配置租户隔离选项
|
|
|
|
|
+ - [ ] 配置用户跟踪选项
|
|
|
|
|
+- [ ] 生成CRUD路由 (AC: 5)
|
|
|
|
|
+ - [ ] 创建 `src/routes/system-config.routes.mt.ts`
|
|
|
|
|
+ - [ ] 使用createCrudRoutes生成完整路由
|
|
|
|
|
+ - [ ] 配置租户选项
|
|
|
|
|
+- [ ] 创建模块导出 (AC: 1)
|
|
|
|
|
+ - [ ] 创建 `src/index.mt.ts` 导出实体、服务、路由
|
|
|
|
|
+ - [ ] 配置模块入口
|
|
|
|
|
+- [ ] 验证现有功能 (AC: 6)
|
|
|
|
|
+ - [ ] 运行现有测试确保无回归
|
|
|
|
|
+ - [ ] 验证共享CRUD包集成正常
|
|
|
|
|
+
|
|
|
|
|
+## Dev Notes
|
|
|
|
|
+
|
|
|
|
|
+### 技术栈信息 [Source: architecture/tech-stack.md]
|
|
|
|
|
+- **运行时**: Node.js 20.18.3
|
|
|
|
|
+- **框架**: Hono 4.8.5 (Web框架和API路由)
|
|
|
|
|
+- **数据库**: PostgreSQL 17 (通过TypeORM)
|
|
|
|
|
+- **ORM**: TypeORM 0.3.25 (实体管理)
|
|
|
|
|
+- **验证**: Zod + @hono/zod-openapi
|
|
|
|
|
+
|
|
|
|
|
+### 项目结构信息 [Source: architecture/source-tree.md]
|
|
|
|
|
+- **包位置**: `packages/core-module-mt/system-config-module-mt/`
|
|
|
|
|
+- **包架构层次**: 多租户核心包中的业务模块
|
|
|
|
|
+- **文件组织**:
|
|
|
|
|
+ - `src/entities/` - 实体定义 (使用 `.mt.ts` 后缀)
|
|
|
|
|
+ - `src/schemas/` - Zod Schema定义 (使用 `.mt.ts` 后缀)
|
|
|
|
|
+ - `src/services/` - 服务实现 (使用 `.mt.ts` 后缀)
|
|
|
|
|
+ - `src/routes/` - API路由 (使用 `.mt.ts` 后缀)
|
|
|
|
|
+ - `tests/` - 测试文件
|
|
|
|
|
+- **现有模块参考**:
|
|
|
|
|
+ - `auth-module-mt/` - 认证模块
|
|
|
|
|
+ - `user-module-mt/` - 用户模块
|
|
|
|
|
+ - `file-module-mt/` - 文件模块
|
|
|
|
|
+
|
|
|
|
|
+### 共享CRUD集成模式 [Source: packages/shared-crud/src/services/generic-crud.service.ts]
|
|
|
|
|
+- **继承模式**: 继承 `GenericCrudService<T>` 抽象类
|
|
|
|
|
+- **租户配置**: 通过 `tenantOptions` 配置租户隔离
|
|
|
|
|
+- **用户跟踪**: 通过 `userTracking` 配置用户跟踪
|
|
|
|
|
+- **核心方法**: `getList()`, `getById()`, `create()`, `update()`, `delete()`
|
|
|
|
|
+
|
|
|
|
|
+### 路由生成模式 [Source: packages/shared-crud/src/routes/generic-crud.routes.ts]
|
|
|
|
|
+- **路由生成**: 使用 `createCrudRoutes()` 函数
|
|
|
|
|
+- **自动生成**: 完整的CRUD路由 (GET, POST, PUT, DELETE)
|
|
|
|
|
+- **验证集成**: 自动集成Zod Schema验证
|
|
|
|
|
+- **租户上下文**: 自动处理租户ID提取和设置
|
|
|
|
|
+
|
|
|
|
|
+### 实体设计模式 [Source: docs/epic-010-system-config-multi-tenant.md]
|
|
|
|
|
+```typescript
|
|
|
|
|
+@Entity('system_config')
|
|
|
|
|
+export class SystemConfig {
|
|
|
|
|
+ @PrimaryGeneratedColumn()
|
|
|
|
|
+ id!: number;
|
|
|
|
|
+
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ tenantId!: number; // 自动通过共享CRUD的tenantOptions设置
|
|
|
|
|
+
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ configKey!: string;
|
|
|
|
|
+
|
|
|
|
|
+ @Column('text')
|
|
|
|
|
+ configValue!: string;
|
|
|
|
|
+
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ description?: string;
|
|
|
|
|
+
|
|
|
|
|
+ // 自动通过共享CRUD的userTracking设置
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ createdBy?: number;
|
|
|
|
|
+
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ updatedBy?: number;
|
|
|
|
|
+
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ createdAt!: Date;
|
|
|
|
|
+
|
|
|
|
|
+ @Column()
|
|
|
|
|
+ updatedAt!: Date;
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 服务集成模式 [Source: docs/epic-010-system-config-multi-tenant.md]
|
|
|
|
|
+```typescript
|
|
|
|
|
+export class SystemConfigService extends GenericCrudService<SystemConfig> {
|
|
|
|
|
+ constructor(dataSource: DataSource) {
|
|
|
|
|
+ super(dataSource, SystemConfig, {
|
|
|
|
|
+ tenantOptions: {
|
|
|
|
|
+ enabled: true,
|
|
|
|
|
+ tenantIdField: 'tenantId',
|
|
|
|
|
+ autoExtractFromContext: true
|
|
|
|
|
+ },
|
|
|
|
|
+ userTracking: {
|
|
|
|
|
+ createdByField: 'createdBy',
|
|
|
|
|
+ updatedByField: 'updatedBy'
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 路由生成模式 [Source: docs/epic-010-system-config-multi-tenant.md]
|
|
|
|
|
+```typescript
|
|
|
|
|
+const systemConfigRoutes = createCrudRoutes({
|
|
|
|
|
+ entity: SystemConfig,
|
|
|
|
|
+ createSchema: CreateSystemConfigSchema,
|
|
|
|
|
+ updateSchema: UpdateSystemConfigSchema,
|
|
|
|
|
+ getSchema: SystemConfigSchema,
|
|
|
|
|
+ listSchema: SystemConfigSchema,
|
|
|
|
|
+ tenantOptions: { enabled: true }
|
|
|
|
|
+});
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 测试
|
|
|
|
|
+
|
|
|
|
|
+#### 测试标准 [Source: architecture/testing-strategy.md]
|
|
|
|
|
+- **测试框架**: Vitest + hono/testing
|
|
|
|
|
+- **测试位置**: `packages/core-module-mt/system-config-module-mt/tests/`
|
|
|
|
|
+- **测试类型**: 单元测试 + 集成测试
|
|
|
|
|
+- **覆盖率目标**: 单元测试 ≥ 80%,集成测试 ≥ 60%
|
|
|
|
|
+
|
|
|
|
|
+#### 测试文件结构
|
|
|
|
|
+- `tests/unit/` - 单元测试
|
|
|
|
|
+ - `system-config.service.test.ts` - 服务单元测试
|
|
|
|
|
+ - `system-config.entity.test.ts` - 实体单元测试
|
|
|
|
|
+- `tests/integration/` - 集成测试
|
|
|
|
|
+ - `system-config.routes.integration.test.ts` - 路由集成测试
|
|
|
|
|
+
|
|
|
|
|
+#### 现有模块参考模式
|
|
|
|
|
+- **认证模块**: `packages/core-module-mt/auth-module-mt/`
|
|
|
|
|
+- **用户模块**: `packages/core-module-mt/user-module-mt/`
|
|
|
|
|
+- **文件模块**: `packages/core-module-mt/file-module-mt/`
|
|
|
|
|
+- **命名约定**: 所有文件使用 `.mt.ts` 后缀,遵循多租户包命名规范
|
|
|
|
|
+
|
|
|
|
|
+#### 测试要求
|
|
|
|
|
+- 验证租户隔离功能
|
|
|
|
|
+- 验证用户跟踪功能
|
|
|
|
|
+- 验证完整的CRUD操作
|
|
|
|
|
+- 验证Schema验证
|
|
|
|
|
+
|
|
|
|
|
+## Change Log
|
|
|
|
|
+| Date | Version | Description | Author |
|
|
|
|
|
+|------|---------|-------------|--------|
|
|
|
|
|
+| 2025-11-19 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
|
|
|
|
|
+| 2025-11-19 | 1.1 | 调整模块位置到core-module-mt包内 | Bob (Scrum Master) |
|
|
|
|
|
+
|
|
|
|
|
+## Dev Agent Record
|
|
|
|
|
+
|
|
|
|
|
+### Agent Model Used
|
|
|
|
|
+
|
|
|
|
|
+### Debug Log References
|
|
|
|
|
+
|
|
|
|
|
+### Completion Notes List
|
|
|
|
|
+
|
|
|
|
|
+### File List
|
|
|
|
|
+
|
|
|
|
|
+## QA Results
|