45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
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)
|
|
}
|