ldc-boutique-cnc-sable/infra/Adapters/Services/SessionOrderBuilderManager.php
2026-10-27 09:58:12 +01:00

45 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Infrastructure\Adapters\Services;
use Domain\Builders\OrderBuilder;
use Domain\Builders\OrderBuilderTyped;
use Domain\Ports\Services\OrderBuilderSessionManager;
use Illuminate\Contracts\Session\Session;
class SessionOrderBuilderManager implements OrderBuilderSessionManager
{
public function __construct(
private readonly Session $session,
private readonly string $sessionKey
) {
throw_if(
empty(trim($sessionKey)),
\InvalidArgumentException::class,
'Session key cannot be empty'
);
}
public function get(): ?OrderBuilderTyped
{
$orderBuilder = $this->session->get($this->sessionKey);
if ($orderBuilder !== null && ! ($orderBuilder instanceof OrderBuilder)) {
throw new \UnexpectedValueException('Invalid session data for order builder');
}
return $orderBuilder;
}
public function save(OrderBuilder $builder): void
{
$this->session->put($this->sessionKey, $builder);
}
public function clear(): void
{
$this->session->forget($this->sessionKey);
}
}