Files
ficheagent/app/States/Integration/IntegrationState.php

34 lines
860 B
PHP

<?php
namespace App\States\Integration;
use App\Models\IntegrationRequest;
use App\Enums\IntegrationStatus;
abstract class IntegrationState
{
public function __construct(protected IntegrationRequest $request)
{
}
abstract public function status(): IntegrationStatus;
public function canTransitionTo(IntegrationStatus $status): bool
{
return in_array($status, $this->allowedTransitions());
}
abstract protected function allowedTransitions(): array;
public function transitionTo(IntegrationStatus $status): void
{
if (!$this->canTransitionTo($status)) {
throw new \Exception("Transition from {$this->status()->value} to {$status->value} is not allowed.");
}
$this->request->update(['status' => $status]);
// Trigger events or notifications here
}
}