duidui_fiber/internal/scheduler/handler.go
2026-03-27 10:34:03 +08:00

139 lines
3.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}