src/Controller/ApiTouraineHotelsController.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Data\ElementThData;
  4. use App\Entity\Element;
  5. use App\Repository\ElementRepository;
  6. use App\Repository\OnPlaceRepository;
  7. use App\Service\ResponseFactoryService;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. #[Route('/api/v1/tourainehotels'name'api.tourainehotels')]
  12. class ApiTouraineHotelsController extends AbstractController
  13. {
  14.     public function __construct(protected int $httpCacheExpiration)
  15.     {
  16.     }
  17.     #[Route('/search/{details}',
  18.         name'search',
  19.         requirements: [
  20.             'details' => 'short-details|long-details'
  21.         ])
  22.     ]
  23.     public function search(string $detailsElementRepository $elementRepository,
  24.                            ResponseFactoryService $responseFactoryService): JsonResponse
  25.     {
  26.         try {
  27.             $elements $elementRepository->findBy(['groupmentTouraineHotels' => true]);
  28.             $list = [];
  29.             foreach ($elements as $element) {
  30.                 $list[] = new ElementThData($element);
  31.             }
  32.             return $responseFactoryService->replyOk(['data' => $list], $details)
  33.                 ->setSharedMaxAge($this->httpCacheExpiration);;
  34.         } catch (\InvalidArgumentException $exception) {
  35.             return $responseFactoryService->replyError($exception->getMessage());
  36.         }
  37.     }
  38.     #[Route('/show/{reference}/{details}',
  39.         name'show',
  40.         requirements: [
  41.             'details' => 'short-details|long-details'
  42.         ])
  43.     ]
  44.     public function show(Element $elementstring $detailsResponseFactoryService $responseFactoryService): JsonResponse
  45.     {
  46.         try {
  47.             $element = new ElementThData($element);
  48.             return $responseFactoryService->replyOk(['data' => $element], $details)
  49.                 ->setSharedMaxAge($this->httpCacheExpiration);;
  50.         } catch (\InvalidArgumentException $exception) {
  51.             return $responseFactoryService->replyError($exception->getMessage());
  52.         }
  53.     }
  54.     
  55.     #[Route('/onplace/{reference}/{details}',
  56.         name'onplace',
  57.         requirements: [
  58.             'details' => 'onplace-details'
  59.         ])
  60.     ]
  61.     public function onplace(Element $elementstring $detailsOnPlaceRepository $onPlaceRepositoryResponseFactoryService $responseFactoryService): JsonResponse
  62.     {
  63.         try {
  64.             $onPlace $onPlaceRepository->findBy(['parent' => $element->getThMember()->getId()]);
  65.             
  66.             $data = [];
  67.             $data['status'] = 200;
  68.             $data['message'] = 'ok';
  69.             $data['data'] = $onPlace;
  70.             
  71.             return new JsonResponse($data200);
  72.         } catch (\InvalidArgumentException $exception) {
  73.             return $responseFactoryService->replyError($exception->getMessage());
  74.         }
  75.     }
  76.     #[Route('/map/{details}',
  77.         name'map',
  78.         requirements: [
  79.             'details' => 'th-geojson'
  80.         ])
  81.     ]
  82.     public function map(string $detailsElementRepository $elementRepository,
  83.                         ResponseFactoryService $responseFactoryService): JsonResponse
  84.     {
  85.         try {
  86.             $elements $elementRepository->findBy(['groupmentTouraineHotels' => true]);
  87.             $list = [];
  88.             foreach ($elements as $element) {
  89.                 $list[] = new ElementThData($element);
  90.             }
  91.             return $responseFactoryService->replyOk(['data' => $list], $details)
  92.                 ->setSharedMaxAge($this->httpCacheExpiration);
  93.         } catch (\InvalidArgumentException $exception) {
  94.             return $responseFactoryService->replyError($exception->getMessage());
  95.         }
  96.     }
  97.     #[Route('/export'name'export')]
  98.     public function export(ElementRepository $elementRepositoryResponseFactoryService $responseFactoryService): JsonResponse
  99.     {
  100.         try {
  101.             $elements $elementRepository->findBy(['groupmentTouraineHotels' => true]);
  102.             $list = [];
  103.             foreach ($elements as $element) {
  104.                 $list[] = new ElementThData($element);
  105.             }
  106.             return $responseFactoryService->replyOk(['data' => $list], 'export-details');
  107.         } catch (\InvalidArgumentException $exception) {
  108.             return $responseFactoryService->replyError($exception->getMessage());
  109.         }
  110.     }
  111. }