package scheduler import ( "github.com/gofiber/fiber/v2" ) // Handler 调度器处理器 type Handler struct { service *Service } // NewHandler 创建调度器处理器 func NewHandler(service *Service) *Handler { return &Handler{ service: service, } } // AddTask 添加任务 func (h *Handler) AddTask(c *fiber.Ctx) error { var req AddTaskRequest if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "请求参数解析失败: " + err.Error(), }) } // 验证任务类型 if req.TaskType != TaskTypeOnce && req.TaskType != TaskTypeCyclic { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "任务类型必须是 'once' 或 'cyclic'", }) } // 验证延迟时间 if req.DelayMs < 0 { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "延迟时间不能为负数", }) } // 循环任务必须提供间隔时间 if req.TaskType == TaskTypeCyclic && req.IntervalMs <= 0 { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "循环任务必须提供 interval_ms(大于0)", }) } resp, err := h.service.AddTask(&req) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "添加任务失败: " + err.Error(), }) } if !resp.Success { return c.Status(fiber.StatusBadRequest).JSON(resp) } return c.Status(fiber.StatusOK).JSON(resp) } // RemoveTask 删除任务 func (h *Handler) RemoveTask(c *fiber.Ctx) error { taskID := c.Params("task_id") if taskID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "success": false, "message": "task_id不能为空", }) } resp, err := h.service.RemoveTask(taskID) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "success": false, "message": "删除任务失败: " + err.Error(), }) } if !resp.Success { return c.Status(fiber.StatusNotFound).JSON(resp) } return c.Status(fiber.StatusOK).JSON(resp) } // GetTaskStatus 查询任务状态 func (h *Handler) GetTaskStatus(c *fiber.Ctx) error { taskID := c.Params("task_id") if taskID == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "exists": false, "message": "task_id不能为空", }) } resp, err := h.service.GetTaskStatus(taskID) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "exists": false, "message": "查询任务状态失败: " + err.Error(), }) } return c.Status(fiber.StatusOK).JSON(resp) } // GetTaskCount 获取任务数量 func (h *Handler) GetTaskCount(c *fiber.Ctx) error { resp := h.service.GetTaskCount() return c.Status(fiber.StatusOK).JSON(resp) } // ListTasks 列出所有任务 func (h *Handler) ListTasks(c *fiber.Ctx) error { var req ListTasksRequest if err := c.QueryParser(&req); err != nil { req.Page = 1 req.PageSize = 10 } if req.Page < 1 { req.Page = 1 } if req.PageSize < 1 { req.PageSize = 10 } resp := h.service.ListTasks(req.Page, req.PageSize) return c.Status(fiber.StatusOK).JSON(resp) }