45 lines
1.1 KiB
PHP
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);
|
|
}
|
|
}
|