src/Domain/Gateway/Adapters/Controller/ApiPlatform/GenerateGateway/GenerateGatewayHandler.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Domain\Gateway\Adapters\Controller\ApiPlatform\GenerateGateway;
  3. use App\Domain\Gateway\Entities\Exception\GatewayGeneratorNotSupportedException;
  4. use App\Domain\Gateway\UseCases\GenerateGateway\GenerateGateway;
  5. use App\Domain\Gateway\UseCases\GenerateGateway\GenerateGatewayPresenter;
  6. use App\Domain\Gateway\UseCases\GenerateGateway\GenerateGatewayRequest;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. class GenerateGatewayHandler
  10. {
  11.     private GenerateGateway $gatewayGenerator;
  12.     private array $presenters = [];
  13.     public function __construct(GenerateGateway $gatewayGenerator)
  14.     {
  15.         $this->gatewayGenerator $gatewayGenerator;
  16.         $this->presenters[GenerateGatewayJsonPresenter::FORMAT] = new GenerateGatewayJsonPresenter();
  17.         $this->presenters[GenerateGatewayXmlPresenter::FORMAT] = new GenerateGatewayXmlPresenter();
  18.     }
  19.     /**
  20.      * @param Request $request
  21.      * @return Response
  22.      *
  23.      * @throws GatewayGeneratorNotSupportedException
  24.      */
  25.     public function __invoke(Request $request): Response
  26.     {
  27.         $slug $request->attributes->get('slug');
  28.         $presenter $this->getPresenter($request->attributes->get('format'));
  29.         $this->gatewayGenerator->execute(
  30.             new GenerateGatewayRequest($slug),
  31.             $presenter
  32.         );
  33.         return $presenter->getResponse();
  34.     }
  35.     /**
  36.      * @param string $format
  37.      *
  38.      * @return GenerateGatewayPresenter
  39.      */
  40.     private function getPresenter(string $format): GenerateGatewayPresenter
  41.     {
  42.         return $this->presenters[$format];
  43.     }
  44. }