src/Controller/MainController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\SberbankAcquiringOrder;
  4. use App\Entity\SberbankAcquiringOrderWebhook;
  5. use App\Repository\CustomerRepository;
  6. use App\Repository\SberbankAcquiringOrderRepository;
  7. use App\Repository\SberbankAcquiringOrderWebhookRepository;
  8. use App\Repository\TransportCompanyRepository;
  9. use App\Service\Api;
  10. use App\Service\Mango;
  11. use App\Service\Order\Payment;
  12. use Exception;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  19. /**
  20.  * @Route("/")
  21.  */
  22. class MainController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("", methods="GET")
  26.      */
  27.     public function main(): Response
  28.     {
  29.         $params $this->getBaseParams();
  30.         $params['js_version'] = filemtime(__DIR__ '/../../public/assets/js/index_search.js');
  31.         return $this->render('main.html.twig'$params);
  32.     }
  33.     /**
  34.      * @Route("contacts", methods="GET")
  35.      */
  36.     public function contacts(): Response
  37.     {
  38.         return $this->render('contacts.html.twig'$this->getBaseParams());
  39.     }
  40.     /**
  41.      * @Route("about", methods="GET")
  42.      */
  43.     public function about(): Response
  44.     {
  45.         return $this->render('about.html.twig'$this->getBaseParams());
  46.     }
  47.     /**
  48.      * @Route("payment", methods="GET")
  49.      */
  50.     public function payment(): Response
  51.     {
  52.         return $this->render('payment.html.twig'$this->getBaseParams());
  53.     }
  54.     /**
  55.      * @Route("delivery", methods="GET")
  56.      */
  57.     public function delivery(): Response
  58.     {
  59.         return $this->render('delivery.html.twig'$this->getBaseParams());
  60.     }
  61.     /**
  62.      * @Route("search", methods="GET")
  63.      */
  64.     public function search(): Response
  65.     {
  66.         $params $this->getBaseParams();
  67.         $params['js_version'] = filemtime(__DIR__ '/../../public/assets/js/search_page.js');
  68.         return $this->render('search.html.twig'$params);
  69.     }
  70.     /**
  71.      * @Route("cart_page", methods="GET")
  72.      */
  73.     public function cartPage(): Response
  74.     {
  75.         $params $this->getBaseParams();
  76.         $params['js_version_cart_page'] = filemtime(__DIR__ '/../../public/assets/js/cart_page.js');
  77.         return $this->render('cart_page.html.twig'$params);
  78.     }
  79.     /**
  80.      * @Route("orders", methods="GET")
  81.      */
  82.     public function orders(): Response
  83.     {
  84.         $params $this->getBaseParams();
  85.         $params['js_version_orders'] = filemtime(__DIR__ '/../../public/assets/js/orders.js');
  86.         return $this->render('orders.html.twig'$params);
  87.     }
  88.     /**
  89.      * @Route("request/{hash}", methods="GET")
  90.      */
  91.     public function order(): Response
  92.     {
  93.         $params $this->getBaseParams();
  94.         $params['js_version_order'] = filemtime(__DIR__ '/../../public/assets/js/order.js');
  95.         return $this->render('order.html.twig'$params);
  96.     }
  97.     /**
  98.      * @Route("payment/success", methods="GET")
  99.      */
  100.     public function paymentSuccess(Request $requestSberbankAcquiringOrderRepository $sberbankAcquiringOrderRepositoryPayment $paymentOrderService): Response
  101.     {
  102.         /** @var SberbankAcquiringOrder $sberbankAcquiringOrder */
  103.         $sberbankAcquiringOrder $sberbankAcquiringOrderRepository->findOneBy(['acquiringOrder' => $request->query->get('orderId')]);
  104.         $paymentOrderService->executePaymentBySberbank($sberbankAcquiringOrder);
  105.         $params $this->getBaseParams();
  106.         $params['order'] = ['hash' => $sberbankAcquiringOrder->getOrder()->getHash()];
  107.         return $this->render('success_payment.html.twig'$params);
  108.     }
  109.     /**
  110.      * @Route("payment/failed", methods="GET")
  111.      */
  112.     public function paymentFailed(Request $requestSberbankAcquiringOrderRepository $sberbankAcquiringOrderRepositoryPayment $paymentOrderService): Response
  113.     {
  114.         /** @var SberbankAcquiringOrder $sberbankAcquiringOrder */
  115.         $sberbankAcquiringOrder $sberbankAcquiringOrderRepository->findOneBy(['acquiringOrder' => $request->query->get('orderId')]);
  116.         $params $this->getBaseParams();
  117.         return $this->render('failed_payment.html.twig'$params);
  118.     }
  119.     /**
  120.      * @Route("sberbank/webhook", methods="POST")
  121.      */
  122.     public function sberbankWebhook(Request $requestSberbankAcquiringOrderWebhookRepository $acquiringOrderWebhookRepository): Response
  123.     {
  124.         $acquiringOrderWebhookRepository->save(new SberbankAcquiringOrderWebhook(json_encode($request->toArray())));
  125.         return new JsonResponse(['result' => 'success']);
  126.     }
  127.     /**
  128.      * @Route("transport_companies", methods="GET")
  129.      */
  130.     public function getTransportCompanies(TransportCompanyRepository $transportCompanyRepository): JsonResponse
  131.     {
  132.         return new JsonResponse($transportCompanyRepository->getList());
  133.     }
  134.     /**
  135.      * @Route("/handle_mango/events/call", methods="POST")
  136.      * @throws Exception
  137.      */
  138.     public function handleMangoCall(
  139.         Request $request,
  140.         CustomerRepository $customerRepository,
  141.         Api $apiService,
  142.         Mango $mangoService,
  143.     ): JsonResponse
  144.     {
  145.         try {
  146.             $mangoCall $mangoService->handleCall($request->request->all());
  147.             $mangoContactId $mangoCall && $mangoCall->getCustomer() ? $mangoCall->getCustomer()->getMangoContactId() : null;
  148.             if($mangoCall && !$mangoContactId) {
  149.                 $mangoContactId $apiService->createMangoClient($mangoCall);
  150.                 if($mangoContactId$customerRepository->update($mangoCall->getCustomer()->setMangoContactId($mangoContactId));
  151.             }
  152.             return new JsonResponse(['result' => 'success']);
  153.         } catch (Exception TransportExceptionInterface $exception) {
  154.             return new JsonResponse(['result' => 'failed']);
  155.         }
  156.     }
  157.     /**
  158.      * @Route("/handle_mango/events/summary", methods="POST")
  159.      * @throws Exception
  160.      */
  161.     public function handleMangoSummary(
  162.         Request $request,
  163.         Api $apiService,
  164.         Mango $mangoService,
  165.     ): JsonResponse
  166.     {
  167.         $call $mangoService->handleSummary($request->request->all());
  168.         if($call && $call->getCustomer()) $apiService->updateMangoClient($call->getCustomer());
  169.         return new JsonResponse(['result' => 'success']);
  170.     }
  171.     /**
  172.      * @Route("/handle_mango/events/recording", methods="POST")
  173.      * @throws Exception
  174.      */
  175.     public function handleMangoRecord(Request $requestMango $mangoService): JsonResponse
  176.     {
  177.         sleep(3);
  178.         $mangoService->handleRecord($request->request->all());
  179.         return new JsonResponse(['result' => 'success']);
  180.     }
  181.     private function getBaseParams(): array
  182.     {
  183.         return [
  184.             'js_version_base' => filemtime(__DIR__ '/../../public/assets/js/base.js'),
  185.             'js_version_user_header' => filemtime(__DIR__ '/../../public/assets/js/user_header.js'),
  186.             'css_version' => filemtime(__DIR__ '/../../public/assets/css/styles.css')
  187.         ];
  188.     }
  189. }