瀏覽代碼

📝 docs(story-007.001): 添加自定义实现分析

- 分析channel_info模块中不适用于共享CRUD包的功能
- 添加自定义业务逻辑任务(AC: 3.1):覆盖GenericCrudService方法
  - 覆盖create方法:渠道名称唯一性检查
  - 覆盖update方法:渠道存在性和名称重复检查
  - 覆盖delete方法:考虑软删除
  - 自定义findAll方法:返回分页格式
  - 实现searchByName方法:按名称模糊搜索
  - 处理默认值设置
- 添加自定义路由处理任务(AC: 4.1):适配业务逻辑
  - 自定义6个路由端点的返回格式和参数处理
  - 处理布尔返回值、分页参数、搜索功能
- 在Dev Notes中添加详细的自定义实现分析

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 3 周之前
父節點
當前提交
62de91c9e2
共有 1 個文件被更改,包括 72 次插入0 次删除
  1. 72 0
      docs/stories/007.001.transplant-channel-management-module.story.md

+ 72 - 0
docs/stories/007.001.transplant-channel-management-module.story.md

@@ -52,6 +52,25 @@ Draft
     - **业务逻辑**: 保持源服务中的重复检查、分页查询等逻辑
   - [ ] 保持原有业务逻辑,适配新的服务架构
   - [ ] 添加错误处理和日志记录
+- [ ] 实现自定义业务逻辑(覆盖GenericCrudService方法) (AC: 3.1)
+  - [ ] 覆盖`create`方法:添加渠道名称唯一性检查
+    - **业务逻辑**: 检查`channel_name`是否已存在,避免重复创建
+    - **源逻辑**: `channel.service.ts:14-37`中的重复检查逻辑
+  - [ ] 覆盖`update`方法:添加渠道存在性和名称重复检查
+    - **业务逻辑**: 检查渠道是否存在,检查更新后的名称是否与其他渠道重复
+    - **源逻辑**: `channel.service.ts:69-93`中的更新验证逻辑
+  - [ ] 覆盖`delete`方法:保持硬删除或改为软删除
+    - **当前逻辑**: 硬删除(`channel.service.ts:39-42`)
+    - **考虑**: 使用`status`字段实现软删除
+  - [ ] 自定义`findAll`方法:返回`{ data: Channel[], total: number }`格式
+    - **返回格式**: 保持源服务的分页返回格式
+    - **源逻辑**: `channel.service.ts:44-51`中的分页查询
+  - [ ] 实现`searchByName`方法:按名称模糊搜索
+    - **搜索逻辑**: 使用`Like`操作符进行模糊匹配
+    - **源逻辑**: `channel.service.ts:53-63`中的搜索功能
+  - [ ] 处理默认值设置:创建时设置默认值
+    - **默认字段**: `contact_person`, `contact_phone`, `channel_type`, `description`, `status`, `create_time`, `update_time`
+    - **源逻辑**: `channel.service.ts:24-33`中的默认值设置
 - [ ] 完成路由层转换:从NestJS控制器转换为Hono路由 (AC: 4)
   - [ ] 分析源控制器`allin_system-master/server/src/channel_info/channel.controller.ts`
     - **源文件**: `allin_system-master/server/src/channel_info/channel.controller.ts`
@@ -64,6 +83,28 @@ Draft
   - [ ] 添加认证中间件集成
     - **参考**: `packages/auth-module/src/middleware/auth.middleware.ts`
   - [ ] 配置OpenAPI文档和参数验证
+- [ ] 实现自定义路由处理(适配业务逻辑) (AC: 4.1)
+  - [ ] 自定义`POST /createChannel`路由:处理布尔返回值
+    - **返回格式**: 成功返回`{ success: true }`,失败返回`{ success: false, message: "渠道名称已存在" }`
+    - **源逻辑**: `channel.controller.ts:11-14`,`channel.service.ts:14-37`
+  - [ ] 自定义`POST /deleteChannel`路由:处理布尔返回值
+    - **返回格式**: 成功返回`{ success: true }`,失败返回`{ success: false }`
+    - **源逻辑**: `channel.controller.ts:16-19`,`channel.service.ts:39-42`
+  - [ ] 自定义`POST /updateChannel`路由:处理布尔返回值
+    - **返回格式**: 成功返回`{ success: true }`,失败返回`{ success: false, message: "渠道不存在或名称重复" }`
+    - **源逻辑**: `channel.controller.ts:21-24`,`channel.service.ts:69-93`
+  - [ ] 自定义`GET /getAllChannels`路由:处理分页参数和返回格式
+    - **参数**: `skip`, `take`查询参数
+    - **返回格式**: `{ data: Channel[], total: number }`
+    - **源逻辑**: `channel.controller.ts:26-29`,`channel.service.ts:44-51`
+  - [ ] 自定义`GET /searchChannels`路由:处理搜索功能
+    - **参数**: `name`(搜索关键词),`skip`, `take`(分页参数)
+    - **返回格式**: `{ data: Channel[], total: number }`
+    - **源逻辑**: `channel.controller.ts:31-34`,`channel.service.ts:53-63`
+  - [ ] 自定义`GET /getChannel/:id`路由:处理单个渠道查询
+    - **参数**: `id`路径参数
+    - **返回格式**: `Channel`对象或`null`
+    - **源逻辑**: `channel.controller.ts:36-39`,`channel.service.ts:65-67`
 - [ ] 完成验证系统转换:从class-validator DTO转换为Zod Schema (AC: 5)
   - [ ] 分析源DTO`allin_system-master/server/src/channel_info/channel.dto.ts`
     - **源文件**: `allin_system-master/server/src/channel_info/channel.dto.ts`
@@ -118,6 +159,37 @@ Draft
 - **转换要求**:下划线命名 → 驼峰命名,添加详细TypeORM配置
 - **表名保持**:`channel_info`表名不变
 
+### 自定义实现分析
+- **需要覆盖GenericCrudService的方法**:
+  - **`create`方法**:需要添加渠道名称唯一性检查,避免重复创建
+    - **源逻辑**: `channel.service.ts:14-37` - 检查`channel_name`是否已存在
+    - **默认值设置**: 创建时设置`contact_person`, `contact_phone`, `channel_type`, `description`为空字符串,`status`为1,`create_time`和`update_time`为当前时间
+  - **`update`方法**:需要检查渠道存在性和名称重复性
+    - **源逻辑**: `channel.service.ts:69-93` - 检查渠道是否存在,检查更新后的名称是否与其他渠道重复
+    - **更新时间**: 自动设置`update_time`为当前时间
+  - **`delete`方法**:当前为硬删除,考虑改为软删除(使用`status`字段)
+    - **源逻辑**: `channel.service.ts:39-42` - 直接删除记录
+    - **建议**: 改为软删除,设置`status`为0或删除状态
+  - **`findAll`方法**:需要返回`{ data: Channel[], total: number }`格式
+    - **源逻辑**: `channel.service.ts:44-51` - 使用`findAndCount`返回数据和总数
+    - **排序**: 默认按`channel_id`降序排列
+  - **自定义`searchByName`方法**:按名称模糊搜索
+    - **源逻辑**: `channel.service.ts:53-63` - 使用`Like`操作符进行模糊匹配
+    - **返回格式**: `{ data: Channel[], total: number }`
+
+- **需要自定义路由处理**:
+  - **布尔返回值处理**:`createChannel`, `deleteChannel`, `updateChannel`返回`boolean`而非实体对象
+    - **成功**: `{ success: true }`
+    - **失败**: `{ success: false, message: "错误信息" }`
+  - **分页参数处理**:`getAllChannels`和`searchChannels`需要处理`skip`和`take`查询参数
+  - **搜索功能**:`searchChannels`需要处理`name`搜索参数
+
+- **与GenericCrudService的差异**:
+  - **返回值格式**:源服务返回布尔值或分页对象,GenericCrudService返回实体对象
+  - **验证逻辑**:源服务有自定义的业务验证逻辑(名称重复检查)
+  - **默认值设置**:源服务在创建时设置多个字段的默认值
+  - **搜索功能**:源服务有专门的按名称搜索功能
+
 ### API规范
 - **现有API端点** [Source: allin_system-master/server/src/channel_info/channel.controller.ts]:
   - `POST /channel/createChannel` - 创建渠道