Backup #814

ID814
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Domain/ValueObject/ContentOrderStatus.php
Version1
Typ modified
Größe2.4 KB
Hash2d92dc2b4cb733bc81205a8e58b980109a38ec6175c1632156fe3f34715af420
Datum2025-12-23 08:08:27
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

namespace Domain\ValueObject;

/**
 * Status enum for content orders with state machine transitions.
 */
enum ContentOrderStatus: string
{
    case DRAFT = 'draft';
    case GENERATING = 'generating';
    case CRITIQUE = 'critique';
    case REVISION = 'revision';
    case VALIDATE = 'validate';
    case APPROVE = 'approve';
    case PUBLISHED = 'published';

    /**
     * Check if transition to target status is allowed.
     */
    public function canTransitionTo(self $target): bool
    {
        return in_array($target, $this->getAllowedTransitions(), true);
    }

    /**
     * Get all allowed transitions from current status.
     *
     * @return array<self>
     */
    public function getAllowedTransitions(): array
    {
        return match ($this) {
            self::DRAFT => [self::GENERATING],
            self::GENERATING => [self::CRITIQUE, self::DRAFT],
            self::CRITIQUE => [self::REVISION, self::VALIDATE],
            self::REVISION => [self::CRITIQUE],
            self::VALIDATE => [self::APPROVE, self::REVISION],
            self::APPROVE => [self::PUBLISHED, self::REVISION],
            self::PUBLISHED => [],
        };
    }

    /**
     * Check if this is a terminal (final) status.
     */
    public function isTerminal(): bool
    {
        return $this === self::PUBLISHED;
    }

    /**
     * Check if content can be edited in this status.
     */
    public function isEditable(): bool
    {
        return in_array($this, [self::DRAFT, self::REVISION], true);
    }

    /**
     * Get human-readable label.
     */
    public function label(): string
    {
        return match ($this) {
            self::DRAFT => 'Entwurf',
            self::GENERATING => 'Wird generiert',
            self::CRITIQUE => 'In Kritik',
            self::REVISION => 'In Überarbeitung',
            self::VALIDATE => 'Zur Prüfung',
            self::APPROVE => 'Genehmigt',
            self::PUBLISHED => 'Veröffentlicht',
        };
    }

    /**
     * Get CSS class for badge styling.
     */
    public function badgeClass(): string
    {
        return match ($this) {
            self::DRAFT => 'draft',
            self::GENERATING => 'pending',
            self::CRITIQUE => 'warning',
            self::REVISION => 'warning',
            self::VALIDATE => 'info',
            self::APPROVE => 'success',
            self::PUBLISHED => 'completed',
        };
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

← Zurück zur Übersicht