From 829f0a625354f6f0bd01cc5005d911e5d365fcef Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Thu, 2 Oct 2025 00:18:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=9B=AE=E5=BD=95=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .golangci.yml | 52 +++++++++++++++++++ Makefile | 8 ++- internal/app/api/api.go | 17 +++--- .../app/controller/plan/plan_controller.go | 2 +- .../app/controller/user/user_controller.go | 2 +- internal/app/middleware/audit.go | 2 +- internal/app/middleware/auth.go | 2 +- .../transport => webhook}/chirp_stack.go | 4 +- .../chirp_stack_types.go | 2 +- .../transport => webhook}/transport.go | 2 +- internal/core/application.go | 12 ++--- .../{app/service => domain}/audit/service.go | 0 .../device/device_service.go | 0 .../device/general_device_service.go | 2 +- .../device/proto/device.pb.go | 2 +- .../device/proto/device.proto | 2 +- .../task/analysis_plan_task_manager.go | 0 .../service => domain}/task/delay_task.go | 0 .../task/delay_task_test.go | 0 .../task/release_feed_weight_task.go | 2 +- .../{app/service => domain}/task/scheduler.go | 2 +- internal/{app/service => domain}/task/task.go | 0 .../service => domain}/token/token_service.go | 0 .../token/token_service_test.go | 0 24 files changed, 85 insertions(+), 30 deletions(-) create mode 100644 .golangci.yml rename internal/app/{service/transport => webhook}/chirp_stack.go (99%) rename internal/app/{service/transport => webhook}/chirp_stack_types.go (99%) rename internal/app/{service/transport => webhook}/transport.go (89%) rename internal/{app/service => domain}/audit/service.go (100%) rename internal/{app/service => domain}/device/device_service.go (100%) rename internal/{app/service => domain}/device/general_device_service.go (99%) rename internal/{app/service => domain}/device/proto/device.pb.go (99%) rename internal/{app/service => domain}/device/proto/device.proto (96%) rename internal/{app/service => domain}/task/analysis_plan_task_manager.go (100%) rename internal/{app/service => domain}/task/delay_task.go (100%) rename internal/{app/service => domain}/task/delay_task_test.go (100%) rename internal/{app/service => domain}/task/release_feed_weight_task.go (98%) rename internal/{app/service => domain}/task/scheduler.go (99%) rename internal/{app/service => domain}/task/task.go (100%) rename internal/{app/service => domain}/token/token_service.go (100%) rename internal/{app/service => domain}/token/token_service_test.go (100%) diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..badb4a6 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,52 @@ +# .golangci.yml - 为你的项目量身定制的 linter 配置 + +linters-settings: + # 这里可以对特定的 linter 进行微调 + errcheck: + # 检查未处理的错误,但可以排除一些常见的、我们确认无需处理的函数 + exclude-functions: + - io/ioutil.ReadFile + - io.Copy + - io.WriteString + - os.Create + +linters: + # 明确我们想要禁用的 linter + disable: + # --- 暂时禁用的“干扰项” --- + - godox # 禁用对 TODO, FIXME 注释的检查,让我们能专注于代码 + + # --- 暂时禁用的“风格/复杂度”检查器 --- + - gocyclo # 暂时不检查圈复杂度 + - funlen # 暂时不检查函数长度 + - lll # 暂时不检查行长度 + - wsl # 检查多余的空格和换行,可以后期再处理 + - gocritic # 这个检查器包含很多子项,有些可能过于严格,可以先禁用,或在下面精细配置 + + # 排除路径:分析这些文件但不报告问题(使用 regex 匹配) + exclusions: + paths: + # 排除 docs/ 目录(匹配路径以 docs/ 开头) + - '^docs/' + + # 精细排除规则:用于特定文件/文本的 linter 排除 + rules: + # 排除对 main.go 中 log.Fatalf 的抱怨(仅针对 goconst linter) + - path: '^main\.go$' + text: "log.Fatalf" + linters: + - goconst + + # 你也可以明确启用你认为最重要的检查器,形成一个“白名单” + # enable: + # - govet + # - errcheck + # - staticcheck + # - unused + # - gosimple + # - ineffassign + # - typecheck + +run: + # 完全跳过测试文件分析(不解析、不报告任何问题) + tests: false \ No newline at end of file diff --git a/Makefile b/Makefile index 4ed8fd6..a050764 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ help: @echo " swag Generate swagger docs" @echo " help Show this help message" @echo " proto Generate protobuf files" + @echo " lint Lint the code" # 运行应用 .PHONY: run @@ -44,4 +45,9 @@ swag: # 生成protobuf文件 .PHONY: proto proto: - protoc --go_out=internal/app/service/device/proto --go_opt=paths=source_relative --go-grpc_out=internal/app/service/device/proto --go-grpc_opt=paths=source_relative -Iinternal/app/service/device/proto internal/app/service/device/proto/device.proto + protoc --go_out=internal/domain/device/proto --go_opt=paths=source_relative --go-grpc_out=internal/domain/device/proto --go-grpc_opt=paths=source_relative -Iinternal/domain/device/proto internal/domain/device/proto/device.proto + +# 运行代码检查 +.PHONY: lint +lint: + golangci-lint run ./... \ No newline at end of file diff --git a/internal/app/api/api.go b/internal/app/api/api.go index f53a5ed..57106bd 100644 --- a/internal/app/api/api.go +++ b/internal/app/api/api.go @@ -20,10 +20,10 @@ import ( "git.huangwc.com/pig/pig-farm-controller/internal/app/controller/plan" "git.huangwc.com/pig/pig-farm-controller/internal/app/controller/user" "git.huangwc.com/pig/pig-farm-controller/internal/app/middleware" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/audit" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/task" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/token" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/transport" + "git.huangwc.com/pig/pig-farm-controller/internal/app/webhook" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/audit" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/task" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/token" "git.huangwc.com/pig/pig-farm-controller/internal/infra/config" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" @@ -45,7 +45,7 @@ type API struct { userController *user.Controller // 用户控制器实例 deviceController *device.Controller // 设备控制器实例 planController *plan.Controller // 计划控制器实例 - listenHandler transport.ListenHandler // 设备上行事件监听器 + listenHandler webhook.ListenHandler // 设备上行事件监听器 analysisTaskManager *task.AnalysisPlanTaskManager // 计划触发器管理器实例 } @@ -61,7 +61,7 @@ func NewAPI(cfg config.ServerConfig, userActionLogRepository repository.UserActionLogRepository, tokenService token.TokenService, auditService audit.Service, // 注入审计服务 - listenHandler transport.ListenHandler, + listenHandler webhook.ListenHandler, analysisTaskManager *task.AnalysisPlanTaskManager) *API { // 设置 Gin 模式,例如 gin.ReleaseMode (生产模式) 或 gin.DebugMode (开发模式) // 从配置中获取 Gin 模式 @@ -127,10 +127,7 @@ func (a *API) setupRoutes() { a.logger.Info("pprof 接口注册成功") // 上行事件监听路由 - a.engine.POST("/upstream", func(c *gin.Context) { - h := a.listenHandler.Handler() - h.ServeHTTP(c.Writer, c.Request) - }) + a.engine.POST("/upstream", gin.WrapH(a.listenHandler.Handler())) a.logger.Info("上行事件监听接口注册成功") // 添加 Swagger UI 路由, Swagger UI可在 /swagger/index.html 上找到 diff --git a/internal/app/controller/plan/plan_controller.go b/internal/app/controller/plan/plan_controller.go index f834f52..284df63 100644 --- a/internal/app/controller/plan/plan_controller.go +++ b/internal/app/controller/plan/plan_controller.go @@ -5,7 +5,7 @@ import ( "strconv" "git.huangwc.com/pig/pig-farm-controller/internal/app/controller" - task "git.huangwc.com/pig/pig-farm-controller/internal/app/service/task" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/task" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" diff --git a/internal/app/controller/user/user_controller.go b/internal/app/controller/user/user_controller.go index 1f84e68..7d6d1e8 100644 --- a/internal/app/controller/user/user_controller.go +++ b/internal/app/controller/user/user_controller.go @@ -5,7 +5,7 @@ import ( "time" "git.huangwc.com/pig/pig-farm-controller/internal/app/controller" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/token" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/token" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" diff --git a/internal/app/middleware/audit.go b/internal/app/middleware/audit.go index db2a8b2..44ee93b 100644 --- a/internal/app/middleware/audit.go +++ b/internal/app/middleware/audit.go @@ -6,7 +6,7 @@ import ( "io" "strconv" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/audit" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/audit" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "github.com/gin-gonic/gin" ) diff --git a/internal/app/middleware/auth.go b/internal/app/middleware/auth.go index 8684acb..2755313 100644 --- a/internal/app/middleware/auth.go +++ b/internal/app/middleware/auth.go @@ -5,7 +5,7 @@ import ( "net/http" "strings" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/token" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/token" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" "github.com/gin-gonic/gin" diff --git a/internal/app/service/transport/chirp_stack.go b/internal/app/webhook/chirp_stack.go similarity index 99% rename from internal/app/service/transport/chirp_stack.go rename to internal/app/webhook/chirp_stack.go index bf5779e..de07597 100644 --- a/internal/app/service/transport/chirp_stack.go +++ b/internal/app/webhook/chirp_stack.go @@ -1,4 +1,4 @@ -package transport +package webhook import ( "encoding/base64" @@ -7,7 +7,7 @@ import ( "net/http" "time" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/device/proto" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/device/proto" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" diff --git a/internal/app/service/transport/chirp_stack_types.go b/internal/app/webhook/chirp_stack_types.go similarity index 99% rename from internal/app/service/transport/chirp_stack_types.go rename to internal/app/webhook/chirp_stack_types.go index a8b5bdd..55d7de5 100644 --- a/internal/app/service/transport/chirp_stack_types.go +++ b/internal/app/webhook/chirp_stack_types.go @@ -1,4 +1,4 @@ -package transport +package webhook import ( "encoding/json" diff --git a/internal/app/service/transport/transport.go b/internal/app/webhook/transport.go similarity index 89% rename from internal/app/service/transport/transport.go rename to internal/app/webhook/transport.go index b60fd29..7583c06 100644 --- a/internal/app/service/transport/transport.go +++ b/internal/app/webhook/transport.go @@ -1,4 +1,4 @@ -package transport +package webhook import "net/http" diff --git a/internal/core/application.go b/internal/core/application.go index 0c40657..37dad89 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -8,11 +8,11 @@ import ( "time" "git.huangwc.com/pig/pig-farm-controller/internal/app/api" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/audit" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/device" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/task" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/token" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/transport" + "git.huangwc.com/pig/pig-farm-controller/internal/app/webhook" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/audit" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/device" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/task" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/token" "git.huangwc.com/pig/pig-farm-controller/internal/infra/config" "git.huangwc.com/pig/pig-farm-controller/internal/infra/database" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" @@ -95,7 +95,7 @@ func NewApplication(configPath string) (*Application, error) { auditService := audit.NewService(userActionLogRepo, logger) // 初始化设备上行监听器 - listenHandler := transport.NewChirpStackListener(logger, sensorDataRepo, deviceRepo, areaControllerRepo, deviceCommandLogRepo, pendingCollectionRepo) + listenHandler := webhook.NewChirpStackListener(logger, sensorDataRepo, deviceRepo, areaControllerRepo, deviceCommandLogRepo, pendingCollectionRepo) // 初始化计划触发器管理器 analysisPlanTaskManager := task.NewAnalysisPlanTaskManager(planRepo, pendingTaskRepo, executionLogRepo, logger) diff --git a/internal/app/service/audit/service.go b/internal/domain/audit/service.go similarity index 100% rename from internal/app/service/audit/service.go rename to internal/domain/audit/service.go diff --git a/internal/app/service/device/device_service.go b/internal/domain/device/device_service.go similarity index 100% rename from internal/app/service/device/device_service.go rename to internal/domain/device/device_service.go diff --git a/internal/app/service/device/general_device_service.go b/internal/domain/device/general_device_service.go similarity index 99% rename from internal/app/service/device/general_device_service.go rename to internal/domain/device/general_device_service.go index 3ea8069..d838476 100644 --- a/internal/app/service/device/general_device_service.go +++ b/internal/domain/device/general_device_service.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/device/proto" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/device/proto" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" diff --git a/internal/app/service/device/proto/device.pb.go b/internal/domain/device/proto/device.pb.go similarity index 99% rename from internal/app/service/device/proto/device.pb.go rename to internal/domain/device/proto/device.pb.go index 573d4ff..712f749 100644 --- a/internal/app/service/device/proto/device.pb.go +++ b/internal/domain/device/proto/device.pb.go @@ -354,7 +354,7 @@ const file_device_proto_rawDesc = "" + "\n" + "MethodType\x12\x0f\n" + "\vINSTRUCTION\x10\x00\x12\v\n" + - "\aCOLLECT\x10\x01B#Z!internal/app/service/device/protob\x06proto3" + "\aCOLLECT\x10\x01B\x1eZ\x1cinternal/domain/device/protob\x06proto3" var ( file_device_proto_rawDescOnce sync.Once diff --git a/internal/app/service/device/proto/device.proto b/internal/domain/device/proto/device.proto similarity index 96% rename from internal/app/service/device/proto/device.proto rename to internal/domain/device/proto/device.proto index af23a51..a906255 100644 --- a/internal/app/service/device/proto/device.proto +++ b/internal/domain/device/proto/device.proto @@ -4,7 +4,7 @@ package device; import "google/protobuf/any.proto"; -option go_package = "internal/app/service/device/proto"; +option go_package = "internal/domain/device/proto"; // --- 通用指令结构 --- diff --git a/internal/app/service/task/analysis_plan_task_manager.go b/internal/domain/task/analysis_plan_task_manager.go similarity index 100% rename from internal/app/service/task/analysis_plan_task_manager.go rename to internal/domain/task/analysis_plan_task_manager.go diff --git a/internal/app/service/task/delay_task.go b/internal/domain/task/delay_task.go similarity index 100% rename from internal/app/service/task/delay_task.go rename to internal/domain/task/delay_task.go diff --git a/internal/app/service/task/delay_task_test.go b/internal/domain/task/delay_task_test.go similarity index 100% rename from internal/app/service/task/delay_task_test.go rename to internal/domain/task/delay_task_test.go diff --git a/internal/app/service/task/release_feed_weight_task.go b/internal/domain/task/release_feed_weight_task.go similarity index 98% rename from internal/app/service/task/release_feed_weight_task.go rename to internal/domain/task/release_feed_weight_task.go index f0c2fd4..a8c7d15 100644 --- a/internal/app/service/task/release_feed_weight_task.go +++ b/internal/domain/task/release_feed_weight_task.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/device" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/device" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" diff --git a/internal/app/service/task/scheduler.go b/internal/domain/task/scheduler.go similarity index 99% rename from internal/app/service/task/scheduler.go rename to internal/domain/task/scheduler.go index 6b190f3..ebb8ca6 100644 --- a/internal/app/service/task/scheduler.go +++ b/internal/domain/task/scheduler.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "git.huangwc.com/pig/pig-farm-controller/internal/app/service/device" + "git.huangwc.com/pig/pig-farm-controller/internal/domain/device" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" diff --git a/internal/app/service/task/task.go b/internal/domain/task/task.go similarity index 100% rename from internal/app/service/task/task.go rename to internal/domain/task/task.go diff --git a/internal/app/service/token/token_service.go b/internal/domain/token/token_service.go similarity index 100% rename from internal/app/service/token/token_service.go rename to internal/domain/token/token_service.go diff --git a/internal/app/service/token/token_service_test.go b/internal/domain/token/token_service_test.go similarity index 100% rename from internal/app/service/token/token_service_test.go rename to internal/domain/token/token_service_test.go