详细任务清单
This commit is contained in:
@@ -4,26 +4,42 @@
|
||||
|
||||
#### 1. 核心改造 (`logs` 包)
|
||||
|
||||
- **`internal/infra/logs/logs.go`**:
|
||||
- [ ] 实现 `AddCompName`, `AddFuncName`, `GetLogger`, `Trace` 四个核心包级函数。
|
||||
- [ ] 移除旧 `Logger` 结构体中的状态字段(如 `component`)。
|
||||
- **`internal/infra/logs/logs.go` (`logs.Logger` - 内部实现,非注入)**
|
||||
- **核心包级函数实现 (根据 `implementation.md` 描述)**:
|
||||
- [ ] 实现 `AddCompName(ctx context.Context, compName string) context.Context`。
|
||||
- [ ] 实现
|
||||
`AddFuncName(upstreamCtx context.Context, selfCtx context.Context, funcName string) context.Context`。
|
||||
- [ ] 实现 `GetLogger(ctx context.Context) *Logger`。
|
||||
- [ ] 实现
|
||||
`Trace(upstreamCtx context.Context, selfCtx context.Context, funcName string) (context.Context, *Logger)`。
|
||||
- **`Logger` 结构体改造**:
|
||||
- [ ] 无
|
||||
- **`GormLogger` 改造**:
|
||||
- [ ] 修改 `GormLogger.Info` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。
|
||||
- [ ] 修改 `GormLogger.Warn` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。
|
||||
- [ ] 修改 `GormLogger.Error` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。
|
||||
- [ ] 修改 `GormLogger.Trace` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。特别是
|
||||
`With(fields...)` 的调用需要调整。
|
||||
|
||||
---
|
||||
|
||||
#### 2. 依赖注入与结构体改造
|
||||
|
||||
- **`internal/core/application.go`**:
|
||||
- **`internal/core/application.go`**:
|
||||
- [ ] 移除 `Application` 结构体中的 `Logger *logs.Logger` 成员。
|
||||
- [ ] 修改 `NewApplication` 函数,使其不再创建 `logger`,而是创建根 `context.Background()`。
|
||||
- [ ] 调整 `NewApplication`,将根 `context` 传递给 `initInfrastructure`, `initDomainServices`, `initAppServices` 和 `api.NewAPI`。
|
||||
- [ ] 调整 `NewApplication`,将根 `context` 传递给 `initInfrastructure`, `initDomainServices`, `initAppServices` 和
|
||||
`api.NewAPI`。
|
||||
- [ ] 移除 `Application` 结构体中所有对 `app.Logger` 的直接调用,改为通过 `context` 获取 `Logger`。
|
||||
|
||||
- **`internal/core/component_initializers.go`**:
|
||||
- [ ] **修改所有组件结构体定义**: 遍历所有相关组件(Controllers, Services, Repositories 等),将其结构体中的 `logger *logs.Logger` 成员变量替换为 `selfCtx context.Context`。
|
||||
- **`internal/core/component_initializers.go`**:
|
||||
- [ ] **修改所有组件结构体定义**: 遍历所有相关组件(Controllers, Services, Repositories 等),将其结构体中的
|
||||
`logger *logs.Logger` 成员变量替换为 `selfCtx context.Context`。
|
||||
- [ ] **重构所有 `init...` 函数**:
|
||||
- 移除所有 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`。
|
||||
- 在每个 `init...` 函数内部,为即将创建的组件生成其专属的 `selfCtx`。例如:`selfCtx := logs.AddCompName(ctx, "ComponentName")`。
|
||||
- 将这个 `selfCtx` 注入到组件的构造函数中,并由组件保存为 `selfCtx` 成员。
|
||||
- 移除所有 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`。
|
||||
- 在每个 `init...` 函数内部,为即将创建的组件生成其专属的 `selfCtx`。例如:
|
||||
`selfCtx := logs.AddCompName(ctx, 'ComponentName')`。
|
||||
- 将这个 `selfCtx` 注入到组件的构造函数中,并由组件保存为 `selfCtx` 成员。
|
||||
|
||||
---
|
||||
|
||||
@@ -33,64 +49,23 @@
|
||||
|
||||
##### 3.1. API 层
|
||||
|
||||
- **`internal/app/api/api.go` (`API`)**:
|
||||
- [ ] 修改 `NewAPI` 函数,移除 `logger` 参数,改为接收 `ctx context.Context`。
|
||||
- [ ] 移除 `API` 结构体中的 `logger` 成员,改为保存 `selfCtx context.Context`。
|
||||
- [ ] 为 `API` 组件本身创建 `selfCtx`:`selfCtx := logs.AddCompName(ctx, "API")`,并传递给所有 `Controller` 的构造函数。
|
||||
|
||||
- **`internal/app/controller/user/user_controller.go` (`user.Controller`)**
|
||||
- **`internal/app/controller/device/device_controller.go` (`device.Controller`)**
|
||||
- **`internal/app/controller/plan/plan_controller.go` (`plan.Controller`)**
|
||||
- **`internal/app/controller/management/pig_farm_controller.go` (`management.PigFarmController`)**
|
||||
- **`internal/app/controller/management/pig_batch_controller.go` (`management.PigBatchController`)**
|
||||
- **`internal/app/controller/monitor/monitor_controller.go` (`monitor.Controller`)**
|
||||
- **改造动作**:
|
||||
- [ ] 修改 `NewController` 函数,移除 `logger` 参数,改为接收 `selfCtx context.Context`。
|
||||
- [ ] 移除 `Controller` 结构体中的 `logger` 成员,改为保存 `selfCtx`。
|
||||
- [ ] **所有公共方法**: 接收 `echo.Context` 的方法,需要从中提取 `request.Context()` 作为 `upstreamCtx`。
|
||||
|
||||
- **`internal/app/middleware/auth.go`**
|
||||
- **`internal/app/middleware/audit.go`**
|
||||
- **改造动作**:
|
||||
- [ ] 检查并重构所有日志记录中间件。
|
||||
- [ ] 中间件应该从请求的 `c.Request().Context()` 中提取 `upstreamCtx`。
|
||||
- [ ] 使用 `logs.Trace` 或 `logs.AddFuncName` 创建新的 `Context` 和 `Logger`。
|
||||
- [ ] **关键**: 使用 `c.SetRequest(c.Request().WithContext(newCtx))` 将更新后的 `Context` 写回 `echo.Context`,以便传递给后续的中间件和 `Controller`。
|
||||
[api](./task-api.md)
|
||||
[controller](./task-controller.md)
|
||||
[middleware](./task-middleware.md)
|
||||
[webhook](./task-webhook.md)
|
||||
|
||||
##### 3.2. 应用层 (Application Services)
|
||||
|
||||
- **`internal/app/service/pig_farm_service.go` (`service.PigFarmService`)**
|
||||
- **`internal/app/service/pig_batch_service.go` (`service.PigBatchService`)**
|
||||
- **`internal/app/service/monitor_service.go` (`service.MonitorService`)**
|
||||
- **`internal/app/service/device_service.go` (`service.DeviceService`)**
|
||||
- **`internal/app/service/plan_service.go` (`service.PlanService`)**
|
||||
- **`internal/app/service/user_service.go` (`service.UserService`)**
|
||||
[service](./task-service.md)
|
||||
|
||||
##### 3.3. 领域层 (Domain Services)
|
||||
|
||||
- **`internal/domain/audit/service.go` (`audit.Service`)**
|
||||
- **`internal/domain/device/general_device_service.go` (`device.Service`)**
|
||||
- **`internal/domain/notify/notify.go` (`domain_notify.Service` - `failoverService` 实现)**
|
||||
- **`internal/domain/pig/pen_transfer_manager.go` (`pig.PigPenTransferManager`)**
|
||||
- **`internal/domain/pig/pig_trade_manager.go` (`pig.PigTradeManager`)**
|
||||
- **`internal/domain/pig/pig_sick_manager.go` (`pig.SickPigManager`)**
|
||||
- **`internal/domain/pig/pig_batch_service.go` (`pig.PigBatchService`)**
|
||||
- **`internal/domain/plan/analysis_plan_task_manager.go` (`plan.AnalysisPlanTaskManager`)**
|
||||
- **`internal/domain/plan/plan_execution_manager.go` (`plan.ExecutionManager`)**
|
||||
- **`internal/domain/plan/plan_service.go` (`plan.Service`)**
|
||||
- **`internal/domain/task/task.go` (`task.TaskFactory`)**
|
||||
[domain](./task-domain.md)
|
||||
|
||||
##### 3.4. 基础设施层 (Infrastructure)
|
||||
|
||||
- **`internal/infra/database/storage.go` (`database.Storage`)**
|
||||
- **`internal/infra/logs/logs.go` (`logs.Logger` - 内部实现,非注入)**
|
||||
- **`internal/infra/notify/log_notifier.go` (`notify.LogNotifier`)**
|
||||
- **`internal/infra/repository/unit_of_work.go` (`repository.UnitOfWork` - `gormUnitOfWork` 实现)**
|
||||
- **`internal/infra/transport/lora/chirp_stack.go` (`lora.ChirpStackTransport`)**
|
||||
- **`internal/infra/transport/lora/lora_mesh_uart_passthrough_transport.go` (`lora.LoRaMeshUartPassthroughTransport`)**
|
||||
- **`internal/infra/transport/lora/placeholder_transport.go` (`lora.PlaceholderTransport`)**
|
||||
- **`internal/app/webhook/chirp_stack.go` (`webhook.ChirpStackListener`)**
|
||||
- **`internal/app/webhook/placeholder_listener.go` (`webhook.PlaceholderListener`)**
|
||||
[repository](./task-repository.md)
|
||||
[infra-other](./task-infra.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -99,9 +74,9 @@
|
||||
- [ ] **遍历所有业务方法** (针对上述所有列出的组件的公共方法):
|
||||
- [ ] **定位旧日志**: 搜索所有对旧 `z.logger.*` 成员的调用。
|
||||
- [ ] **改造方法入口** (对于非 Controller 方法):
|
||||
1. 在方法开始处,使用作为参数传入的 `ctx` (作为 `upstreamCtx`) 和组件自身持有的 `z.selfCtx`,调用 `logs.Trace`。
|
||||
- `newCtx, logger := logs.Trace(ctx, z.selfCtx, "MethodName")`
|
||||
2. 将所有旧的 `z.logger.*(...)` 调用,替换为使用新获取的 `logger.*(...)`。
|
||||
1. 在方法开始处,使用作为参数传入的 `ctx` (作为 `upstreamCtx`) 和组件自身持有的 `z.selfCtx`,调用 `logs.Trace`。
|
||||
- `newCtx, logger := logs.Trace(ctx, z.selfCtx, 'MethodName')`
|
||||
2. 将所有旧的 `z.logger.*(...)` 调用,替换为使用新获取的 `logger.*(...)`。
|
||||
- [ ] **改造下游调用**:
|
||||
1. 在方法内部,当需要调用其他组件的方法时(如下游服务),**必须传递 `newCtx`**。
|
||||
- `err := z.downstreamService.DoSomething(newCtx, data)`
|
||||
1. 在方法内部,当需要调用其他组件的方法时(如下游服务),**必须传递 `newCtx`**。
|
||||
- `err := z.downstreamService.DoSomething(newCtx, data)`
|
||||
|
||||
Reference in New Issue
Block a user