package admin import ( "strconv" "github.com/gofiber/fiber/v2" "github.com/break/junhong_cmp_fiber/internal/model/dto" exportTaskService "github.com/break/junhong_cmp_fiber/internal/service/export_task" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/response" ) // ExportTaskHandler 导出任务 Handler。 type ExportTaskHandler struct { service *exportTaskService.Service } // NewExportTaskHandler 创建导出任务 Handler。 func NewExportTaskHandler(service *exportTaskService.Service) *ExportTaskHandler { return &ExportTaskHandler{service: service} } // Create 创建导出任务。 // POST /api/admin/export-tasks func (h *ExportTaskHandler) Create(c *fiber.Ctx) error { var req dto.CreateExportTaskRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam) } if req.Scene == "" { return errors.New(errors.CodeInvalidParam, "导出场景不能为空") } if req.Format == "" { return errors.New(errors.CodeInvalidParam, "导出格式不能为空") } result, err := h.service.CreateTask(c.UserContext(), &req) if err != nil { return err } return response.Success(c, result) } // List 查询导出任务列表。 // GET /api/admin/export-tasks func (h *ExportTaskHandler) List(c *fiber.Ctx) error { var req dto.ListExportTaskRequest if err := c.QueryParser(&req); err != nil { return errors.New(errors.CodeInvalidParam) } result, err := h.service.ListTasks(c.UserContext(), &req) if err != nil { return err } return response.SuccessWithPagination(c, result.List, result.Total, result.Page, result.PageSize) } // GetByID 查询导出任务详情。 // GET /api/admin/export-tasks/:id func (h *ExportTaskHandler) GetByID(c *fiber.Ctx) error { id, err := parseExportTaskID(c.Params("id")) if err != nil { return err } result, err := h.service.GetTaskDetail(c.UserContext(), id) if err != nil { return err } return response.Success(c, result) } // Cancel 取消导出任务。 // POST /api/admin/export-tasks/:id/cancel func (h *ExportTaskHandler) Cancel(c *fiber.Ctx) error { id, err := parseExportTaskID(c.Params("id")) if err != nil { return err } result, err := h.service.CancelTask(c.UserContext(), id) if err != nil { return err } return response.Success(c, result) } func parseExportTaskID(idStr string) (uint, error) { id, err := strconv.ParseUint(idStr, 10, 64) if err != nil { return 0, errors.New(errors.CodeInvalidParam, "无效的任务ID") } return uint(id), nil }