Files
m 09d53adfd1
CI / test (push) Successful in 1m7s
CI / test (pull_request) Successful in 44s
feat(work): materialize durable solution waves
2026-08-23 16:56:58 +03:00

40 lines
1.3 KiB
Go

package application
import (
"context"
"git.cin.su/m/Assistant/contracts/work"
"git.cin.su/m/Assistant/modules/work/domain"
"git.cin.su/m/Assistant/modules/work/ports"
"time"
)
func DecideSolutionSearch(input work.SolutionSearchInput) (work.SolutionSearchDecision, error) {
return domain.DecideSolutionSearch(input)
}
func OrchestrateSolutionSearch(ctx context.Context, store ports.GraphStore, request work.SolutionSearchWaveRequest) (work.SolutionSearchWaveResult, error) {
decision, err := domain.DecideSolutionSearch(request.Input)
if err != nil {
return work.SolutionSearchWaveResult{}, err
}
result := work.SolutionSearchWaveResult{Decision: decision}
if !decision.ContinueSearching || decision.State == work.OrchestrationExecuting {
return result, nil
}
graph, intents, err := domain.BuildSolutionSearchWave(decision, request)
if err != nil {
return work.SolutionSearchWaveResult{}, err
}
if request.NowUnixMillis < 1 {
request.NowUnixMillis = time.Now().UnixMilli()
}
graph, ready, err := AdmitAndSchedule(ctx, store, GraphScheduleRequest{Graph: graph, Intents: intents, Now: request.NowUnixMillis})
if err != nil {
return work.SolutionSearchWaveResult{}, err
}
result.Graph = graph
result.ScheduledNodeIDs = ready
result.GraphMaterialized = true
return result, nil
}