<?php
namespace App\Domain\Gateway\Adapters\Controller\ApiPlatform\GenerateGateway;
use App\Domain\Gateway\Entities\Exception\GatewayGeneratorNotSupportedException;
use App\Domain\Gateway\UseCases\GenerateGateway\GenerateGateway;
use App\Domain\Gateway\UseCases\GenerateGateway\GenerateGatewayPresenter;
use App\Domain\Gateway\UseCases\GenerateGateway\GenerateGatewayRequest;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class GenerateGatewayHandler
{
private GenerateGateway $gatewayGenerator;
private array $presenters = [];
public function __construct(GenerateGateway $gatewayGenerator)
{
$this->gatewayGenerator = $gatewayGenerator;
$this->presenters[GenerateGatewayJsonPresenter::FORMAT] = new GenerateGatewayJsonPresenter();
$this->presenters[GenerateGatewayXmlPresenter::FORMAT] = new GenerateGatewayXmlPresenter();
}
/**
* @param Request $request
* @return Response
*
* @throws GatewayGeneratorNotSupportedException
*/
public function __invoke(Request $request): Response
{
$slug = $request->attributes->get('slug');
$presenter = $this->getPresenter($request->attributes->get('format'));
$this->gatewayGenerator->execute(
new GenerateGatewayRequest($slug),
$presenter
);
return $presenter->getResponse();
}
/**
* @param string $format
*
* @return GenerateGatewayPresenter
*/
private function getPresenter(string $format): GenerateGatewayPresenter
{
return $this->presenters[$format];
}
}