69 lines
2.3 KiB
Go
69 lines
2.3 KiB
Go
// Package job 自动任务模块控制器(绑定 admin 受权限保护组)。
|
||
package job
|
||
|
||
import (
|
||
"context"
|
||
|
||
jobv1 "service.xpcool.com/api/job"
|
||
"service.xpcool.com/internal/model/dto"
|
||
"service.xpcool.com/internal/service/job"
|
||
)
|
||
|
||
// Controller 实现自动任务端点。
|
||
type Controller struct{}
|
||
|
||
// New 创建自动任务控制器。
|
||
func New() *Controller { return &Controller{} }
|
||
|
||
// List 自动任务列表。
|
||
func (c *Controller) List(ctx context.Context, req *jobv1.AutoJobListReq) (res *jobv1.AutoJobListRes, err error) {
|
||
list, err := job.Job().List(ctx)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
out := make([]*jobv1.JobItem, 0, len(list))
|
||
for i := range list {
|
||
v := &list[i]
|
||
out = append(out, &jobv1.JobItem{
|
||
Id: v.Id, Name: v.Name, Code: v.Code, JobType: v.JobType, CronExpr: v.CronExpr,
|
||
Enabled: v.Enabled, Remark: v.Remark, LastRunAt: v.LastRunAt,
|
||
LastResult: v.LastResult, LastError: v.LastError,
|
||
})
|
||
}
|
||
return &jobv1.AutoJobListRes{List: out}, nil
|
||
}
|
||
|
||
// Save 保存自动任务(cron/启用/备注)。
|
||
func (c *Controller) Save(ctx context.Context, req *jobv1.AutoJobSaveReq) (res *jobv1.AutoJobSaveRes, err error) {
|
||
if err = job.Job().Save(ctx, dto.JobInput{Id: req.Id, CronExpr: req.CronExpr, Enabled: req.Enabled, Remark: req.Remark}); err != nil {
|
||
return nil, err
|
||
}
|
||
return &jobv1.AutoJobSaveRes{}, nil
|
||
}
|
||
|
||
// Trigger 手动触发任务。
|
||
func (c *Controller) Trigger(ctx context.Context, req *jobv1.AutoJobTriggerReq) (res *jobv1.AutoJobTriggerRes, err error) {
|
||
summary, ok, err := job.Job().Trigger(ctx, req.Id)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return &jobv1.AutoJobTriggerRes{Summary: summary, Ok: ok}, nil
|
||
}
|
||
|
||
// LogList 任务运行日志分页。
|
||
func (c *Controller) LogList(ctx context.Context, req *jobv1.AutoJobLogListReq) (res *jobv1.AutoJobLogListRes, err error) {
|
||
list, total, err := job.Job().LogList(ctx, dto.JobLogFilter{Page: req.Page, Size: req.Size, JobId: req.JobId})
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
out := make([]*jobv1.JobLogItem, 0, len(list))
|
||
for i := range list {
|
||
v := &list[i]
|
||
out = append(out, &jobv1.JobLogItem{
|
||
Id: v.Id, JobId: v.JobId, JobName: v.JobName, RunAt: v.RunAt,
|
||
Result: v.Result, Error: v.Error, Summary: v.Summary, DurationMs: v.DurationMs,
|
||
})
|
||
}
|
||
return &jobv1.AutoJobLogListRes{List: out, Total: total}, nil
|
||
}
|