All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m4s
98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
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
|
|
}
|