Backup #813

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

Dateiinhalt

<?php

namespace Domain\ValueObject;

/**
 * Status enum for pipeline runs with state machine transitions.
 */
enum PipelineRunStatus: string
{
    case PENDING = 'pending';
    case RUNNING = 'running';
    case COMPLETED = 'completed';
    case FAILED = 'failed';
    case CANCELLED = 'cancelled';

    /**
     * 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::PENDING => [self::RUNNING, self::CANCELLED],
            self::RUNNING => [self::COMPLETED, self::FAILED, self::CANCELLED],
            self::COMPLETED => [],
            self::FAILED => [self::PENDING], // Allow retry
            self::CANCELLED => [],
        };
    }

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

    /**
     * Check if pipeline is currently processing.
     */
    public function isActive(): bool
    {
        return $this === self::RUNNING;
    }

    /**
     * Check if pipeline can be retried.
     */
    public function canRetry(): bool
    {
        return $this === self::FAILED;
    }

    /**
     * Get human-readable label.
     */
    public function label(): string
    {
        return match ($this) {
            self::PENDING => 'Wartend',
            self::RUNNING => 'Läuft',
            self::COMPLETED => 'Abgeschlossen',
            self::FAILED => 'Fehlgeschlagen',
            self::CANCELLED => 'Abgebrochen',
        };
    }

    /**
     * Get CSS class for badge styling.
     */
    public function badgeClass(): string
    {
        return match ($this) {
            self::PENDING => 'pending',
            self::RUNNING => 'info',
            self::COMPLETED => 'completed',
            self::FAILED => 'failed',
            self::CANCELLED => 'warning',
        };
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

← Zurück zur Übersicht