bundles/VehicleIngestBundle/Controller/AdController.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace VehicleIngestBundle\Controller;
  4. use Pimcore\Controller\FrontendController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Messenger\MessageBusInterface;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use VehicleIngestBundle\Message\IngestAdMessage;
  10. use VehicleIngestBundle\Persistence\VehicleLookup;
  11. use VehicleIngestBundle\Registry\AdIdRegistry;
  12. use VehicleIngestBundle\Service\ErrorResponseFactory;
  13. class AdController extends FrontendController
  14. {
  15.     public function __construct(
  16.         private AdIdRegistry $registry,
  17.         private MessageBusInterface $bus,
  18.         private ErrorResponseFactory $errors,
  19.         private VehicleLookup $lookup,
  20.     ) {
  21.     }
  22.     /**
  23.      * @Route("/seller-api/sellers/{sellerId}/ads", name="seller_api_ad_create", methods={"POST"})
  24.      */
  25.     public function createAction(Request $requeststring $sellerId): Response
  26.     {
  27.         $raw $request->getContent();
  28.         $data json_decode($rawtrue);
  29.         if (!is_array($data)) {
  30.             return $this->errors->keyed('body');
  31.         }
  32.         $requestId $request->headers->get('X-Mobile-Insertion-Request-Id');
  33.         $adId $this->registry->mint($requestId);
  34.         $this->bus->dispatch(new IngestAdMessage('upsert'$adId$data$sellerId$requestId));
  35.         return new Response(''Response::HTTP_CREATED, [
  36.             'Location' => sprintf('/seller-api/sellers/%s/ads/%s'$sellerId$adId),
  37.         ]);
  38.     }
  39.     /**
  40.      * @Route("/seller-api/sellers/{sellerId}/ads/{adId}", name="seller_api_ad_update", methods={"PUT"}, requirements={"adId"="\d+"})
  41.      */
  42.     public function updateAction(Request $requeststring $sellerIdstring $adId): Response
  43.     {
  44.         if (!$this->registry->exists($adId) && $this->lookup->byAdId($adId) === null) {
  45.             return new Response(''Response::HTTP_NOT_FOUND);
  46.         }
  47.         $data json_decode($request->getContent(), true);
  48.         if (!is_array($data)) {
  49.             return $this->errors->keyed('body');
  50.         }
  51.         $this->bus->dispatch(new IngestAdMessage('upsert'$adId$data$sellerIdnull));
  52.         return new Response(''Response::HTTP_OK);
  53.     }
  54.     /**
  55.      * @Route("/seller-api/sellers/{sellerId}/ads/{adId}", name="seller_api_ad_delete", methods={"DELETE"}, requirements={"adId"="\d+"})
  56.      */
  57.     public function deleteAction(string $sellerIdstring $adId): Response
  58.     {
  59.         $this->bus->dispatch(new IngestAdMessage('delete'$adIdnull$sellerIdnull));
  60.         return new Response(''Response::HTTP_NO_CONTENT);
  61.     }
  62.     /**
  63.      * @Route("/seller-api/sellers/{sellerId}/ads/{adId}", name="seller_api_ad_get", methods={"GET"}, requirements={"adId"="\d+"})
  64.      */
  65.     public function getAction(string $adId): Response
  66.     {
  67.         $exists $this->registry->exists($adId) || $this->lookup->byAdId($adId) !== null;
  68.         return new Response(''$exists Response::HTTP_OK Response::HTTP_NOT_FOUND);
  69.     }
  70. }