34 lines
860 B
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
|
|
}
|
|
}
|