69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
package job
|
||
|
||
import (
|
||
"strings"
|
||
|
||
"haixun-backend/internal/library/clock"
|
||
app "haixun-backend/internal/library/errors"
|
||
"haixun-backend/internal/library/errors/code"
|
||
"haixun-backend/internal/model/ai/domain/enum"
|
||
jobentity "haixun-backend/internal/model/job/domain/entity"
|
||
jobenum "haixun-backend/internal/model/job/domain/enum"
|
||
"haixun-backend/internal/types"
|
||
)
|
||
|
||
func mapWorkerAIProvider(provider string) (enum.ProviderID, error) {
|
||
switch strings.TrimSpace(provider) {
|
||
case string(enum.ProviderOpenCode):
|
||
return enum.ProviderOpenCode, nil
|
||
case string(enum.ProviderXAI):
|
||
return enum.ProviderXAI, nil
|
||
default:
|
||
return "", app.For(code.AI).InputInvalidFormat("worker 8D 分析目前僅支援 opencode-go 與 xai,請在 AI 設定調整 research provider")
|
||
}
|
||
}
|
||
|
||
func markWorkerStep(steps []jobentity.StepProgress, stepID string, status jobenum.StepStatus, message string) []jobentity.StepProgress {
|
||
now := clock.NowUnixNano()
|
||
found := false
|
||
for i := range steps {
|
||
if steps[i].ID != stepID {
|
||
continue
|
||
}
|
||
found = true
|
||
steps[i].Status = status
|
||
steps[i].Message = message
|
||
if status == jobenum.StepStatusRunning && steps[i].StartedAt == nil {
|
||
steps[i].StartedAt = &now
|
||
}
|
||
if status == jobenum.StepStatusSucceeded || status == jobenum.StepStatusFailed {
|
||
steps[i].EndedAt = &now
|
||
}
|
||
}
|
||
if !found {
|
||
item := jobentity.StepProgress{ID: stepID, Status: status, Message: message}
|
||
if status == jobenum.StepStatusRunning {
|
||
item.StartedAt = &now
|
||
}
|
||
if status == jobenum.StepStatusSucceeded || status == jobenum.StepStatusFailed {
|
||
item.EndedAt = &now
|
||
}
|
||
steps = append(steps, item)
|
||
}
|
||
return steps
|
||
}
|
||
|
||
func toEntitySteps(steps []types.JobStepProgressData) []jobentity.StepProgress {
|
||
out := make([]jobentity.StepProgress, 0, len(steps))
|
||
for _, step := range steps {
|
||
out = append(out, jobentity.StepProgress{
|
||
ID: step.ID,
|
||
Status: jobenum.StepStatus(step.Status),
|
||
StartedAt: step.StartedAt,
|
||
EndedAt: step.EndedAt,
|
||
Message: step.Message,
|
||
})
|
||
}
|
||
return out
|
||
}
|