src/Controller/Api/CustomerController.php line 382

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\Customer;
  4. use App\Entity\CustomerDevice;
  5. use App\Entity\Season;
  6. use App\Services\Api\CustomerManager;
  7. use App\Services\ConfigManager;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Sonata\GoogleAuthenticator\GoogleAuthenticator;
  10. use Sonata\GoogleAuthenticator\GoogleQrUrl;
  11. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use App\Helper\RevenueCatHelper;
  17. use App\Helper\AppleHelper;
  18. use App\Helper\StripeHelper;
  19. class CustomerController extends ApiController
  20. {
  21.   /** @var CustomerManager $customerManager */
  22.   protected $customerManager;
  23.   /** @var  ConfigManager $configManager */
  24.   protected $configManager;
  25.   /**
  26.    * @param CustomerManager $customerManager
  27.    * @param ConfigManager $configManager
  28.    */
  29.   public function __construct(
  30.     EntityManagerInterface $em,
  31.     ParameterBagInterface $parameterBag,
  32.     CustomerManager $customerManager,
  33.     ConfigManager $configManager
  34.   ) {
  35.     parent::__construct($em$parameterBag);
  36.     $this->customerManager $customerManager;
  37.     $this->configManager $configManager;
  38.   }
  39.   /**
  40.    * @param Request $request
  41.    * @return JsonResponse
  42.    *
  43.    * @Route("/user_data", name="api_user_data", methods={"POST"})
  44.    */
  45.   public function userData(Request $request)
  46.   {
  47.     /** @var Customer $customer */
  48.     $customer $this->getUser();
  49.     /** @var Season $season */
  50.     $season $customer->getSeasonActive();
  51.     $prefixFile $this->getParameter("app.path.customer_images");
  52.     $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  53.     $path = !empty($customer->getImageTeam()) ? $baseurl $prefixFile "/" $customer->getImageTeam() : "";
  54.     $path_trainer_logo = !empty($customer->getImageTrainerTeam()) ? $baseurl $prefixFile "/" $customer->getImageTrainerTeam() : "";
  55.     $data = [
  56.       "id" => $customer->getId(),
  57.       "isPro" => $customer->getIsPro(),
  58.       "name" => $customer->getName(),
  59.       "surname" => $customer->getSurname(),
  60.       "email" => $customer->getEmail(),
  61.       "teamName" => $customer->getNameTeam(),
  62.       "stadiumName" => $customer->getStadiumName(),
  63.       "emailClub" => $customer->getEmailClub(),
  64.       "monthlyCost" => $customer->getMonthlyCostTeam(),
  65.       "kitPaymentCost" => $customer->getKitPaymentCostTeam(),
  66.       "otherPaymentCost" => $customer->getOtherPaymentCostTeam(),
  67.       "teamCategory" => $customer->getCategoryTeam(),
  68.       "teamLogo" => $path,
  69.       "trainerLogo" => $path_trainer_logo,
  70.       //"countryId" => ! empty($customer->getCountry())? $customer->getCountry()->getId() : null,
  71.       "countryId" => !empty($season->getCountry()) ? $season->getCountry()->getId() : null,
  72.       "season" => $customer->getSeasonActive() ? $customer->getSeasonActive()->getYear() : "",
  73.       "seasonId" => $customer->getSeasonActive() ? $customer->getSeasonActive()->getId() : "",
  74.       "timeFree" => $this->customerManager->remainingTimeFree($customer),
  75.       "enabledToGo" => $this->customerManager->isEnabledToGo($customer),
  76.       "typeSoccer" => $customer->getTypeSoccer() ? $customer->getTypeSoccer()->__toArray() : null,
  77.       "alignmentDefaultU7" => $customer->getAlignmentDefaultU7() ? $customer->getAlignmentDefaultU7()->__toArray() : null,
  78.       "alignmentDefaultU8" => $customer->getAlignmentDefaultU8() ? $customer->getAlignmentDefaultU8()->__toArray() : null,
  79.       "alignmentDefaultU11" => $customer->getAlignmentDefaultU11() ? $customer->getAlignmentDefaultU11()->__toArray() : null,
  80.       "phone" => $customer->getPhone(),
  81.       "dateOfBirth" => $customer->getDateOfBirth() ?  $customer->getDateOfBirth()->format('Y-m-d') : null,
  82.       "googleAuthCodeVerified" => $customer->getGoogleAuthCodeVerified() ? true false,
  83.       "numberClubesLeague" => $customer->getNumberClubesLeague(),
  84.     ];
  85.     return $this->response($data);
  86.   }
  87.   /**
  88.    * @param Request $request
  89.    * @return JsonResponse
  90.    *
  91.    * @Route("/customer/purchase", name="api_user_purchase", methods={"POST"})
  92.    */
  93.   public function customerPurchase(Request $request)
  94.   {
  95.     $req $this->transformJsonBody($request);
  96.     $data $this->getDataFromRequest($req);
  97.     
  98.     $response $this->customerManager->updatePurchase($data,$request);
  99.     
  100.     $this->setStatusCode($response["code"]);
  101.     return $this->response($response);
  102.   }
  103.    /**
  104.    * @param Request $request
  105.    * @return JsonResponse
  106.    *
  107.    * @Route("/customer/stripe/subscription", name="api_user_purchase_get_all", methods={"POST"})
  108.    */
  109.   public function getStipeSubscription(Request $request)
  110.   {
  111.     /** @var Customer $customer */
  112.     $customer $this->getUser();
  113.     $stripe = new StripeHelper();
  114.     $this->setStatusCode(200);
  115.     $result $stripe->getBySubscriptionKey($customer->getPurchase());
  116.     return $this->response($result);
  117.   }
  118.      /**
  119.    * @param Request $request
  120.    * @return JsonResponse
  121.    *
  122.    * @Route("/customer/subscription/info", name="api_user_purchase_get_info", methods={"POST"})
  123.    */
  124.   public function getStipeSubscriptionInfo(Request $request)
  125.   {
  126.     /** @var Customer $customer */
  127.     $customer $this->getUser();
  128.     $this->setStatusCode(200);
  129.     // Define the whitelist array
  130.     $whitelist = ["contactodtvct@gmail.com","Jotaindie@gmail.com","pepmalagrava@gmail.com","oliver_parr@hotmail.com","estebanherrera@icloud.com","alvarobenitezcalvente@gmail.com","juventudcirculo28@gmail.com","kikeemcna@gmail.com","alpebra99@gmail.com","Adrian_Palacio10@hotmail.com","xianarv2010@gmail.com","raulmar419@gmail.com","orozco1titi@gmail.com","jvcc@telefonica.net","angeldiazo1996@gmail.com","adrian_palacio10@hotmail.com","Pperagalo@gmail.com"];
  131.     // Get the email parameter from the request
  132.     $email strtolower($customer->getEmail()); // Convert to lowercase
  133.     // TODO: REMOVE LATER
  134.     if (in_array($email$whitelist)) {
  135.       $result = [
  136.         'active'=> true
  137.       ];
  138.       return $this->response($result);
  139.     }
  140.     $purchase $customer->getPurchase();
  141.     if (strpos($purchase'sub_') === 0) {
  142.       $stripe = new StripeHelper();
  143.       $result $stripe->info($customer->getPurchase());
  144.       return $this->response($result);
  145.     } 
  146.     
  147.     if (strtolower($customer->getPurchasePlatform()) === 'ios'){
  148.       $apple = new AppleHelper();
  149.       $result $apple->info($customer);
  150.       return $this->response($result);
  151.     }
  152.     
  153.     if (strpos($purchase'MII') === 0) {
  154.       $apple = new AppleHelper();
  155.       $result $apple->info($customer);
  156.       return $this->response($result);
  157.     }  
  158.     $verifypayment = new RevenueCatHelper();
  159.     $result $verifypayment->validateSubscription($customer);
  160.     return $this->response($result);
  161.   }
  162.    /**
  163.    * @param Request $request
  164.    * @return JsonResponse
  165.    *
  166.    * @Route("/customer/stripe/purchase/cancel", name="api_user_purchase_cancel", methods={"POST"})
  167.    */
  168.   public function stripePurchaseCancel(Request $request)
  169.   {
  170.     /** @var Customer $customer */
  171.     $customer $this->getUser();
  172.     $stripe = new StripeHelper();
  173.     $this->setStatusCode(200);
  174.     $result $stripe->cancel($customer->getPurchase());
  175.     return $this->response($result);
  176.   }
  177.    /**
  178.    * @param Request $request
  179.    * @return JsonResponse
  180.    *
  181.    * @Route("/customer/check_purchase", name="api_user_purchase_check", methods={"POST"})
  182.    */
  183.   public function checkPurchase(Request $request)
  184.   {
  185.     /** @var Customer $customer */
  186.     $customer $this->getUser();
  187.     $verifypayment = new AppleHelper();
  188.     $result $verifypayment->fetchAppleInformation($customer->getPurchase());
  189.     
  190.     $this->setStatusCode(200);
  191.     return $this->response($result);
  192.   }
  193.     /**
  194.    * @param Request $request
  195.    * @return JsonResponse
  196.    *
  197.    * @Route("/customer/check_purchase_status", name="api_user_purchase_check_status", methods={"POST"})
  198.    */
  199.   public function checkPurchaseStatus(Request $request)
  200.   {
  201.     /** @var Customer $customer */
  202.     $customer $this->getUser();
  203.     $verifypayment = new AppleHelper();
  204.     $result $verifypayment->validateSubscription($customer);
  205.     
  206.     $this->setStatusCode(200);
  207.     return $this->response($result);
  208.   }
  209.      /**
  210.    * @param Request $request
  211.    * @return JsonResponse
  212.    *
  213.    * @Route("/customer/stripe/check_purchase_status", name="api_user_stripe_purchase_check_status", methods={"POST"})
  214.    */
  215.   public function checkStripePurchaseStatus(Request $request)
  216.   {
  217.     /** @var Customer $customer */
  218.     $customer $this->getUser();
  219.     $verifypayment = new StripeHelper();
  220.     $result $verifypayment->validateSubscription($customer->getPurchase());
  221.     
  222.     $this->setStatusCode(200);
  223.     return $this->response($result);
  224.   }
  225.   /**
  226.    * @param Request $request
  227.    * @return JsonResponse
  228.    *
  229.    * @Route("/customer/refresh_purchase", name="api_user_purchase_refresh", methods={"POST"})
  230.    */
  231.   public function customerRefreshPurchase(Request $request)
  232.   {
  233.     /** @var Customer $customer */
  234.     $customer $this->getUser();
  235.     $result false;
  236.     // Define the whitelist array
  237.     $whitelist = ["contactodtvct@gmail.com","Jotaindie@gmail.com","pepmalagrava@gmail.com","oliver_parr@hotmail.com","estebanherrera@icloud.com","alvarobenitezcalvente@gmail.com","juventudcirculo28@gmail.com","kikeemcna@gmail.com","alpebra99@gmail.com","Adrian_Palacio10@hotmail.com","xianarv2010@gmail.com","raulmar419@gmail.com","orozco1titi@gmail.com","jvcc@telefonica.net","angeldiazo1996@gmail.com","adrian_palacio10@hotmail.com","Pperagalo@gmail.com"];
  238.     // Get the email parameter from the request
  239.     $email strtolower($customer->getEmail()); // Convert to lowercase
  240.     // TODO: REMOVE LATER
  241.     if (in_array($email$whitelist)) {
  242.       $result true;
  243.     } else {
  244.       $purchase $customer->getPurchase();
  245.       $platform $customer->getPurchasePlatform();
  246.   
  247.       if ($purchase === null){
  248.         /// if purchase if null we still need to check if if's under revenuecat helper
  249.         $verifypayment = new RevenueCatHelper();
  250.         $result $verifypayment->validateSubscription($customer);
  251.       } else {
  252.         /// IOS CHECK
  253.         if (strtolower($platform) === 'ios') {
  254.           $verifyApplePayment = new AppleHelper();
  255.           $result $verifyApplePayment->validateSubscription($customer);
  256.         } 
  257.         else if (strpos($purchase'MII') === 0) {
  258.           $verifyApplePayment = new AppleHelper();
  259.           $result $verifyApplePayment->validateSubscription($customer);
  260.         }
  261.         /// STRIPE WEB CHECK
  262.         else if (strpos($purchase'sub_') === 0) {
  263.           $stripePayment = new StripeHelper();
  264.           $result $stripePayment->validateSubscription($purchase);
  265.         }
  266.         /// ANDROID CHECK
  267.         else {
  268.           $verifypayment = new RevenueCatHelper();
  269.           $result $verifypayment->validateSubscription($customer);
  270.         }
  271.       }
  272.     }
  273.     $response $this->customerManager->changeStatusSuscription($result);
  274.     $this->setStatusCode($response["code"]);
  275.     return $this->response($response);
  276.   }
  277.   /**
  278.    * @param Request $request
  279.    * @return JsonResponse
  280.    *
  281.    * @Route("/customer/coupon_swap", name="api_user_coupon_swap", methods={"POST"})
  282.    */
  283.   public function customerUseCoupon(Request $request)
  284.   {
  285.     $request $this->transformJsonBody($request);
  286.     $data = [
  287.       'coupon_code' => $request->get('coupon_code'),
  288.     ];
  289.     $response $this->customerManager->useCoupon($data);
  290.     $this->setStatusCode($response["code"]);
  291.     return $this->response($response);
  292.   }
  293.   /**
  294.    * @param Request $request
  295.    * @return JsonResponse
  296.    *
  297.    * @Route("/customer/device/add", name="api_user_device_add", methods={"POST"})
  298.    */
  299.   public function addDevice(Request $request)
  300.   {
  301.     $request $this->transformJsonBody($request);
  302.     $data = [
  303.       'refresh_token' => $request->get('refresh_token'),
  304.       'device_id' => $request->get('device_id'),
  305.       'device_model' => $request->get('device_model'),
  306.       'device_type' => $request->get('device_type'),
  307.       'device_brand' => $request->get('device_brand'),
  308.     ];
  309.     $response $this->customerManager->addDevice($data);
  310.     $this->setStatusCode($response["code"]);
  311.     return $this->response($response);
  312.   }
  313.   /**
  314.    * @param Request $request
  315.    * @return JsonResponse
  316.    *
  317.    * @Route("/customer/device/delete", name="api_user_device_delete", methods={"POST"})
  318.    */
  319.   public function deleteDevice(Request $request)
  320.   {
  321.     $request $this->transformJsonBody($request);
  322.     $data = [
  323.       'device_id' => $request->get('device_id'),
  324.       'skipFingerPrinter' => $request->get('skipFingerPrinter'0),
  325.     ];
  326.     $response $this->customerManager->deleteDevice($data);
  327.     $this->setStatusCode($response["code"]);
  328.     return $this->response($response);
  329.   }
  330.   protected function getDataFromRequest(Request $request)
  331.   {
  332.     $data = [
  333.       "purchase" => $request->get('purchase'),
  334.       "product_id" => $request->get('product_id')
  335.     ];
  336.     return $data;
  337.   }
  338.   /**
  339.    * @param Request $request
  340.    * @return JsonResponse
  341.    *
  342.    * @Route("/customer/device/list", name="api_user_device_list", methods={"POST"})
  343.    */
  344.   public function listDevice(Request $request)
  345.   {
  346.     $request $this->transformJsonBody($request);
  347.     $devices = [];
  348.     /** @var Customer $customer */
  349.     $customer $this->getUser();
  350.     $customer_device $this->em->getRepository(CustomerDevice::class)->findBy([
  351.       'customerId' => $customer->getId(),
  352.       'status' => true,
  353.     ]);
  354.     /** @var ExerciseUser $exercise */
  355.     foreach ($customer_device as $device) {
  356.       $devices[] = $device->__toArray();
  357.     }
  358.     return $this->response($devices);
  359.   }
  360.   /**
  361.    * @param Request $request
  362.    * @return JsonResponse
  363.    *
  364.    * @Route("/customer/remove_account", name="api_user_remove_account", methods={"POST"})
  365.    */
  366.   public function removeAccount(Request $request)
  367.   {
  368.     $devices = [];
  369.     /** @var Customer $customer */
  370.     $customer $this->getUser();
  371.     $customerRemove $this->em->getRepository(Customer::class)->find($customer->getId());
  372.     $customerRemove->setDeletedAt(new \DateTime());
  373.     $this->em->persist($customerRemove);
  374.     $customer_device $this->em->getRepository(CustomerDevice::class)->findBy([
  375.       'customerId' => $customer->getId(),
  376.       'status' => true,
  377.     ]);
  378.     foreach ($customer_device as $key => $customerDevice) {
  379.       $customerDevice->setStatus(false);
  380.       $this->em->persist($customerDevice);
  381.     }
  382.     $this->em->flush();
  383.     return $this->response($devices);
  384.   }
  385.   /**
  386.    * @param Request $request
  387.    * @return JsonResponse
  388.    *
  389.    * @Route("/create_step_verification", name="api_create_step_verification", methods={"POST"})
  390.    */
  391.   public function CreateStepVerification(Request $request)
  392.   {
  393.     /** @var Customer $customer */
  394.     $customer $this->getUser();
  395.     $existCode $customer->getGoogleAuthCode();
  396.     if ($existCode) {
  397.       $qr GoogleQrUrl::generate($customer->getEmail(), $existCode'Golmanager');
  398.       return $this->json([
  399.         'qr' => $qr,
  400.         'secret' => $existCode
  401.       ]);
  402.     }
  403.     $g = new GoogleAuthenticator();
  404.     $secret $g->generateSecret();
  405.     $qr GoogleQrUrl::generate($customer->getEmail(), $secret'Golmanager');
  406.     $customer->setGoogleAuthCode($secret);
  407.     $this->em->persist($customer);
  408.     $this->em->flush();
  409.     return $this->json([
  410.       'qr' => $qr,
  411.       'secret' => $secret
  412.     ]);
  413.   }
  414.   /**
  415.    * @param Request $request
  416.    * @return JsonResponse
  417.    *
  418.    * @Route("/verify_step_verification", name="api_verify_step_verification", methods={"POST"})
  419.    */
  420.   public function VerifyStepVerification(Request $request)
  421.   {
  422.     /** @var Customer $customer */
  423.     $customer $this->getUser();
  424.     $code $request->get('code');
  425.     $g = new GoogleAuthenticator();
  426.     if ($g->checkCode($customer->getGoogleAuthCode(), $code)) {
  427.       $customer->setGoogleAuthCodeVerified(true);
  428.       $this->em->persist($customer);
  429.       $this->em->flush();
  430.       return $this->json([
  431.         'success' => true
  432.       ]);
  433.     } else {
  434.       return $this->json([
  435.         'success' => false
  436.       ]);
  437.     }
  438.   }
  439.   /**
  440.    * @param Request $request
  441.    * @return JsonResponse
  442.    *
  443.    * @Route("/verify_otp", name="api_verify_otp", methods={"POST"})
  444.    */
  445.   public function VerifyOtp(Request $request)
  446.   {
  447.     /** @var Customer $customer */
  448.     $customer $this->getUser();
  449.     $code $request->get('code');
  450.     $g = new GoogleAuthenticator();
  451.     if ($g->checkCode($customer->getGoogleAuthCode(), $code)) {
  452.       return $this->json([
  453.         'success' => true
  454.       ]);
  455.     } else {
  456.       return $this->json([
  457.         'success' => false
  458.       ]);
  459.     }
  460.   }
  461.   /**
  462.    * @param Request $request
  463.    * @return JsonResponse
  464.    *
  465.    * @Route("/disable_step_verification", name="api_disable_step_verification", methods={"POST"})
  466.    */
  467.   public function DisableStepVerification(Request $request)
  468.   {
  469.     /** @var Customer $customer */
  470.     $customer $this->getUser();
  471.     $code $request->get('code');
  472.     $g = new GoogleAuthenticator();
  473.     if ($g->checkCode($customer->getGoogleAuthCode(), $code)) {
  474.       $customer->setGoogleAuthCodeVerified(false);
  475.       $this->em->persist($customer);
  476.       $this->em->flush();
  477.       return $this->json([
  478.         'success' => true
  479.       ]);
  480.     }
  481.     return $this->json([
  482.       'success' => false
  483.     ]);
  484.   }
  485. }