139 lines
3.1 KiB
Go
139 lines
3.1 KiB
Go
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)
|
||
}
|
||
|