osaet/backend/internal/admin/status.go
yarnom f0b50d13ea feat: add admin publishing workflow and yar theme
Add Go/Postgres admin APIs, Angular admin UI, manual build flow, asset uploads, markdown import/export, configurable slug generation, and the Yar reading theme. Exclude local docs and generated development artifacts from version control.
2026-06-01 15:48:04 +08:00

72 lines
1.8 KiB
Go

package admin
import "fmt"
func ValidPostStatus(status PostStatus) bool {
switch status {
case PostStatusDraft, PostStatusPublished, PostStatusArchived, PostStatusDeleted:
return true
default:
return false
}
}
func IsPublicPostStatus(status PostStatus) bool {
return status == PostStatusPublished || status == PostStatusArchived
}
func ValidVersionReason(reason VersionReason) bool {
switch reason {
case VersionReasonSave, VersionReasonPublish, VersionReasonUnpublish, VersionReasonArchive, VersionReasonRestore, VersionReasonImport, VersionReasonRollback:
return true
default:
return false
}
}
func ValidBuildJobStatus(status BuildJobStatus) bool {
switch status {
case BuildJobStatusQueued, BuildJobStatusRunning, BuildJobStatusSuccess, BuildJobStatusFailed, BuildJobStatusCancelled:
return true
default:
return false
}
}
func ValidBuildJobTrigger(trigger BuildJobTrigger) bool {
switch trigger {
case BuildJobTriggerPublish, BuildJobTriggerManual, BuildJobTriggerImport, BuildJobTriggerSync:
return true
default:
return false
}
}
func CanTransitionPostStatus(from PostStatus, to PostStatus) bool {
if !ValidPostStatus(from) || !ValidPostStatus(to) {
return false
}
if from == to {
return true
}
switch from {
case PostStatusDraft:
return to == PostStatusPublished || to == PostStatusArchived || to == PostStatusDeleted
case PostStatusPublished:
return to == PostStatusDraft || to == PostStatusArchived || to == PostStatusDeleted
case PostStatusArchived:
return to == PostStatusDraft || to == PostStatusPublished || to == PostStatusDeleted
case PostStatusDeleted:
return to == PostStatusDraft
default:
return false
}
}
func ValidatePostStatusTransition(from PostStatus, to PostStatus) error {
if CanTransitionPostStatus(from, to) {
return nil
}
return fmt.Errorf("invalid post status transition: %s -> %s", from, to)
}