Files
RenewCMS/internal/infrastructure/useCases/updateStatusBuilder.go
T

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)
}