57 lines
2.1 KiB
Go
57 lines
2.1 KiB
Go
package service
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"cmr-backend/internal/apperr"
|
|
"cmr-backend/internal/store/postgres"
|
|
)
|
|
|
|
const (
|
|
launchReadyReasonOK = "event is active and launchable"
|
|
launchReadyReasonNotActive = "event is not active"
|
|
launchReadyReasonReleaseMissing = "event does not have a published release"
|
|
launchReadyReasonRuntimeMissing = "current published release is missing runtime binding"
|
|
launchReadyReasonPresentationMissing = "current published release is missing presentation binding"
|
|
launchReadyReasonContentMissing = "current published release is missing content bundle binding"
|
|
)
|
|
|
|
func evaluateEventLaunchReadiness(event *postgres.Event) (bool, string) {
|
|
if event == nil {
|
|
return false, launchReadyReasonReleaseMissing
|
|
}
|
|
if event.Status != "active" {
|
|
return false, launchReadyReasonNotActive
|
|
}
|
|
if event.CurrentReleaseID == nil || event.CurrentReleasePubID == nil || event.ConfigLabel == nil || event.ManifestURL == nil {
|
|
return false, launchReadyReasonReleaseMissing
|
|
}
|
|
if buildRuntimeSummaryFromEvent(event) == nil {
|
|
return false, launchReadyReasonRuntimeMissing
|
|
}
|
|
if buildPresentationSummaryFromEvent(event) == nil {
|
|
return false, launchReadyReasonPresentationMissing
|
|
}
|
|
if buildContentBundleSummaryFromEvent(event) == nil {
|
|
return false, launchReadyReasonContentMissing
|
|
}
|
|
return true, launchReadyReasonOK
|
|
}
|
|
|
|
func launchReadinessError(reason string) error {
|
|
switch reason {
|
|
case launchReadyReasonNotActive:
|
|
return apperr.New(http.StatusConflict, "event_not_launchable", reason)
|
|
case launchReadyReasonReleaseMissing:
|
|
return apperr.New(http.StatusConflict, "event_release_missing", reason)
|
|
case launchReadyReasonRuntimeMissing:
|
|
return apperr.New(http.StatusConflict, "event_release_runtime_missing", reason)
|
|
case launchReadyReasonPresentationMissing:
|
|
return apperr.New(http.StatusConflict, "event_release_presentation_missing", reason)
|
|
case launchReadyReasonContentMissing:
|
|
return apperr.New(http.StatusConflict, "event_release_content_bundle_missing", reason)
|
|
default:
|
|
return apperr.New(http.StatusConflict, "event_not_launchable", reason)
|
|
}
|
|
}
|