Files
pig-farm-controller/design/provide-logger-with-mothed/task-controller.md
2025-11-03 23:17:06 +08:00

135 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- **`internal/app/controller/user/user_controller.go` (`user.Controller`)**
- **结构体改造**:
- [ ] 移除 `Controller` 结构体中的 `logger *logs.Logger` 成员。
- [ ] 新增 `selfCtx context.Context` 成员。
- **构造函数改造 (`NewController`)**:
- [ ] 修改函数签名,移除 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- [ ] 在函数内部,为 `user.Controller` 创建其专属的 `selfCtx`
`selfCtx := logs.AddCompName(ctx, "UserController")`
- [ ] 将这个 `selfCtx` 赋值给 `Controller` 结构体的 `selfCtx` 成员。
- **公共方法改造 (`CreateUser`, `Login`, `SendTestNotification`)**:
- [ ] 在每个方法入口处,从 `echo.Context` 中提取 `request.Context()` 作为 `upstreamCtx`
- [ ] 使用 `newCtx, logger := logs.Trace(upstreamCtx, c.selfCtx, "MethodName")` 获取新的 `context.Context`
`logger` 实例。
- [ ] 将所有对 `c.logger.Errorf``c.logger.Infof` 的调用替换为 `logger.Errorf``logger.Infof`
- [ ] 对于 `SendTestNotification` 方法中的 `controller.SendErrorWithAudit`
`controller.SendSuccessWithAudit` 调用,需要将 `newCtx` 作为第一个参数传递。
- [ ] 确保所有对 `c.userService` 的调用都将 `newCtx` 作为第一个参数传递。
- **`internal/app/controller/device/device_controller.go` (`device.Controller`)**
- **结构体改造**:
- [ ] 移除 `Controller` 结构体中的 `logger *logs.Logger` 成员。
- [ ] 新增 `selfCtx context.Context` 成员。
- **构造函数改造 (`NewController`)**:
- [ ] 修改函数签名,移除 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- [ ] 在函数内部,为 `device.Controller` 创建其专属的 `selfCtx`
`selfCtx := logs.AddCompName(ctx, "DeviceController")`
- [ ] 将这个 `selfCtx` 赋值给 `Controller` 结构体的 `selfCtx` 成员。
- **公共方法改造 (`CreateDevice`, `GetDevice`, `ListDevices`, `UpdateDevice`, `DeleteDevice`, `ManualControl`,
`CreateAreaController`, `GetAreaController`, `ListAreaControllers`, `UpdateAreaController`,
`DeleteAreaController`, `CreateDeviceTemplate`, `GetDeviceTemplate`, `ListDeviceTemplates`,
`UpdateDeviceTemplate`, `DeleteDeviceTemplate`)**:
- [ ] 在每个方法入口处,从 `echo.Context` 中提取 `request.Context()` 作为 `upstreamCtx`
- [ ] 使用 `newCtx, logger := logs.Trace(upstreamCtx, c.selfCtx, "MethodName")` 获取新的 `context.Context`
`logger` 实例。
- [ ] 将所有对 `c.logger.Errorf`, `c.logger.Warnf`, `c.logger.Infof` 的调用替换为 `logger.Errorf`,
`logger.Warnf`, `logger.Infof`
- [ ] 对于 `controller.SendErrorWithAudit``controller.SendSuccessWithAudit` 调用,需要将 `newCtx`
作为第一个参数传递。
- [ ] 确保所有对 `c.deviceService` 的调用都将 `newCtx` 作为第一个参数传递。
- **`internal/app/controller/plan/plan_controller.go` (`plan.Controller`)**
- **结构体改造**:
- [ ] 移除 `Controller` 结构体中的 `logger *logs.Logger` 成员。
- [ ] 新增 `selfCtx context.Context` 成员。
- **构造函数改造 (`NewController`)**:
- [ ] 修改函数签名,移除 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- [ ] 在函数内部,为 `plan.Controller` 创建其专属的 `selfCtx`
`selfCtx := logs.AddCompName(ctx, "PlanController")`
- [ ] 将这个 `selfCtx` 赋值给 `Controller` 结构体的 `selfCtx` 成员。
- **公共方法改造 (`CreatePlan`, `GetPlan`, `ListPlans`, `UpdatePlan`, `DeletePlan`, `StartPlan`, `StopPlan`)**:
- [ ] 在每个方法入口处,从 `echo.Context` 中提取 `request.Context()` 作为 `upstreamCtx`
- [ ] 使用 `newCtx, logger := logs.Trace(upstreamCtx, c.selfCtx, "MethodName")` 获取新的 `context.Context`
`logger` 实例。
- [ ] 将所有对 `c.logger.Errorf``c.logger.Infof` 的调用替换为 `logger.Errorf``logger.Infof`
- [ ] 对于 `controller.SendErrorWithAudit``controller.SendSuccessWithAudit` 调用,需要将 `newCtx`
作为第一个参数传递。
- [ ] 确保所有对 `c.planService` 的调用都将 `newCtx` 作为第一个参数传递。
- **`internal/app/controller/management/pig_farm_controller.go` (`management.PigFarmController`)**
- **结构体改造**:
- [ ] 移除 `PigFarmController` 结构体中的 `logger *logs.Logger` 成员。
- [ ] 新增 `selfCtx context.Context` 成员。
- **构造函数改造 (`NewPigFarmController`)**:
- [ ] 修改函数签名,移除 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- [ ] 在函数内部,为 `PigFarmController` 创建其专属的 `selfCtx`
`selfCtx := logs.AddCompName(ctx, "PigFarmController")`
- [ ] 将这个 `selfCtx` 赋值给 `PigFarmController` 结构体的 `selfCtx` 成员。
- **公共方法改造 (`CreatePigHouse`, `GetPigHouse`, `ListPigHouses`, `UpdatePigHouse`, `DeletePigHouse`, `CreatePen`,
`GetPen`, `ListPens`, `UpdatePen`, `DeletePen`, `UpdatePenStatus`)**:
- [ ] 在每个方法入口处,从 `echo.Context` 中提取 `request.Context()` 作为 `upstreamCtx`
- [ ] 使用 `newCtx, logger := logs.Trace(upstreamCtx, c.selfCtx, "MethodName")` 获取新的 `context.Context`
`logger` 实例。
- [ ] 将所有对 `c.logger.Errorf``c.logger.Infof` 的调用替换为 `logger.Errorf``logger.Infof`
- [ ] 对于 `controller.SendErrorWithAudit``controller.SendSuccessWithAudit` 调用,需要将 `newCtx`
作为第一个参数传递。
- [ ] 确保所有对 `c.service` 的调用都将 `newCtx` 作为第一个参数传递。
- **`internal/app/controller/management/pig_batch_controller.go` (`management.PigBatchController`)**
- **结构体改造**:
- [ ] 移除 `PigBatchController` 结构体中的 `logger *logs.Logger` 成员。
- [ ] 新增 `selfCtx context.Context` 成员。
- **构造函数改造 (`NewPigBatchController`)**:
- [ ] 修改函数签名,移除 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- [ ] 在函数内部,为 `PigBatchController` 创建其专属的 `selfCtx`
`selfCtx := logs.AddCompName(ctx, "PigBatchController")`
- [ ] 将这个 `selfCtx` 赋值给 `PigBatchController` 结构体的 `selfCtx` 成员。
- **公共方法改造 (
所有方法,例如 `CreatePigBatch`, `GetPigBatch`, `UpdatePigBatch`, `DeletePigBatch`, `ListPigBatches`,
`AssignEmptyPensToBatch`, `ReclassifyPenToNewBatch`, `RemoveEmptyPenFromBatch`, `MovePigsIntoPen`)**:
- [ ] 这些方法通过调用 `controller_helpers.go` 中的 `handleAPIRequest...` 系列函数来处理请求。
- [ ] 确保传递给 `handleAPIRequest...` 系列函数的 `serviceExecutor` 匿名函数,其签名与 `controller_helpers.go`
改造后期望的签名一致(即接收 `context.Context` 作为第一个参数)。
- [ ] 在 `serviceExecutor` 匿名函数内部,将接收到的 `context.Context` 传递给 `c.service` 的相应方法。
- **`internal/app/controller/management/controller_helpers.go`**
- [ ] 修改 `mapAndSendError` 函数中的 `c.logger.Errorf` 调用,改为从 `echo.Context` 中提取 `context.Context`,并使用
`logs.Trace``logs.GetLogger` 获取 `logger` 实例进行日志记录。
- [ ] 检查其他函数是否直接或间接依赖 `*PigBatchController``logger` 成员,并进行相应改造。
- **`internal/app/controller/management/pig_batch_trade_controller.go` (`management.PigBatchController`)**
- [ ] 修改 `NewController` 函数,移除 `logger` 参数,改为接收 `selfCtx context.Context`
- [ ] 移除 `Controller` 结构体中的 `logger` 成员,改为保存 `selfCtx`
- [ ] **所有公共方法**: 接收 `echo.Context` 的方法,需要从中提取 `request.Context()` 作为 `upstreamCtx`
- **`internal/app/controller/management/pig_batch_health_controller.go` (`management.PigBatchController`)**
- [ ] 修改 `NewController` 函数,移除 `logger` 参数,改为接收 `selfCtx context.Context`
- [ ] 移除 `Controller` 结构体中的 `logger` 成员,改为保存 `selfCtx`
- [ ] **所有公共方法**: 接收 `echo.Context` 的方法,需要从中提取 `request.Context()` 作为 `upstreamCtx`
- **`internal/app/controller/management/pig_batch_transfer_controller.go` (`management.PigBatchController`)**
- [ ] 修改 `NewController` 函数,移除 `logger` 参数,改为接收 `selfCtx context.Context`
- [ ] 移除 `Controller` 结构体中的 `logger` 成员,改为保存 `selfCtx`
- [ ] **所有公共方法**: 接收 `echo.Context` 的方法,需要从中提取 `request.Context()` 作为 `upstreamCtx`
- **`internal/app/controller/monitor/monitor_controller.go` (`monitor.Controller`)**
- **结构体改造**:
- [ ] 移除 `Controller` 结构体中的 `logger *logs.Logger` 成员。
- [ ] 新增 `selfCtx context.Context` 成员。
- **构造函数改造 (`NewController`)**:
- [ ] 修改函数签名,移除 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- [ ] 在函数内部,为 `monitor.Controller` 创建其专属的 `selfCtx`
`selfCtx := logs.AddCompName(ctx, "MonitorController")`
- [ ] 将这个 `selfCtx` 赋值给 `Controller` 结构体的 `selfCtx` 成员。
- **公共方法改造 (
所有方法,例如 `ListSensorData`, `ListDeviceCommandLogs`, `ListPlanExecutionLogs`, `ListTaskExecutionLogs`,
`ListPendingCollections`, `ListUserActionLogs`, `ListRawMaterialPurchases`, `ListRawMaterialStockLogs`,
`ListFeedUsageRecords`, `ListMedicationLogs`, `ListPigBatchLogs`, `ListWeighingBatches`, `ListWeighingRecords`,
`ListPigTransferLogs`, `ListPigSickLogs`, `ListPigPurchases`, `ListPigSales`, `ListNotifications`)**:
- [ ] 在每个方法入口处,从 `echo.Context` 中提取 `request.Context()` 作为 `upstreamCtx`
- [ ] 使用 `newCtx, logger := logs.Trace(upstreamCtx, c.selfCtx, actionType)` 获取新的 `context.Context`
`logger` 实例(`actionType` 为方法内部定义的常量)。
- [ ] 将所有对 `c.logger.Errorf`, `c.logger.Warnf`, `c.logger.Infof` 的调用替换为 `logger.Errorf`,
`logger.Warnf`, `logger.Infof`
- [ ] 对于 `controller.SendErrorWithAudit``controller.SendSuccessWithAudit` 调用,需要将 `newCtx`
作为第一个参数传递。
- [ ] 确保所有对 `c.monitorService` 的调用都将 `newCtx` 作为第一个参数传递。
- **`internal/app/controller/response.go`**
- [ ] 修改 `SendSuccessWithAudit``SendErrorWithAudit` 函数签名,使其接收 `ctx context.Context` 作为第一个参数。
- [ ] 在 `setAuditDetails` 函数中,如果需要,从传入的 `context.Context` 中提取调用链信息,并将其添加到审计信息中。
- **`internal/app/controller/auth_utils.go`**
- [ ] 检查 `GetOperatorIDFromContext``GetOperatorFromContext` 函数,确保它们能够正确地从 `echo.Context` 中获取
`request.Context()`,并从中提取用户信息。