package handler import ( "github.com/gin-gonic/gin" "github.com/go-kratos/kratos/v3/errors" "kra/internal/service/business" "kra/internal/service/dto" "net/http" "strconv" ) type AlertRule struct{ service *business.AlertRuleService } func NewAlertRule(service *business.AlertRuleService) *AlertRule { return &AlertRule{service: service} } func (h *AlertRule) List(c *gin.Context) { var req dto.AlertRuleQuery if err := c.ShouldBindQuery(&req); err != nil { Fail(c, "查询参数不正确") return } v, err := h.service.List(c.Request.Context(), &req) if err != nil { Fail(c, errors.FromError(err).Message) return } OKWithData(c, v) } func (h *AlertRule) Types(c *gin.Context) { v, err := h.service.Types(c.Request.Context()) if err != nil { Fail(c, errors.FromError(err).Message) return } OKWithData(c, v) } func (h *AlertRule) Find(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { Fail(c, "规则 ID 不正确") return } v, err := h.service.Find(c.Request.Context(), id) if err != nil { Fail(c, errors.FromError(err).Message) return } OKWithData(c, v) } func (h *AlertRule) Save(c *gin.Context) { c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 16384) var req dto.AlertRuleRequest if err := c.ShouldBindJSON(&req); err != nil { Fail(c, "预警规则参数不正确") return } var requestedID uint64 if req.ID != "" { var err error requestedID, err = strconv.ParseUint(req.ID.String(), 10, 64) if err != nil { Fail(c, "规则 ID 不正确") return } } if (c.Request.Method == http.MethodPost && requestedID != 0) || (c.Request.Method == http.MethodPut && requestedID == 0) { Fail(c, "新建或编辑规则的 ID 不正确") return } id, err := h.service.Save(c.Request.Context(), &req) if err != nil { Fail(c, errors.FromError(err).Message) return } OKWithData(c, gin.H{"id": strconv.FormatUint(id, 10)}) } func (h *AlertRule) Delete(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { Fail(c, "规则 ID 不正确") return } if err := h.service.Delete(c.Request.Context(), id); err != nil { Fail(c, errors.FromError(err).Message) return } OK(c) } func (h *AlertRule) Toggle(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { Fail(c, "规则 ID 不正确") return } enabled, err := strconv.Atoi(c.Query("enabled")) if err != nil { Fail(c, "启用状态参数不正确") return } if err := h.service.Toggle(c.Request.Context(), id, enabled); err != nil { Fail(c, errors.FromError(err).Message) return } OK(c) }