thread-master/backend/internal/logic/copy_mission/matrix_guard.go

43 lines
1.1 KiB
Go

package copy_mission
import (
"context"
"strings"
app "haixun-backend/internal/library/errors"
"haixun-backend/internal/library/errors/code"
"haixun-backend/internal/model/job/domain/enum"
domrepo "haixun-backend/internal/model/job/domain/repository"
"haixun-backend/internal/svc"
)
func ensureNoActiveMatrixJob(ctx context.Context, svcCtx *svc.ServiceContext, missionID string) error {
if svcCtx == nil || svcCtx.Job == nil {
return nil
}
missionID = strings.TrimSpace(missionID)
if missionID == "" {
return nil
}
runs, _, _, _, _, err := svcCtx.Job.ListRuns(ctx, domrepo.RunListFilter{
Scope: "copy_mission",
ScopeID: missionID,
Statuses: []enum.RunStatus{
enum.RunStatusPending,
enum.RunStatusQueued,
enum.RunStatusRunning,
enum.RunStatusWaitingWorker,
enum.RunStatusCancelRequested,
},
}, 1, 20)
if err != nil {
return err
}
for _, run := range runs {
if run != nil && run.TemplateType == "generate-copy-matrix" {
return app.For(code.Job).ResInvalidState("內容矩陣背景任務進行中,請稍後再試")
}
}
return nil
}