package useCases import ( "RenewCMS/internal/domain/update" "errors" "time" ) type updateStatusBuilder struct { store update.StatusStore jobs update.JobStore results update.ResultStore requests update.RestartRequestStore currentVersion string now func() time.Time } func (b updateStatusBuilder) build(canApply bool) update.UpdateStatus { status := b.baseStatus() if job, found := b.jobs.Load(); found { status = status.WithJob(job) } status.CanApply = canApply request, requestErr := b.requests.Read() result, hasResult := b.results.Read() if hasResult { status.FinishedAt = result.FinishedAt } switch { case !errors.Is(requestErr, update.ErrNoRestartRequest): return status.WithRestartRequest(request) case hasResult: return status.WithResult(result, b.currentVersion, b.now()) } return status } func (b updateStatusBuilder) baseStatus() update.UpdateStatus { if result, found := b.store.Load(); found { return update.NewStatus(b.currentVersion, &result) } return update.NewStatus(b.currentVersion, nil) }