Kaynağa Gözat

📝 docs(story): add geo-areas module package split story

- 创建"005.002.geo-areas-module.md"文档,记录地区模块拆分需求
- 定义10项验收标准,包括包结构、代码迁移、配置和测试要求
- 规划六个阶段任务,涵盖基础设施创建到集成验证全过程
- 提供技术架构信息、依赖关系设计和测试标准等技术细节
- 明确关键依赖版本对齐要求和向后兼容性保证措施
yourname 4 hafta önce
ebeveyn
işleme
58857c3c13
1 değiştirilmiş dosya ile 191 ekleme ve 0 silme
  1. 191 0
      docs/stories/005.002.geo-areas-module.md

+ 191 - 0
docs/stories/005.002.geo-areas-module.md

@@ -0,0 +1,191 @@
+# Story 005.002: Geo Areas Module
+
+## Status
+Draft
+
+## Story
+**As a** 系统架构师,
+**I want** 从 mini-auth-demo/packages/server/src 拆分反哺省市区三级联动数据管理和API,
+**so that** 实现独立的地区模块包,为项目提供完整的中国行政区划管理功能
+
+## Acceptance Criteria
+1. 创建 geo-areas package 包配置和目录结构
+2. 迁移地区实体类 (AreaEntity) 和枚举定义 (AreaLevel)
+3. 迁移地区服务类 (AreaService) 和业务逻辑
+4. 迁移地区 Schema 定义和验证规则
+5. 迁移地区 API 路由 (公共接口和管理接口)
+6. 配置 TypeScript 编译选项 (包含 `"composite": true`)
+7. 编写单元测试和集成测试
+8. 配置 pnpm workspace 依赖关系
+9. 验证依赖版本与 packages/server 保持一致
+10. 所有测试通过,覆盖率满足要求
+
+## Tasks / Subtasks
+
+### 第一阶段:包基础设施创建
+- [ ] 创建 geo-areas package 目录结构 (AC: 1)
+  - [ ] 创建 `packages/geo-areas/package.json` 配置
+  - [ ] 创建 `packages/geo-areas/tsconfig.json` TypeScript 配置
+  - [ ] 创建 `packages/geo-areas/vitest.config.ts` 测试配置
+  - [ ] 创建 `packages/geo-areas/src/index.ts` 包入口
+
+### 第二阶段:实体和服务迁移
+- [ ] 迁移地区实体类 (AC: 2)
+  - [ ] 迁移 `AreaEntity` 实体类
+  - [ ] 迁移 `AreaLevel` 枚举定义
+  - [ ] 更新导入路径和依赖
+- [ ] 迁移地区服务类 (AC: 3)
+  - [ ] 迁移 `AreaService` 服务类
+  - [ ] 重构数据库连接使用 shared-utils
+  - [ ] 更新服务依赖关系
+
+### 第三阶段:Schema 和验证迁移
+- [ ] 迁移地区 Schema 定义 (AC: 4)
+  - [ ] 迁移所有 Zod Schema 定义
+  - [ ] 迁移输入/输出类型定义
+  - [ ] 更新 Schema 导入路径
+
+### 第四阶段:API 路由迁移
+- [ ] 迁移公共地区 API 路由 (AC: 5)
+  - [ ] 迁移 `/api/areas` 路由 (省份、城市、区县查询)
+  - [ ] 更新路由导入和服务依赖
+- [ ] 迁移管理地区 API 路由 (AC: 5)
+  - [ ] 迁移 `/api/admin/areas` 路由 (CRUD 操作)
+  - [ ] 迁移树形结构查询路由
+  - [ ] 更新认证中间件依赖
+
+### 第五阶段:测试和验证
+- [ ] 迁移现有集成测试 (AC: 7)
+  - [ ] 迁移 `mini-auth-demo/web/tests/integration/server/api/areas/index.test.ts`
+  - [ ] 使用 shared-test-util 测试工具
+  - [ ] 更新测试导入路径和依赖
+  - [ ] 验证迁移后的测试通过
+- [ ] 验证依赖版本对齐 (AC: 9)
+  - [ ] 检查所有外部依赖版本与 packages/server 保持一致
+  - [ ] 验证关键依赖版本完全一致
+
+### 第六阶段:集成和验证
+- [ ] 配置 pnpm workspace 依赖关系 (AC: 8)
+  - [ ] 更新根目录 package.json workspace 配置
+  - [ ] 配置 geo-areas package 依赖关系
+  - [ ] 验证依赖解析正确
+- [ ] 执行回归测试 (AC: 10)
+  - [ ] 运行所有单元测试
+  - [ ] 运行集成测试
+  - [ ] 验证现有功能无回归
+
+## Dev Notes
+
+### 技术架构信息
+- **项目技术栈**: Node.js 20.19.2 + TypeScript + Hono + TypeORM + PostgreSQL [Source: architecture/tech-stack.md#现有技术栈维护]
+- **包管理**: pnpm workspace [Source: architecture/source-tree.md#包管理]
+- **模块化架构**: 遵循现有的基础设施包结构 [Source: architecture/source-tree.md#项目结构]
+
+### 现有代码结构参考
+- **当前地区模块位置**: `mini-auth-demo/packages/server/src/modules/areas/`
+  - `area.entity.ts` - 地区实体 (省市区三级树形结构)
+  - `area.service.ts` - 地区服务 (树形查询、路径查询、层级查询)
+  - `area.schema.ts` - 地区 Schema 定义和验证规则
+- **当前 API 路由位置**:
+  - `mini-auth-demo/packages/server/src/api/areas/index.ts` - 公共地区 API
+  - `mini-auth-demo/packages/server/src/api/admin/areas/index.ts` - 管理地区 API
+  - `mini-auth-demo/packages/server/src/api/admin/areas/tree.ts` - 树形结构 API
+- **当前集成测试位置**:
+  - `mini-auth-demo/web/tests/integration/server/api/areas/index.test.ts` - 公共地区 API 集成测试
+    - 测试省份查询 API (`/areas/provinces`)
+    - 测试城市查询 API (`/areas/cities`)
+    - 测试区县查询 API (`/areas/districts`)
+    - 包含禁用状态过滤验证
+
+### Package 配置要求
+- 所有 package 使用 TypeScript 编译 [Source: architecture/coding-standards.md#现有标准合规性]
+- 遵循现有的代码风格和命名规范 [Source: architecture/coding-standards.md#现有标准合规性]
+- 提供完整的类型定义导出
+- 配置适当的构建脚本
+- **依赖版本对齐**: 所有外部依赖版本必须与 packages/server 保持一致
+- **TypeScript 配置**: tsconfig.json 必须设置 `"composite": true`
+- **Package 输出配置**: package.json 中的 `"main"`、`"types"` 和 `"exports"` 必须指向 `src` 目录
+
+### 依赖关系设计
+```json
+// geo-areas package.json 依赖关系
+{
+  "name": "@d8d/geo-areas",
+  "dependencies": {
+    "@d8d/shared-types": "workspace:*",
+    "@d8d/shared-utils": "workspace:*",
+    "@d8d/shared-crud": "workspace:*",
+    "typeorm": "^0.3.20"
+  },
+  "devDependencies": {
+    "@d8d/shared-test-util": "workspace:*"
+  }
+}
+```
+
+### 关键依赖版本对齐要求
+**必须与 packages/server 完全一致的依赖版本:** [Source: architecture/tech-stack.md#现有技术栈维护]
+- `typeorm`: ^0.3.20
+- `hono`: ^4.8.5
+- `zod`: ^4.1.12
+- `@hono/zod-openapi`: 1.0.2
+
+### 测试标准
+- **测试框架**: Vitest [Source: architecture/testing-strategy.md#测试金字塔策略]
+- **测试位置**: `packages/geo-areas/tests/` 目录 [Source: architecture/testing-strategy.md#测试位置]
+  - `tests/unit/` - 单元测试
+  - `tests/integration/` - 集成测试
+- **测试要求**: 单元测试覆盖核心功能,集成测试验证包间协作 [Source: architecture/testing-strategy.md#测试金字塔策略]
+- **测试执行**: `pnpm test` 在 geo-areas package 中运行
+- **测试覆盖率目标**: [Source: architecture/testing-strategy.md#测试覆盖率标准]
+  - 单元测试: ≥ 80%
+  - 集成测试: ≥ 60%
+  - 关键模块 (地区服务、API路由): ≥ 90%
+
+### 向后兼容性保证
+- 现有 API 接口保持不变
+- 数据库操作逻辑保持一致
+- 错误响应格式保持不变
+- 仅重构内部实现,不改变外部行为
+
+### Testing
+
+#### 测试框架和位置 [Source: architecture/testing-strategy.md#测试金字塔策略]
+- **测试框架**: Vitest + hono/testing
+- **测试位置**: `packages/geo-areas/tests/`
+  - `tests/unit/` - 单元测试
+  - `tests/integration/` - 集成测试
+
+#### 测试标准和覆盖率要求 [Source: architecture/testing-strategy.md#测试覆盖率标准]
+- **单元测试覆盖率**: ≥ 80%
+- **集成测试覆盖率**: ≥ 60%
+- **关键模块覆盖率**: ≥ 90%
+
+#### 测试数据管理 [Source: architecture/testing-strategy.md#测试数据管理]
+- 使用测试数据工厂模式
+- 集成测试使用专用测试数据库,事务回滚
+- 单元测试使用内存数据库或完全 mock
+
+#### API 测试要求 [Source: architecture/testing-strategy.md#安全测试策略]
+- 所有 API 端点必须测试输入验证
+- 测试认证和权限控制
+- 测试错误处理场景
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-11-10 | 1.0 | 创建地区模块包故事草稿 | Bob (Scrum Master) |
+
+## Dev Agent Record
+*此部分由开发代理在实现过程中填写*
+
+### Agent Model Used
+
+### Debug Log References
+
+### Completion Notes List
+
+### File List
+
+## QA Results
+*此部分由 QA 代理在完成故事实现后填写*