package task import ( "net/http" "gitea.com/texpixel/document_ai/internal/model/task" "gitea.com/texpixel/document_ai/internal/service" "gitea.com/texpixel/document_ai/pkg/common" "gitea.com/texpixel/document_ai/pkg/log" "github.com/gin-gonic/gin" ) type TaskEndpoint struct { taskService *service.TaskService } func NewTaskEndpoint() *TaskEndpoint { return &TaskEndpoint{taskService: service.NewTaskService()} } func (h *TaskEndpoint) EvaluateTask(c *gin.Context) { var req task.EvaluateTaskRequest if err := c.ShouldBindJSON(&req); err != nil { log.Error(c, "func", "EvaluateTask", "msg", "Invalid parameters", "error", err) c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeParamError, "Invalid parameters")) return } err := h.taskService.EvaluateTask(c, &req) if err != nil { c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeSystemError, "评价任务失败")) return } c.JSON(http.StatusOK, common.SuccessResponse(c, nil)) } func (h *TaskEndpoint) GetTaskList(c *gin.Context) { var req task.TaskListRequest if err := c.ShouldBindQuery(&req); err != nil { log.Error(c, "func", "GetTaskList", "msg", "Invalid parameters", "error", err) c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeParamError, "Invalid parameters")) return } req.UserID = common.GetUserIDFromContext(c) if req.Page <= 0 { req.Page = 1 } if req.PageSize <= 0 { req.PageSize = 10 } resp, err := h.taskService.GetTaskList(c, &req) if err != nil { c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeSystemError, "获取任务列表失败")) return } c.JSON(http.StatusOK, common.SuccessResponse(c, resp)) } func (h *TaskEndpoint) ExportTask(c *gin.Context) { var req task.ExportTaskRequest if err := c.ShouldBindJSON(&req); err != nil { log.Error(c, "func", "ExportTask", "msg", "Invalid parameters", "error", err) c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeParamError, "Invalid parameters")) return } fileData, contentType, err := h.taskService.ExportTask(c, &req) if err != nil { c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeSystemError, "导出任务失败")) return } // set filename based on export type var filename string switch req.Type { case "pdf": filename = "texpixel_export.pdf" case "docx": filename = "texpixel_export.docx" default: filename = "texpixel_export" } c.Header("Content-Disposition", "attachment; filename="+filename) c.Data(http.StatusOK, contentType, fileData) }