|
@@ -0,0 +1,154 @@
|
|
|
|
|
+# Story 010.001: 修复公司创建功能
|
|
|
|
|
+
|
|
|
|
|
+## Status
|
|
|
|
|
+Draft
|
|
|
|
|
+
|
|
|
|
|
+## Story
|
|
|
|
|
+**As a** 系统管理员
|
|
|
|
|
+**I want** 能够成功创建新公司
|
|
|
|
|
+**so that** 正常管理公司信息
|
|
|
|
|
+
|
|
|
|
|
+## Acceptance Criteria
|
|
|
|
|
+1. 填写公司名称"测试"及相关可选信息后,点击"创建"按钮能够成功生成新公司记录
|
|
|
|
|
+2. 创建成功后页面显示新创建的公司记录
|
|
|
|
|
+3. 错误处理机制完善,能够显示具体的错误信息
|
|
|
|
|
+
|
|
|
|
|
+## Tasks / Subtasks
|
|
|
|
|
+- [ ] 分析公司创建失败的根本原因 (AC: 1, 3)
|
|
|
|
|
+ - [ ] 检查前端表单验证逻辑
|
|
|
|
|
+ - [ ] 检查后端API参数处理
|
|
|
|
|
+ - [ ] 检查数据库约束和唯一性检查
|
|
|
|
|
+ - [ ] 检查错误处理机制
|
|
|
|
|
+- [ ] 修复前端表单验证问题 (AC: 1, 3)
|
|
|
|
|
+ - [ ] 检查并修复CreateCompanySchema验证规则
|
|
|
|
|
+ - [ ] 确保必填字段验证正确
|
|
|
|
|
+ - [ ] 优化错误信息显示
|
|
|
|
|
+- [ ] 修复后端API处理逻辑 (AC: 1, 2, 3)
|
|
|
|
|
+ - [ ] 检查company.service.ts中的createCompany方法
|
|
|
|
|
+ - [ ] 验证数据转换和默认值设置
|
|
|
|
|
+ - [ ] 确保唯一性检查逻辑正确
|
|
|
|
|
+ - [ ] 优化错误响应格式
|
|
|
|
|
+- [ ] 修复数据库操作问题 (AC: 1, 2)
|
|
|
|
|
+ - [ ] 检查company.entity.ts中的实体定义
|
|
|
|
|
+ - [ ] 验证数据库约束和索引
|
|
|
|
|
+ - [ ] 确保软删除逻辑正确
|
|
|
|
|
+- [ ] 添加或修复集成测试 (AC: 1, 2, 3)
|
|
|
|
|
+ - [ ] 创建公司创建成功测试用例
|
|
|
|
|
+ - [ ] 创建公司创建失败测试用例(重复名称、无效参数等)
|
|
|
|
|
+ - [ ] 验证错误响应格式
|
|
|
|
|
+- [ ] 验证修复效果 (AC: 1, 2, 3)
|
|
|
|
|
+ - [ ] 手动测试公司创建功能
|
|
|
|
|
+ - [ ] 验证错误处理机制
|
|
|
|
|
+ - [ ] 确保页面正确显示新创建的公司
|
|
|
|
|
+
|
|
|
|
|
+## Dev Notes
|
|
|
|
|
+
|
|
|
|
|
+### 项目结构信息
|
|
|
|
|
+- **后端模块位置**: `allin-packages/company-module/` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
|
|
+- **UI模块位置**: `allin-packages/company-management-ui/` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
|
|
+- **公司实体文件**: `allin-packages/company-module/src/entities/company.entity.ts`
|
|
|
|
|
+- **公司服务文件**: `allin-packages/company-module/src/services/company.service.ts`
|
|
|
|
|
+- **公司路由文件**: `allin-packages/company-module/src/routes/company-custom.routes.ts`
|
|
|
|
|
+- **公司Schema文件**: `allin-packages/company-module/src/schemas/company.schema.ts`
|
|
|
|
|
+- **公司管理UI组件**: `allin-packages/company-management-ui/src/components/CompanyManagement.tsx`
|
|
|
|
|
+
|
|
|
|
|
+### 技术栈信息
|
|
|
|
|
+- **运行时**: Node.js 20.18.3 [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
|
|
+- **框架**: Hono 4.8.5 [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
|
|
+- **数据库**: PostgreSQL 17 [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
|
|
+- **ORM**: TypeORM 0.3.25 [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
|
|
+- **验证**: Zod [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
|
|
+
|
|
|
|
|
+### 数据模型信息
|
|
|
|
|
+- **公司实体字段**:
|
|
|
|
|
+ - `id`: number - 公司ID [Source: allin-packages/company-module/src/entities/company.entity.ts:13]
|
|
|
|
|
+ - `platformId`: number - 平台ID [Source: allin-packages/company-module/src/entities/company.entity.ts:22]
|
|
|
|
|
+ - `companyName`: string - 公司名称 [Source: allin-packages/company-module/src/entities/company.entity.ts:31]
|
|
|
|
|
+ - `contactPerson`: string - 联系人 [Source: allin-packages/company-module/src/entities/company.entity.ts:40]
|
|
|
|
|
+ - `contactPhone`: string - 联系电话 [Source: allin-packages/company-module/src/entities/company.entity.ts:49]
|
|
|
|
|
+ - `contactEmail`: string - 联系邮箱(可选)[Source: allin-packages/company-module/src/entities/company.entity.ts:58]
|
|
|
|
|
+ - `address`: string - 地址(可选)[Source: allin-packages/company-module/src/entities/company.entity.ts:67]
|
|
|
|
|
+ - `status`: number - 状态(1-正常,0-禁用)[Source: allin-packages/company-module/src/entities/company.entity.ts:75]
|
|
|
|
|
+ - `createTime`: Date - 创建时间 [Source: allin-packages/company-module/src/entities/company.entity.ts:83]
|
|
|
|
|
+ - `updateTime`: Date - 更新时间 [Source: allin-packages/company-module/src/entities/company.entity.ts:92]
|
|
|
|
|
+- **唯一性约束**: 公司名称在同一平台下必须唯一 [Source: allin-packages/company-module/src/entities/company.entity.ts:5]
|
|
|
|
|
+- **关联关系**: 公司关联平台(多对一)[Source: allin-packages/company-module/src/entities/company.entity.ts:94]
|
|
|
|
|
+
|
|
|
|
|
+### API端点信息
|
|
|
|
|
+- **创建公司端点**: POST `/createCompany` [Source: allin-packages/company-module/src/routes/company-custom.routes.ts:19]
|
|
|
|
|
+- **请求体Schema**: CreateCompanySchema [Source: allin-packages/company-module/src/schemas/company.schema.ts:51]
|
|
|
|
|
+- **响应格式**: `{ success: boolean }` [Source: allin-packages/company-module/src/routes/company-custom.routes.ts:34]
|
|
|
|
|
+- **错误响应**: 400(参数错误或名称重复),500(创建失败)[Source: allin-packages/company-module/src/routes/company-custom.routes.ts:39-50]
|
|
|
|
|
+
|
|
|
|
|
+### Schema验证规则
|
|
|
|
|
+- **公司名称**: 必填,1-100字符 [Source: allin-packages/company-module/src/schemas/company.schema.ts:56]
|
|
|
|
|
+- **平台ID**: 可选,正整数 [Source: allin-packages/company-module/src/schemas/company.schema.ts:52]
|
|
|
|
|
+- **联系人**: 可选,最大50字符 [Source: allin-packages/company-module/src/schemas/company.schema.ts:60]
|
|
|
|
|
+- **联系电话**: 可选,最大20字符 [Source: allin-packages/company-module/src/schemas/company.schema.ts:64]
|
|
|
|
|
+- **联系邮箱**: 可选,有效邮箱格式,最大100字符 [Source: allin-packages/company-module/src/schemas/company.schema.ts:68]
|
|
|
|
|
+- **地址**: 可选,最大200字符 [Source: allin-packages/company-module/src/schemas/company.schema.ts:72]
|
|
|
|
|
+
|
|
|
|
|
+### 服务层逻辑
|
|
|
|
|
+- **创建方法**: `createCompany(data: Partial<Company>): Promise<boolean>` [Source: allin-packages/company-module/src/services/company.service.ts:137]
|
|
|
|
|
+- **唯一性检查**: 检查公司名称在同一平台下是否已存在 [Source: allin-packages/company-module/src/services/company.service.ts:17-24]
|
|
|
|
|
+- **默认值设置**:
|
|
|
|
|
+ - `contactEmail`: '' [Source: allin-packages/company-module/src/services/company.service.ts:28]
|
|
|
|
|
+ - `address`: '' [Source: allin-packages/company-module/src/services/company.service.ts:29]
|
|
|
|
|
+ - `status`: 1 [Source: allin-packages/company-module/src/services/company.service.ts:31]
|
|
|
|
|
+ - `createTime`: new Date() [Source: allin-packages/company-module/src/services/company.service.ts:32]
|
|
|
|
|
+ - `updateTime`: new Date() [Source: allin-packages/company-module/src/services/company.service.ts:33]
|
|
|
|
|
+
|
|
|
|
|
+### 前端组件信息
|
|
|
|
|
+- **页面路径**: 搜索菜单 > 公司管理 > 创建公司 [Source: docs/prd/epic-010-system-bug-fixes.md:41]
|
|
|
|
|
+- **创建按钮**: data-testid="create-company-button" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:217]
|
|
|
|
|
+- **表单字段**:
|
|
|
|
|
+ - 公司名称: data-testid="create-company-name-input" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:358]
|
|
|
|
|
+ - 联系人: data-testid="create-company-contact-person-input" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:375]
|
|
|
|
|
+ - 联系电话: data-testid="create-company-contact-phone-input" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:392]
|
|
|
|
|
+ - 联系邮箱: data-testid="create-company-contact-email-input" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:410]
|
|
|
|
|
+ - 地址: data-testid="create-company-address-input" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:427]
|
|
|
|
|
+- **提交按钮**: data-testid="submit-create-company-button" [Source: allin-packages/company-management-ui/src/components/CompanyManagement.tsx:446]
|
|
|
|
|
+
|
|
|
|
|
+### 可能的问题点(基于史诗描述)
|
|
|
|
|
+1. 表单验证规则问题
|
|
|
|
|
+2. API参数处理问题
|
|
|
|
|
+3. 数据库约束问题
|
|
|
|
|
+4. 错误处理机制不完善
|
|
|
|
|
+
|
|
|
|
|
+### 后端模块包规范
|
|
|
|
|
+- **包结构**: 遵循标准模块包结构 [Source: architecture/backend-module-package-standards.md#包结构规范]
|
|
|
|
|
+- **实体设计**: 使用id作为主键名,字段命名转换 [Source: architecture/backend-module-package-standards.md#实体设计规范]
|
|
|
|
|
+- **唯一性约束**: 使用@Unique装饰器 [Source: architecture/backend-module-package-standards.md#唯一性约束]
|
|
|
|
|
+
|
|
|
|
|
+### Testing
|
|
|
|
|
+- **测试框架**: Vitest 3.2.4 [Source: architecture/testing-strategy.md#工具版本]
|
|
|
|
|
+- **测试位置**: `allin-packages/company-module/tests/integration/` [Source: architecture/testing-strategy.md#集成测试]
|
|
|
|
|
+- **测试标准**: 集成测试覆盖率目标 ≥ 60% [Source: architecture/testing-strategy.md#集成测试]
|
|
|
|
|
+- **测试模式**: 使用shared-test-util进行数据库测试 [Source: architecture/testing-strategy.md#集成测试]
|
|
|
|
|
+- **测试要求**:
|
|
|
|
|
+ - 创建公司成功测试
|
|
|
|
|
+ - 公司名称重复测试
|
|
|
|
|
+ - 参数验证失败测试
|
|
|
|
|
+ - 错误响应格式测试
|
|
|
|
|
+
|
|
|
|
|
+### 项目结构注意事项
|
|
|
|
|
+- 公司模块位于allin-packages目录下,与核心packages目录分开
|
|
|
|
|
+- 需要确保模块间的依赖关系正确
|
|
|
|
|
+- 测试数据库配置需要正确设置
|
|
|
|
|
+
|
|
|
|
|
+## Change Log
|
|
|
|
|
+| Date | Version | Description | Author |
|
|
|
|
|
+|------|---------|-------------|--------|
|
|
|
|
|
+| 2025-12-12 | 1.0 | 故事创建 | Bob (Scrum Master) |
|
|
|
|
|
+
|
|
|
|
|
+## Dev Agent Record
|
|
|
|
|
+
|
|
|
|
|
+### Agent Model Used
|
|
|
|
|
+
|
|
|
|
|
+### Debug Log References
|
|
|
|
|
+
|
|
|
|
|
+### Completion Notes List
|
|
|
|
|
+
|
|
|
|
|
+### File List
|
|
|
|
|
+
|
|
|
|
|
+## QA Results
|