src/Controller/Api/OffersController.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\CommonDataStructures\InputOffersData;
  4. use App\Exception\AppException;
  5. use App\UseCase\GetOffers;
  6. use FOS\RestBundle\Controller\AbstractFOSRestController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\HttpFoundation\Response;
  10. /**
  11.  * Diabelek: te 3 wpisy są potrzebne by się generowała dokumentacja
  12.  */
  13. use Nelmio\ApiDocBundle\Annotation\Model;
  14. use OpenApi\Annotations as OA;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class OffersController extends AbstractFOSRestController
  17. {
  18.     /**
  19.      * @var Request|null
  20.      */
  21.     private ?Request $request;
  22.     /**
  23.      * @param RequestStack|null $requestStack
  24.      * @param GetOffers $getOffers
  25.      */
  26.     public function __construct(
  27.         ?RequestStack             $requestStack,
  28.         private readonly GetOffers $getOffers
  29.     )
  30.     {
  31.         $this->request $requestStack->getCurrentRequest();
  32.     }
  33.     /**
  34.      * Zwraca listę ofert
  35.      *
  36.      * @Route("/offers", methods={"POST"})
  37.      *
  38.      * @OA\Tag(name="Offers")
  39.      *
  40.      * @OA\Post(
  41.      *     description="MERLIN [offers] wysyłamy postem XML z wstępnymi danymi do wyszukiwania.",
  42.      *      @OA\RequestBody(
  43.      *          required=false,
  44.      *          @OA\MediaType(
  45.      *              mediaType="application/json",
  46.      *              @OA\Schema(
  47.      *                  description="Place for json body",
  48.      *                  type="string",
  49.      *                  ref=@Model(type=InputOffersData::class)
  50.      *              )
  51.      *          )
  52.      *      )
  53.      * )
  54.      *
  55.      * @OA\Response(
  56.      *     response=200,
  57.      *     description="Offers",
  58.      *     @OA\MediaType(
  59.      *          mediaType="application/json"
  60.      *     )
  61.      * )
  62.      *
  63.      * @return Response
  64.      * @throws AppException
  65.      */
  66.     public function postAction(): Response
  67.     {
  68.         $data json_decode($this->request->getContent(), true);
  69.         $inputData = new InputOffersData($data);
  70.         return $this->handleView($this->view($this->getOffers->getResponse($inputData)));
  71.     }
  72. }