统一导出任务
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m4s

This commit is contained in:
2026-04-27 09:47:03 +08:00
parent 531de3c760
commit 60debb7505
29 changed files with 2580 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
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
}