任务2.3

This commit is contained in:
2025-10-31 16:11:12 +08:00
parent d22ddac9cd
commit b44e1a0e7c
4 changed files with 165 additions and 83 deletions

View File

@@ -162,3 +162,70 @@
### Open Questions
- 暂无。
---
## `pig-farm` 模块重构设计
### Context
`monitor` 模块类似, `pig_farm_controller.go` 当前包含了将 `service` 层返回的 `models.PigHouse``models.Pen`
实体手动转换为 `dto.PigHouseResponse``dto.PenResponse` 的逻辑。此外,
控制器还处理了部分本应由服务层处理的业务错误判断 (例如 `service.ErrHouseNotFound`)。
这种模式导致了与 `monitor` 模块相同的职责不清、代码重复和可测试性差的问题。
### Goals / Non-Goals
#### Goals
- **迁移数据转换逻辑**: 将 `pig-farm` 模块中所有的数据转换逻辑从控制器层 (`pig_farm_controller.go`) 迁移到服务层 (
`pig_farm_service.go`)。
- **统一服务层接口**: 修改 `PigFarmService` 接口, 使其直接返回响应 DTO (`dto.XxxResponse`)。
- **简化控制器**: 精简 `PigFarmController` 中的代码, 移除所有 `models``dto` 的转换代码, 使其直接使用服务层返回的
DTO。
#### Non-Goals
- **不修改业务逻辑**: 本次重构严格保证业务逻辑不变。服务层将精确复制控制器层现有的转换逻辑, 不增加或减少任何字段。
- **不改变 API 契约**: API 的请求和响应对最终用户保持完全一致。
### Decisions
- **决策:在服务层完成 `models``dto` 的转换**
- **理由**: 与其他模块保持一致, 将数据转换视为服务层业务逻辑的一部分。这确保了服务接口的稳定性和调用方的便利性。
- **具体实现**: `pig_farm_service.go` 中的方法在从 `repository` 获取 `models` 实体后, 将其转换为对应的 `dto` 再返回。
### Migration Plan
1. **修改 `internal/app/service/pig_farm_service.go`**
- **更新 `PigFarmService` 接口**:
- `CreatePigHouse(...) (*models.PigHouse, error)` -> `CreatePigHouse(...) (*dto.PigHouseResponse, error)`
- `GetPigHouseByID(...) (*models.PigHouse, error)` -> `GetPigHouseByID(...) (*dto.PigHouseResponse, error)`
- `ListPigHouses(...) ([]models.PigHouse, error)` -> `ListPigHouses(...) ([]dto.PigHouseResponse, error)`
- `UpdatePigHouse(...) (*models.PigHouse, error)` -> `UpdatePigHouse(...) (*dto.PigHouseResponse, error)`
- `CreatePen(...) (*models.Pen, error)` -> `CreatePen(...) (*dto.PenResponse, error)`
- `UpdatePen(...) (*models.Pen, error)` -> `UpdatePen(...) (*dto.PenResponse, error)`
- `UpdatePenStatus(...) (*models.Pen, error)` -> `UpdatePenStatus(...) (*dto.PenResponse, error)`
- **实现数据转换**:
- 在上述每个方法的实现中, 在从 `repository` 获得 `models` 对象后, 添加代码将其转换为对应的 `dto.XxxResponse` 对象。
- 转换逻辑将严格按照 `pig_farm_controller.go` 中现有的实现, 确保字段一一对应, 无任何增删。
- 例如, 在 `UpdatePigHouse` 中:
2. **修改 `internal/app/controller/management/pig_farm_controller.go`**
- **移除 DTO 转换代码**:
-`CreatePigHouse`, `GetPigHouse`, `UpdatePigHouse` 方法中, 删除手动创建 `dto.PigHouseResponse` 的代码。
-`ListPigHouses` 方法中, 删除用于遍历 `houses` 并创建 `[]dto.PigHouseResponse``for` 循环。
-`CreatePen`, `UpdatePen`, `UpdatePenStatus` 方法中, 删除手动创建 `dto.PenResponse` 的代码。
- **更新服务调用**:
- 将服务层返回的 DTO 对象直接传递给 `controller.SendSuccessWithAudit`
3. **验证**
- 通过代码审查确认转换逻辑被精确迁移。
- 运行相关测试, 并通过手动 API 测试验证端点行为与重构前完全一致。
### Open Questions
- 暂无。

View File

@@ -51,17 +51,17 @@
### 2.3 `pig-farm` 模块
- [ ] 2.3.1 **修改 `internal/app/service/pig_farm_service.go`**
- [ ]`CreatePigHouse`, `GetPigHouseByID`, `ListPigHouses`, `UpdatePigHouse`, `CreatePen`, `GetPenByID`,
- [x] 2.3.1 **修改 `internal/app/service/pig_farm_service.go`**
- [x]`CreatePigHouse`, `GetPigHouseByID`, `ListPigHouses`, `UpdatePigHouse`, `CreatePen`, `GetPenByID`,
`ListPens`, `UpdatePen`, `UpdatePenStatus` 方法的返回值 `models.Xxx``[]models.Xxx` 替换为 `dto.XxxResponse`
`[]dto.XxxResponse`
- [ ] 在服务层内部将 `repository` 返回的 `models` 对象转换为 `dto.XxxResponse`
- [ ] 将控制器中处理服务层特定业务错误(如 `service.ErrHouseNotFound`)的逻辑移入服务层,服务层应返回更抽象的错误或直接返回
- [x] 在服务层内部将 `repository` 返回的 `models` 对象转换为 `dto.XxxResponse`
- [x] 将控制器中处理服务层特定业务错误(如 `service.ErrHouseNotFound`)的逻辑移入服务层,服务层应返回更抽象的错误或直接返回
DTO。
- [ ] 2.3.2 **修改 `internal/app/controller/management/pig_farm_controller.go`**
- [ ] 移除控制器中手动将领域实体转换为 DTO 的逻辑。
- [ ] 移除控制器中直接处理服务层特定业务错误类型的逻辑。
- [ ] 调整服务层方法的调用,使其直接处理服务层返回的 `dto.XxxResponse`
- [x] 2.3.2 **修改 `internal/app/controller/management/pig_farm_controller.go`**
- [x] 移除控制器中手动将领域实体转换为 DTO 的逻辑。
- [x] 移除控制器中直接处理服务层特定业务错误类型的逻辑。
- [x] 调整服务层方法的调用,使其直接处理服务层返回的 `dto.XxxResponse`
### 2.4 `plan` 模块