EntityStatus.php

Code Hygiene Score: 100

Keine Issues gefunden.

Klassen 1

Funktionen 7

Code

<?php

declare(strict_types=1);

namespace Domain\ValueObject;

// @responsibility: Entity-Status-Enum für Wissensgraph-Entitäten

enum EntityStatus: string
{
    case EXTRACTED = 'extracted';
    case NORMALIZED = 'normalized';
    case VALIDATED = 'validated';
    case DEPRECATED = 'deprecated';
    case MERGED = 'merged';

    /**
     * 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::EXTRACTED => [self::NORMALIZED, self::DEPRECATED],
            self::NORMALIZED => [self::VALIDATED, self::DEPRECATED, self::MERGED],
            self::VALIDATED => [self::DEPRECATED, self::MERGED],
            self::DEPRECATED => [],
            self::MERGED => [],
        };
    }

    /**
     * Check if this is a terminal status.
     */
    public function isTerminal(): bool
    {
        return in_array($this, [self::DEPRECATED, self::MERGED], true);
    }

    /**
     * Check if entity is actively usable.
     */
    public function isActive(): bool
    {
        return in_array($this, [self::EXTRACTED, self::NORMALIZED, self::VALIDATED], true);
    }

    /**
     * Check if entity is fully processed.
     */
    public function isValidated(): bool
    {
        return $this === self::VALIDATED;
    }

    /**
     * Get human-readable label.
     */
    public function label(): string
    {
        return match ($this) {
            self::EXTRACTED => 'Extrahiert',
            self::NORMALIZED => 'Normalisiert',
            self::VALIDATED => 'Validiert',
            self::DEPRECATED => 'Veraltet',
            self::MERGED => 'Zusammengeführt',
        };
    }

    /**
     * Get CSS class for badge styling.
     */
    public function badgeClass(): string
    {
        return match ($this) {
            self::EXTRACTED => 'pending',
            self::NORMALIZED => 'info',
            self::VALIDATED => 'completed',
            self::DEPRECATED => 'warning',
            self::MERGED => 'secondary',
        };
    }
}
← Übersicht Graph