package admin import ( "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" "github.com/break/junhong_cmp_fiber/internal/model/dto" pollingSvc "github.com/break/junhong_cmp_fiber/internal/service/polling" "github.com/break/junhong_cmp_fiber/pkg/constants" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/response" ) // PollingPauseHandler 批量开关轮询、不轮询清单、轮询开关文件导入与告警页关闭轮询。 type PollingPauseHandler struct { polling *pollingSvc.AssetPollingService imports *pollingSvc.PollingStatusImportService validator *validator.Validate } // NewPollingPauseHandler 创建不轮询清单 Handler。 func NewPollingPauseHandler(polling *pollingSvc.AssetPollingService, imports *pollingSvc.PollingStatusImportService, validator *validator.Validate) *PollingPauseHandler { return &PollingPauseHandler{polling: polling, imports: imports, validator: validator} } func (h *PollingPauseHandler) validate(prefix string, req any) error { if err := h.validator.Struct(req); err != nil { return errors.New(errors.CodeInvalidParam, validationMessage(prefix, req, err)) } return nil } func (h *PollingPauseHandler) batch(c *fiber.Ctx, assetType string) error { var req dto.BatchUpdatePollingStatusRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if err := h.validate("批量开关轮询参数不合法", &req); err != nil { return err } result, err := h.polling.BatchUpdatePollingStatus(c.UserContext(), assetType, &req) if err != nil { return err } return response.Success(c, result) } // BatchCards 勾选批量开关卡轮询。POST /api/admin/iot-cards/batch-update-polling-status func (h *PollingPauseHandler) BatchCards(c *fiber.Ctx) error { return h.batch(c, constants.AssetTypeIotCard) } // BatchDevices 勾选批量开关设备轮询。POST /api/admin/devices/batch-update-polling-status func (h *PollingPauseHandler) BatchDevices(c *fiber.Ctx) error { return h.batch(c, constants.AssetTypeDevice) } // Impact 开关轮询影响说明。GET /api/admin/polling-status/impact func (h *PollingPauseHandler) Impact(c *fiber.Ctx) error { return response.Success(c, h.polling.Impact()) } // ListPauses 查询不轮询清单。GET /api/admin/card-polling-pauses func (h *PollingPauseHandler) ListPauses(c *fiber.Ctx) error { var req dto.CardPollingPauseListRequest if err := c.QueryParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if err := h.validate("不轮询清单查询参数不合法", &req); err != nil { return err } result, err := h.polling.ListPauses(c.UserContext(), &req) if err != nil { return err } return response.Success(c, result) } // CreateImport 创建轮询开关文件导入任务。POST /api/admin/polling-status-imports func (h *PollingPauseHandler) CreateImport(c *fiber.Ctx) error { var req dto.CreatePollingStatusImportRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if err := h.validate("轮询开关导入参数不合法", &req); err != nil { return err } result, err := h.imports.CreateImport(c.UserContext(), &req) if err != nil { return err } return response.Success(c, result) } // ListImports 查询轮询开关导入任务。GET /api/admin/polling-status-imports func (h *PollingPauseHandler) ListImports(c *fiber.Ctx) error { var req dto.PollingStatusImportListRequest if err := c.QueryParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if err := h.validate("轮询开关导入任务查询参数不合法", &req); err != nil { return err } result, err := h.imports.ListImports(c.UserContext(), &req) if err != nil { return err } return response.Success(c, result) } // GetImport 查询轮询开关导入任务详情。GET /api/admin/polling-status-imports/:id func (h *PollingPauseHandler) GetImport(c *fiber.Ctx) error { id, err := rateLimitPathID(c, "id", "导入任务 ID") if err != nil { return err } result, err := h.imports.GetImport(c.UserContext(), id) if err != nil { return err } return response.Success(c, result) } // ClosePollingByAlerts 告警页勾选批量关闭轮询。POST /api/admin/polling-failure-alerts/close-polling func (h *PollingPauseHandler) ClosePollingByAlerts(c *fiber.Ctx) error { var req dto.ClosePollingByAlertsRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if err := h.validate("告警批量关闭轮询参数不合法", &req); err != nil { return err } result, err := h.polling.ClosePollingByAlerts(c.UserContext(), &req) if err != nil { return err } return response.Success(c, result) }