Files
gemini-banlancer/internal/handlers/task_handler.go
2025-11-22 14:20:05 +08:00

52 lines
1.5 KiB
Go

package handlers
import (
"encoding/json"
"gemini-balancer/internal/errors"
"gemini-balancer/internal/response"
"gemini-balancer/internal/task"
"github.com/sirupsen/logrus"
"github.com/gin-gonic/gin"
)
type TaskHandler struct {
taskService *task.Task
logger *logrus.Entry
}
func NewTaskHandler(taskService *task.Task, logger *logrus.Logger) *TaskHandler {
return &TaskHandler{
taskService: taskService,
logger: logger.WithField("component", "TaskHandler📦"),
}
}
// GetTaskStatus
// GET /admin/tasks/:id
func (h *TaskHandler) GetTaskStatus(c *gin.Context) {
taskID := c.Param("id")
if taskID == "" {
response.Error(c, errors.NewAPIError(errors.ErrBadRequest, "task ID is required"))
return
}
taskStatus, err := h.taskService.GetStatus(c.Request.Context(), taskID)
if err != nil {
// TODO 可以根据 service 层返回的具体错误类型进行更精细的处理
response.Error(c, errors.NewAPIError(errors.ErrResourceNotFound, err.Error()))
return
}
// [探針] 在返回給前端前,打印從存儲中讀取並解析後的 status 對象
loggerWithTaskID := h.logger.WithField("task_id", taskID)
loggerWithTaskID.Debugf("Status read from store, ABOUT TO BE SENT to frontend: %+v", taskStatus)
// [探針] 手動序列化並打印
if h.logger.Logger.IsLevelEnabled(logrus.DebugLevel) {
jsonData, _ := json.Marshal(taskStatus)
loggerWithTaskID.Debugf("Manually marshalled JSON to be sent to frontend: %s", string(jsonData))
}
response.Success(c, taskStatus)
}