package task import ( "context" "fmt" "strconv" "git.ifooth.com/common/pkg/rest" "git.ifooth.com/common/pkg/rest/transport" ) // Client 任务管理客户端 type Client struct { host string } // NewClient 创建任务管理客户端 func NewClient(host string) *Client { return &Client{ host: host, } } // ListTask 获取任务列表 func (c *Client) ListTask(ctx context.Context, req *ListReq) (*rest.PaginationResp[Task], error) { query := map[string]string{ "taskType": req.TaskType, "taskName": req.TaskName, "taskIndex": req.TaskIndex, "currentStep": req.CurrentStep, "status": req.Status, "creator": req.Creator, "offset": strconv.Itoa(req.Offset), "limit": strconv.Itoa(req.Limit), } resp, err := rest.R[rest.Resp[rest.PaginationResp[Task]]](). With(transport.CurlLog()). With(transport.HTTPIsSuccess). SetQueryParams(query). SetContext(ctx). Get("%s/api/v1/task/list", c.host) if err != nil { return nil, err } if resp.Code != 0 { return nil, fmt.Errorf("list task failed, code: %d, message: %s", resp.Code, resp.Message) } return &resp.Data, nil } // GetTaskStatus 获取任务状态 func (c *Client) GetTaskStatus(ctx context.Context, req *IDReq) (*Task, error) { resp, err := rest.R[rest.Resp[Task]](). With(transport.CurlLog()). With(transport.HTTPIsSuccess). SetQueryParam("taskID", req.TaskID). SetContext(ctx). Get("%s/api/v1/task/status", c.host) if err != nil { return nil, err } if resp.Code != 0 { return nil, fmt.Errorf("get task status failed, code: %d, message: %s", resp.Code, resp.Message) } return &resp.Data, nil } // RetryTask 重试任务 func (c *Client) RetryTask(ctx context.Context, req *IDReq) error { resp, err := rest.R[rest.Resp[rest.EmptyResp]](). With(transport.CurlLog()). With(transport.HTTPIsSuccess). SetBody(req). SetContext(ctx). Post("%s/api/v1/task/retry", c.host) if err != nil { return err } if resp.Code != 0 { return fmt.Errorf("retry task failed, code: %d, message: %s", resp.Code, resp.Message) } return err } // RevokeTask 撤回任务 func (c *Client) RevokeTask(ctx context.Context, req *IDReq) error { resp, err := rest.R[rest.Resp[rest.EmptyResp]](). With(transport.CurlLog()). With(transport.HTTPIsSuccess). SetBody(req). SetContext(ctx). Post("%s/api/v1/task/revoke", c.host) if err != nil { return err } if resp.Code != 0 { return fmt.Errorf("revoke task failed, code: %d, message: %s", resp.Code, resp.Message) } return err }