agent-orchestrator/backend/internal/service/session/status.go

50 lines
1.2 KiB
Go

package session
import "github.com/aoagents/agent-orchestrator/backend/internal/domain"
func deriveStatus(rec domain.SessionRecord, pr *domain.PRFacts) domain.SessionStatus {
if rec.IsTerminated {
if pr != nil && pr.Merged {
return domain.StatusMerged
}
return domain.StatusTerminated
}
if rec.Activity.State == domain.ActivityWaitingInput {
return domain.StatusNeedsInput
}
if pr != nil {
if pr.Merged {
return domain.StatusMerged
}
if !pr.Closed {
return prPipelineStatus(*pr)
}
}
if rec.Activity.State == domain.ActivityActive {
return domain.StatusWorking
}
return domain.StatusIdle
}
func prPipelineStatus(pr domain.PRFacts) domain.SessionStatus {
switch {
case pr.CI == domain.CIFailing:
return domain.StatusCIFailed
case pr.Draft:
return domain.StatusDraft
case pr.Review == domain.ReviewChangesRequest || pr.ReviewComments:
return domain.StatusChangesRequested
case pr.Mergeability == domain.MergeMergeable:
return domain.StatusMergeable
case pr.Review == domain.ReviewApproved:
return domain.StatusApproved
case pr.Review == domain.ReviewRequired:
return domain.StatusReviewPending
default:
return domain.StatusPROpen
}
}