重构webhook包
This commit is contained in:
@@ -28,8 +28,8 @@ import (
|
|||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/monitor"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/monitor"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/controller/plan"
|
"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/controller/user"
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/listener"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/service"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/webhook"
|
|
||||||
domain_plan "git.huangwc.com/pig/pig-farm-controller/internal/domain/plan"
|
domain_plan "git.huangwc.com/pig/pig-farm-controller/internal/domain/plan"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/config"
|
"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/logs"
|
||||||
@@ -64,7 +64,7 @@ type API struct {
|
|||||||
rawMaterialController *feed.RawMaterialController // 原料控制器实例
|
rawMaterialController *feed.RawMaterialController // 原料控制器实例
|
||||||
recipeController *feed.RecipeController // 配方控制器实例
|
recipeController *feed.RecipeController // 配方控制器实例
|
||||||
inventoryController *inventory.InventoryController // 库存控制器实例
|
inventoryController *inventory.InventoryController // 库存控制器实例
|
||||||
listenHandler webhook.ListenHandler // 设备上行事件监听器
|
listenHandler listener.ListenHandler // 设备上行事件监听器
|
||||||
analysisTaskManager *domain_plan.AnalysisPlanTaskManager // 计划触发器管理器实例
|
analysisTaskManager *domain_plan.AnalysisPlanTaskManager // 计划触发器管理器实例
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ func NewAPI(cfg config.ServerConfig,
|
|||||||
recipeService service.RecipeService,
|
recipeService service.RecipeService,
|
||||||
inventoryService service.InventoryService,
|
inventoryService service.InventoryService,
|
||||||
tokenGenerator token.Generator,
|
tokenGenerator token.Generator,
|
||||||
listenHandler webhook.ListenHandler,
|
listenHandler listener.ListenHandler,
|
||||||
) *API {
|
) *API {
|
||||||
// 使用 echo.New() 创建一个 Echo 引擎实例
|
// 使用 echo.New() 创建一个 Echo 引擎实例
|
||||||
e := echo.New()
|
e := echo.New()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package webhook
|
package chirp_stack
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@@ -9,10 +9,12 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/listener"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
"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/models"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/transport/proto"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/transport/proto"
|
||||||
|
|
||||||
gproto "google.golang.org/protobuf/proto"
|
gproto "google.golang.org/protobuf/proto"
|
||||||
"gorm.io/datatypes"
|
"gorm.io/datatypes"
|
||||||
)
|
)
|
||||||
@@ -47,7 +49,7 @@ func NewChirpStackListener(
|
|||||||
areaControllerRepo repository.AreaControllerRepository,
|
areaControllerRepo repository.AreaControllerRepository,
|
||||||
deviceCommandLogRepo repository.DeviceCommandLogRepository,
|
deviceCommandLogRepo repository.DeviceCommandLogRepository,
|
||||||
pendingCollectionRepo repository.PendingCollectionRepository,
|
pendingCollectionRepo repository.PendingCollectionRepository,
|
||||||
) ListenHandler {
|
) listener.ListenHandler {
|
||||||
return &ChirpStackListener{
|
return &ChirpStackListener{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
sensorDataRepo: sensorDataRepo,
|
sensorDataRepo: sensorDataRepo,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package webhook
|
package chirp_stack
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
package webhook
|
package chirp_stack
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/listener"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -13,8 +14,8 @@ type PlaceholderListener struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewPlaceholderListener 创建一个新的 PlaceholderListener 实例
|
// NewPlaceholderListener 创建一个新的 PlaceholderListener 实例
|
||||||
// 它只打印一条日志, 表明 ChirpStack webhook 未被激活
|
// 它只打印一条日志, 表明 ChirpStack listener 未被激活
|
||||||
func NewPlaceholderListener(ctx context.Context) ListenHandler {
|
func NewPlaceholderListener(ctx context.Context) listener.ListenHandler {
|
||||||
return &PlaceholderListener{
|
return &PlaceholderListener{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package webhook
|
package listener
|
||||||
|
|
||||||
import "net/http"
|
import "net/http"
|
||||||
|
|
||||||
@@ -5,8 +5,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/listener"
|
||||||
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/listener/chirp_stack"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/service"
|
"git.huangwc.com/pig/pig-farm-controller/internal/app/service"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/webhook"
|
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/domain/alarm"
|
"git.huangwc.com/pig/pig-farm-controller/internal/domain/alarm"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/domain/device"
|
"git.huangwc.com/pig/pig-farm-controller/internal/domain/device"
|
||||||
"git.huangwc.com/pig/pig-farm-controller/internal/domain/inventory"
|
"git.huangwc.com/pig/pig-farm-controller/internal/domain/inventory"
|
||||||
@@ -361,7 +362,7 @@ func initAppServices(ctx context.Context, infra *Infrastructure, domainServices
|
|||||||
|
|
||||||
// LoraComponents 聚合了所有 LoRa 相关组件。
|
// LoraComponents 聚合了所有 LoRa 相关组件。
|
||||||
type LoraComponents struct {
|
type LoraComponents struct {
|
||||||
listenHandler webhook.ListenHandler
|
listenHandler listener.ListenHandler
|
||||||
comm transport.Communicator
|
comm transport.Communicator
|
||||||
loraListener transport.Listener
|
loraListener transport.Listener
|
||||||
}
|
}
|
||||||
@@ -372,7 +373,7 @@ func initLora(
|
|||||||
cfg *config.Config,
|
cfg *config.Config,
|
||||||
repos *Repositories,
|
repos *Repositories,
|
||||||
) (*LoraComponents, error) {
|
) (*LoraComponents, error) {
|
||||||
var listenHandler webhook.ListenHandler
|
var listenHandler listener.ListenHandler
|
||||||
var comm transport.Communicator
|
var comm transport.Communicator
|
||||||
var loraListener transport.Listener
|
var loraListener transport.Listener
|
||||||
baseCtx := context.Background()
|
baseCtx := context.Background()
|
||||||
@@ -380,12 +381,12 @@ func initLora(
|
|||||||
logger := logs.GetLogger(ctx)
|
logger := logs.GetLogger(ctx)
|
||||||
if cfg.Lora.Mode == config.LoraMode_LoRaWAN {
|
if cfg.Lora.Mode == config.LoraMode_LoRaWAN {
|
||||||
logger.Info("当前运行模式: lora_wan。初始化 ChirpStack 监听器和传输层。")
|
logger.Info("当前运行模式: lora_wan。初始化 ChirpStack 监听器和传输层。")
|
||||||
listenHandler = webhook.NewChirpStackListener(logs.AddCompName(baseCtx, "ChirpStackListener"), repos.sensorDataRepo, repos.deviceRepo, repos.areaControllerRepo, repos.deviceCommandLogRepo, repos.pendingCollectionRepo)
|
listenHandler = chirp_stack.NewChirpStackListener(logs.AddCompName(baseCtx, "ChirpStackListener"), repos.sensorDataRepo, repos.deviceRepo, repos.areaControllerRepo, repos.deviceCommandLogRepo, repos.pendingCollectionRepo)
|
||||||
comm = lora.NewChirpStackTransport(logs.AddCompName(baseCtx, "ChirpStackTransport"), cfg.ChirpStack)
|
comm = lora.NewChirpStackTransport(logs.AddCompName(baseCtx, "ChirpStackTransport"), cfg.ChirpStack)
|
||||||
loraListener = lora.NewPlaceholderTransport(logs.AddCompName(baseCtx, "PlaceholderTransport"))
|
loraListener = lora.NewPlaceholderTransport(logs.AddCompName(baseCtx, "PlaceholderTransport"))
|
||||||
} else {
|
} else {
|
||||||
logger.Info("当前运行模式: lora_mesh。初始化 LoRa Mesh 传输层和占位符监听器。")
|
logger.Info("当前运行模式: lora_mesh。初始化 LoRa Mesh 传输层和占位符监听器。")
|
||||||
listenHandler = webhook.NewPlaceholderListener(logs.AddCompName(baseCtx, "PlaceholderListener"))
|
listenHandler = chirp_stack.NewPlaceholderListener(logs.AddCompName(baseCtx, "PlaceholderListener"))
|
||||||
tp, err := lora.NewLoRaMeshUartPassthroughTransport(logs.AddCompName(baseCtx, "LoRaMeshTransport"), cfg.LoraMesh, repos.areaControllerRepo, repos.pendingCollectionRepo, repos.deviceRepo, repos.sensorDataRepo)
|
tp, err := lora.NewLoRaMeshUartPassthroughTransport(logs.AddCompName(baseCtx, "LoRaMeshTransport"), cfg.LoraMesh, repos.areaControllerRepo, repos.pendingCollectionRepo, repos.deviceRepo, repos.sensorDataRepo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("无法初始化 LoRa Mesh 模块: %w", err)
|
return nil, fmt.Errorf("无法初始化 LoRa Mesh 模块: %w", err)
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ type ApplicationServiceCreateIftttIntegrationParamsBodyIntegration struct {
|
|||||||
// Event prefix.
|
// Event prefix.
|
||||||
// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
||||||
// is set to weatherstation, and uplink event will be sent as
|
// is set to weatherstation, and uplink event will be sent as
|
||||||
// weatherstation_up to the IFTTT webhook.
|
// weatherstation_up to the IFTTT listener.
|
||||||
// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
||||||
EventPrefix string `json:"eventPrefix,omitempty"`
|
EventPrefix string `json:"eventPrefix,omitempty"`
|
||||||
|
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ type ApplicationServiceUpdateIftttIntegrationParamsBodyIntegration struct {
|
|||||||
// Event prefix.
|
// Event prefix.
|
||||||
// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
||||||
// is set to weatherstation, and uplink event will be sent as
|
// is set to weatherstation, and uplink event will be sent as
|
||||||
// weatherstation_up to the IFTTT webhook.
|
// weatherstation_up to the IFTTT listener.
|
||||||
// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
||||||
EventPrefix string `json:"eventPrefix,omitempty"`
|
EventPrefix string `json:"eventPrefix,omitempty"`
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ type APIIftttIntegration struct {
|
|||||||
// Event prefix.
|
// Event prefix.
|
||||||
// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
||||||
// is set to weatherstation, and uplink event will be sent as
|
// is set to weatherstation, and uplink event will be sent as
|
||||||
// weatherstation_up to the IFTTT webhook.
|
// weatherstation_up to the IFTTT listener.
|
||||||
// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
||||||
EventPrefix string `json:"eventPrefix,omitempty"`
|
EventPrefix string `json:"eventPrefix,omitempty"`
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user