src/Controller/Admin/API/Flight/FlightApiController.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin\API\Flight;
  3. use App\Entity\FlightAvailabilityRequest;
  4. use App\Service\ApiLogService;
  5. use App\Service\Flight\FlightService;
  6. use App\Service\GenericApiService;
  7. use App\Service\Helpers;
  8. use Exception;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpClient\HttpClient;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpKernel\KernelInterface;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Contracts\HttpClient\HttpClientInterface;
  17. use function PHPUnit\Framework\isEmpty;
  18. class FlightApiController extends AbstractController
  19. {
  20.     public function __construct(
  21.         private readonly FlightService     $flightService,
  22.         private readonly GenericApiService $genericApiService,
  23.         private readonly Helpers           $helpers,
  24.         private readonly ApiLogService     $apiLogService,
  25.     )
  26.     {
  27.     }
  28.     #[Route('/api/flight/autocomplete'name'app_api_flight_autocomplete'methods: ['GET'])]
  29.     public function autocomplete(Request $request): Response
  30.     {
  31.         $headers = ['ApiKey' => $request->headers->get('Apikey'),];
  32.         $securityResult $this->genericApiService->checkAuthorization($headers);
  33.         $customer $securityResult['customer'];
  34.         // Error
  35.         if ($securityResult['error']) {
  36.             return $this->json([
  37.                 'method' => "autocomplete",
  38.                 'error' => true,
  39.                 'message' => $securityResult['message'],
  40.                 'ip_address' => $securityResult['ipAddress'],
  41.             ], 400);
  42.         }
  43.         // No Security Error
  44.         $keyword $request->query->get('keyword');
  45.         $parameters = [
  46.             'keyword' => $keyword
  47.         ];
  48.         $locations $this->flightService->getAirportsAndCities($parameters);
  49.         $response = [
  50.             'method' => "autocomplete",
  51.             'error' => false,
  52.             'ip_address' => $securityResult['ipAddress'],
  53.             'customer_id' => ($customer !== null) ? $customer->getId() : 0,
  54.             'locations' => $locations,
  55.         ];
  56.         return $this->json($response);
  57.     }
  58.     #[Route('/api/flight/availability'name'app_api_flight_availability')]
  59.     public function availability(Request $request): Response
  60.     {
  61.         $start_time microtime(true);
  62.         $headers = [
  63.             'ApiKey' => $request->headers->get('Apikey'),
  64.             'sourceId' => $request->headers->get('sourceId'0)
  65.         ];
  66.         $securityResult $this->genericApiService->checkAuthorization($headers);
  67.         // Error
  68.         if ($securityResult['error']) {
  69.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  70.             return $this->json([
  71.                 'method' => "availability",
  72.                 'error' => true,
  73.                 'message' => $securityResult['message'],
  74.                 'ip_address' => $securityResult['ipAddress'],
  75.             ], 400);
  76.         }
  77.         // No Security Error
  78.         $customer $securityResult['customer'];
  79.         $user $securityResult['User'];
  80.         $requestJson $request->getContent();
  81.         $parameters json_decode($requestJsontrue) ?? [];
  82.         $requestError FlightAvailabilityRequest::checkParameters($parameters);
  83.         if ($requestError != "") {
  84.             return $this->json(['errorMessage' => $requestError'errorCode' => 400]);
  85.         }
  86.         $searchCode '';
  87.         $flightOffers = [];
  88.         try {
  89.             $flightSearchRequest FlightAvailabilityRequest::constructWithParameters($parameters$customer);
  90.             if ($headers['sourceId'] > 0) {
  91.                 $flightSearchRequest->setSourceId($headers['sourceId']);
  92.             }
  93.             $id $this->apiLogService->logApiCall($request$start_time'200''WAITING'$customer$usernull);
  94.             $arraySearchCode = [
  95.                 'id' => $id,
  96.             ];
  97.             $searchCode $this->helpers->encryptSerializedData($arraySearchCode);
  98.             $flightOffers $this->flightService->searchOffers($flightSearchRequest$user$searchCode);
  99.             $this->apiLogService->setLogDetail($id'200'implode($flightOffers['messages']) , $start_time);
  100.         } catch (Exception $e) {
  101.             $errorResponse = [
  102.                 'api' => '/api/flight/',
  103.                 'method' => 'availability',
  104.                 'content' => null,
  105.                 'status' => 500,
  106.                 'error' => true,
  107.                 'message' => $e->getMessage(),
  108.                 'executionTime' => microtime(true) - $start_time
  109.             ];
  110.             // Log error with req + err_res
  111.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  112.         }
  113.         $response = [
  114.             'error' => false,
  115.             'message' => '',
  116.             'ip_address' => $securityResult['ipAddress'],
  117.             'customer' => $securityResult['customerId'],
  118.             'searchCode' => $searchCode,
  119.             'content' => $flightOffers,
  120.         ];
  121.         return $this->json($response);
  122.     }
  123.     #[Route('/api/flight/checkrate'name'app_api_flight_offer_checkrate')]
  124.     public function checkrate(Request $request): Response
  125.     {
  126.         $start_time microtime(true);
  127.         $headers = ['ApiKey' => $request->headers->get('Apikey')];
  128.         $searchCode $request->headers->get('searchCode');
  129.         $securityResult $this->genericApiService->checkAuthorization($headers);
  130.         // Error
  131.         if ($securityResult['error']) {
  132.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  133.             return $this->json([
  134.                 'method' => "checkrate",
  135.                 'error' => true,
  136.                 'message' => $securityResult['message'],
  137.                 'ip_address' => $securityResult['ipAddress'],
  138.             ], 400);
  139.         }
  140.         $customer $securityResult['customer'];
  141.         $user $securityResult['User'];
  142.         $checkRateOffer = [];
  143.         try {
  144.             $requestJson $request->getContent();
  145.             $parameters json_decode($requestJsontrue);
  146.             $sourceId $request->headers->get('sourceId') ?? $parameters['sourceId'];
  147.             $checkRateOffer $this->flightService->checkRate($parameters$sourceId$user$searchCode);
  148.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$checkRateOffer);
  149.         } catch (Exception $e) {
  150.             $errorResponse = [
  151.                 'api' => '/api/flight/',
  152.                 'method' => 'checkrate',
  153.                 'content' => null,
  154.                 'status' => 500,
  155.                 'error' => true,
  156.                 'message' => $e->getMessage(),
  157.                 'executionTime' => microtime(true) - $start_time
  158.             ];
  159.             // Log error with req + err_res
  160.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  161.         }
  162.         $error $checkRateOffer['error'] ?? false;
  163.         $message $checkRateOffer['providerMessage'] ?? "";
  164.         $response = [
  165.             'error' => $error,
  166.             'message' => $message,
  167.             'ip_address' => $securityResult['ipAddress'],
  168.             'customer' => $securityResult['customerId'],
  169.             'searchCode' => '',
  170.             'content' => $checkRateOffer,
  171.         ];
  172.         return $this->json($response);
  173.     }
  174.     #[Route('/api/flight/getFareRules'name'app_api_flight_offer_fareRules')]
  175.     public function getFareRules(Request $request): Response
  176.     {
  177.         $start_time microtime(true);
  178.         $headers = ['ApiKey' => $request->headers->get('Apikey')];
  179.         $searchCode $request->headers->get('searchCode');
  180.         $securityResult $this->genericApiService->checkAuthorization($headers);
  181.         // Error
  182.         if ($securityResult['error']) {
  183.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  184.             return $this->json([
  185.                 'method' => "getFareRules",
  186.                 'error' => true,
  187.                 'message' => $securityResult['message'],
  188.                 'ip_address' => $securityResult['ipAddress'],
  189.             ], 400);
  190.         }
  191.         $customer $securityResult['customer'];
  192.         $user $securityResult['User'];
  193.         $checkRateOffer = [];
  194.         try {
  195.             $requestJson $request->getContent();
  196.             $parameters json_decode($requestJsontrue);
  197.             $sourceId $request->headers->get('sourceId') ?? $parameters['sourceId'];
  198.             $checkRateOffer $this->flightService->fareRules($parameters$sourceId);
  199.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$checkRateOffer);
  200.         } catch (Exception $e) {
  201.             $errorResponse = [
  202.                 'api' => '/api/flight/',
  203.                 'method' => 'getFareRules',
  204.                 'content' => null,
  205.                 'status' => 500,
  206.                 'error' => true,
  207.                 'message' => $e->getMessage(),
  208.                 'executionTime' => microtime(true) - $start_time
  209.             ];
  210.             // Log error with req + err_res
  211.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  212.         }
  213.         $error $checkRateOffer['error'] ?? false;
  214.         $message $checkRateOffer['providerMessage'] ?? "";
  215.         $response = [
  216.             'error' => $error,
  217.             'message' => $message,
  218.             'ip_address' => $securityResult['ipAddress'],
  219.             'customer' => $securityResult['customerId'],
  220.             'searchCode' => '',
  221.             'content' => $checkRateOffer,
  222.         ];
  223.         return $this->json($response);
  224.     }
  225.     #[Route('/api/flight/createPnr'name'app_api_flight_order_create_pnr')]
  226.     public function createPnr(Request $request): JsonResponse
  227.     {
  228.         $start_time microtime(true);
  229.         $headers = ['ApiKey' => $request->headers->get('Apikey')];
  230.         $searchCode $request->headers->get('searchCode') ?? '';
  231.         $securityResult $this->genericApiService->checkAuthorization($headers);
  232.         // Error
  233.         if ($securityResult['error']) {
  234.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  235.             return $this->json([
  236.                 'method' => "createPnr",
  237.                 'error' => true,
  238.                 'message' => $securityResult['message'],
  239.                 'ip_address' => $securityResult['ipAddress'],
  240.             ], 400);
  241.         }
  242.         $customer $securityResult['customer'];
  243.         $user $securityResult['User'];
  244.         $message "";
  245.         $content = [];
  246.         try {
  247.             $requestJson $request->getContent();
  248.             $parameters json_decode($requestJsontrue);
  249.             $sourceId $request->headers->get('sourceId');// $parameters['sourceId'];
  250.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$content);
  251.             $content $this->flightService->createPnr($parameters$sourceId$user$message$searchCode);
  252.         } catch (Exception $e) {
  253.             $errorResponse = [
  254.                 'api' => '/api/flight/',
  255.                 'method' => 'createPnr',
  256.                 'content' => null,
  257.                 'status' => 500,
  258.                 'error' => true,
  259.                 'message' => $e->getMessage(),
  260.                 'executionTime' => microtime(true) - $start_time
  261.             ];
  262.             // Log error with req + err_res
  263.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  264.         }
  265.         $error = (isset($content['error']) && $content['error']) || (count($content) == 0);
  266.         return $this->json([
  267.             'error' => $error,
  268.             'message' => (!empty($message) ? $message ''),
  269.             'ip_address' => $securityResult['ipAddress'],
  270.             'customer_id' => $securityResult['customerId'],
  271.             'content' => $content,
  272.         ]);
  273.     }
  274.     #[Route('/api/flight/orderDetail'name'app_api_flight_order_detail')]
  275.     public function orderDetail(Request $request): Response
  276.     {
  277.         $start_time microtime(true);
  278.         $headers = ['ApiKey' => $request->headers->get('Apikey')];
  279.         $sourceId $request->headers->get('sourceId') ?? 1;
  280.         $securityResult $this->genericApiService->checkAuthorization($headers);
  281.         // Error
  282.         if ($securityResult['error']) {
  283.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  284.             return $this->json([
  285.                 'method' => "orderDetails",
  286.                 'error' => true,
  287.                 'message' => $securityResult['message'],
  288.                 'ip_address' => $securityResult['ipAddress'],
  289.             ], 400);
  290.         }
  291.         $customer $securityResult['customer'];
  292.         $user $securityResult['User'];
  293.         $response = [];
  294.         try {
  295.             $requestJson $request->getContent();
  296.             $parameters json_decode($requestJsontrue);
  297.             $orderId $parameters['orderId'];
  298.             $response $this->flightService->getOrderDetail($sourceId$orderId);
  299.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$response);
  300.         } catch (Exception $e) {
  301.             $errorResponse = [
  302.                 'api' => '/api/flight/',
  303.                 'method' => 'orderDetail',
  304.                 'content' => null,
  305.                 'status' => 500,
  306.                 'error' => true,
  307.                 'message' => $e->getMessage(),
  308.                 'executionTime' => microtime(true) - $start_time
  309.             ];
  310.             // Log error with req + err_res
  311.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  312.         }
  313.         return $this->json($response);
  314.     }
  315.     #[Route('/api/flight/cancel'name'app_api_flight_order_cancel')]
  316.     public function cancel(Request $request): Response
  317.     {
  318.         $start_time microtime(true);
  319.         $headers = ['ApiKey' => $request->headers->get('ApiKey')];
  320.         $securityResult $this->genericApiService->checkAuthorization($headers);
  321.         // Error
  322.         if ($securityResult['error']) {
  323.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  324.             return $this->json([
  325.                 'method' => "orderDetails",
  326.                 'error' => true,
  327.                 'message' => $securityResult['message'],
  328.                 'ip_address' => $securityResult['ipAddress'],
  329.             ], 400);
  330.         }
  331.         $customer $securityResult['customer'];
  332.         $user $securityResult['User'];
  333.         $response = [];
  334.         try {
  335.             $requestJson $request->getContent();
  336.             $parameters json_decode($requestJsontrue);
  337.             $orderId $parameters['orderId'];
  338.             $sourceId $request->headers->get('sourceId') ?? null;
  339.             $response $this->flightService->cancelOrder($sourceId$orderId$user);
  340.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$response);
  341.         } catch (Exception $e) {
  342.             $errorResponse = [
  343.                 'api' => '/api/flight/',
  344.                 'method' => 'cancel',
  345.                 'content' => null,
  346.                 'status' => 500,
  347.                 'error' => true,
  348.                 'message' => $e->getMessage(),
  349.                 'executionTime' => microtime(true) - $start_time
  350.             ];
  351.             // Log error with req + err_res
  352.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  353.         }
  354.         return $this->json($response);
  355.     }
  356.     #[Route('/api/flight/confirm'name'app_api_flight_order_confirm')]
  357.     public function orderConfirm(Request $request): Response
  358.     {
  359.         $start_time microtime(true);
  360.         $sourceId $request->headers->get('sourceId');
  361.         $headers = ['ApiKey' => $request->headers->get('ApiKey')];
  362.         $securityResult $this->genericApiService->checkAuthorization($headers);
  363.         // Error
  364.         if ($securityResult['error']) {
  365.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  366.             return $this->json([
  367.                 'method' => "orderDetails",
  368.                 'error' => true,
  369.                 'message' => $securityResult['message'],
  370.                 'ip_address' => $securityResult['ipAddress'],
  371.             ], 400);
  372.         }
  373.         $customer $securityResult['customer'];
  374.         $user $securityResult['User'];
  375.         $response = [];
  376.         try {
  377.             $requestJson $request->getContent();
  378.             $data json_decode($requestJsontrue);
  379.             $orderId $data['orderId'];
  380.             $confirmDate $data['confirmDate'];
  381.             $response $this->flightService->orderConfirm($sourceId$orderId$confirmDate);
  382.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$response);
  383.         } catch (Exception $e) {
  384.             $errorResponse = [
  385.                 'api' => '/api/flight/',
  386.                 'method' => 'availability',
  387.                 'content' => null,
  388.                 'status' => 500,
  389.                 'error' => true,
  390.                 'message' => $e->getMessage(),
  391.                 'executionTime' => microtime(true) - $start_time
  392.             ];
  393.             // Log error with req + err_res
  394.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  395.         }
  396.         return $this->json($response);
  397.     }
  398.     #[Route('/api/flight/issue'name'app_api_flight_order_issuance_tickets')]
  399.     public function issuanceTickets(Request $request): Response
  400.     {
  401.         $start_time microtime(true);
  402.         $sourceId $request->headers->get('sourceId');
  403.         $headers = ['ApiKey' => $request->headers->get('ApiKey')];
  404.         $securityResult $this->genericApiService->checkAuthorization($headers);
  405.         // Error
  406.         if ($securityResult['error']) {
  407.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  408.             return $this->json([
  409.                 'method' => "issue",
  410.                 'error' => true,
  411.                 'message' => $securityResult['message'],
  412.                 'ip_address' => $securityResult['ipAddress'],
  413.             ], 400);
  414.         }
  415.         $customer $securityResult['customer'];
  416.         $user $securityResult['User'];
  417.         $response = [];
  418.         try {
  419.             $requestJson $request->getContent();
  420.             $parameters json_decode($requestJsontrue);
  421.             $response $this->flightService->issueTickets($sourceId$parameters$user);
  422.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$response);
  423.         } catch (Exception $e) {
  424.             $errorResponse = [
  425.                 'api' => '/api/flight/',
  426.                 'method' => 'issue',
  427.                 'content' => null,
  428.                 'status' => 500,
  429.                 'error' => true,
  430.                 'message' => $e->getMessage(),
  431.                 'executionTime' => microtime(true) - $start_time
  432.             ];
  433.             // Log error with req + err_res
  434.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  435.         }
  436.         return $this->json($response);
  437.     }
  438.     #[Route('/api/flight/void'name'app_api_flight_void_ticket')]
  439.     public function voidTicket(Request $request): Response
  440.     {
  441.         $start_time microtime(true);
  442.         $sourceId $request->headers->get('sourceId');
  443.         $headers = ['ApiKey' => $request->headers->get('ApiKey')];
  444.         $securityResult $this->genericApiService->checkAuthorization($headers);
  445.         // Error
  446.         if ($securityResult['error']) {
  447.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  448.             return $this->json([
  449.                 'method' => "orderDetails",
  450.                 'error' => true,
  451.                 'message' => $securityResult['message'],
  452.                 'ip_address' => $securityResult['ipAddress'],
  453.             ], 400);
  454.         }
  455.         $customer $securityResult['customer'];
  456.         $user $securityResult['User'];
  457.         $response = [];
  458.         try {
  459.             $requestJson $request->getContent();
  460.             $parameters json_decode($requestJsontrue);
  461.             $response $this->flightService->voidOrder($sourceId$parameters$user);
  462.             $this->apiLogService->logApiCall($request$start_time'200''OK'$customer$user$response);
  463.         } catch (Exception $e) {
  464.             $errorResponse = [
  465.                 'api' => '/api/flight/',
  466.                 'method' => 'issue',
  467.                 'content' => null,
  468.                 'status' => 500,
  469.                 'error' => true,
  470.                 'message' => $e->getMessage(),
  471.                 'executionTime' => microtime(true) - $start_time
  472.             ];
  473.             // Log error with req + err_res
  474.             $this->apiLogService->logApiCall($request$start_time'500''Internal Server Error'$customer$user$errorResponse);
  475.         }
  476.         return $this->json($response);
  477.     }
  478.     #[Route('/api/flight/GDS'name'app_api_flight_gds_list'methods: ['GET'])]
  479.     public function gdsList(Request $request): Response
  480.     {
  481.         $start_time microtime(true);
  482.         $headers = ['ApiKey' => $request->headers->get('Apikey')];
  483.         $securityResult $this->genericApiService->checkAuthorization($headers);
  484.         $client $securityResult['customer'];
  485.         // Error
  486.         if ($securityResult['error']) {
  487.             $this->apiLogService->logApiCall($request$start_time'401''Authentication Error');
  488.             return $this->json([
  489.                 'method' => "gdsList",
  490.                 'error' => true,
  491.                 'message' => $securityResult['message'],
  492.                 'ip_address' => $securityResult['ipAddress'],
  493.             ], 400);
  494.         }
  495.         $customer $securityResult['customer'];
  496.         $user $securityResult['User'];
  497.         $gds_list $this->flightService->getGDSList($client);
  498.         $response = [
  499.             'method' => "autocomplete",
  500.             'error' => false,
  501.             'ip_address' => $securityResult['ipAddress'],
  502.             'customer_id' => ($client !== null) ? $client->getId() : 0,
  503.             'gdsList' => $gds_list,
  504.         ];
  505.         return $this->json($response);
  506.     }
  507. }