src/Controller/DataController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use PDO;
  4. use PDOException;
  5. use Faker\Factory;
  6. use Monolog\DateTimeImmutable;
  7. use App\Entity\User;
  8. use App\Service\ResetDataService;
  9. use App\Service\FetchWithHttpResponseService;
  10. //use App\Repository\CustomerRepository;
  11. use App\Repository\ProductRepository;
  12. use App\Repository\OrderRepository;
  13. use App\Repository\UserRepository;
  14. //use Doctrine\ORM\EntityManager;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. class DataController extends AbstractController
  20. {
  21.     #[Route('/data'name'app_dataHome')]
  22.     public function index(): Response
  23.     {
  24.         return $this->render('data/index.html.twig', [
  25.             'controller_name' => 'DataController',
  26.         ]);
  27.     }
  28.     #[Route('/api'name'app_goAPI')]
  29.     public function goAPI() {}
  30.     #[Route('/data-reset'name'app_dataReset')]
  31.     public function dataReset(ResetDataService $resetDataService): Response
  32.     {
  33.         $result '';
  34.         try {
  35.             $resetDataService->resetTablesAndIncrements();            
  36.             $result "Les données de la base ont correctement été effacées et réinitialisées";
  37.         } catch(\Exception $e) {
  38.             $result $e->getMessage();
  39.         }        
  40.         return $this->render('data/index.html.twig', [
  41.             'controller_name' => 'DataController',
  42.             'result' => $result,
  43.         ]);
  44.     }
  45.     #[Route('/data-load-users'name'app_dataLoadUsers')]
  46.     public function dataLoadUsers(EntityManagerInterface $manager): Response
  47.     {
  48.         // Génération d'une DataFixtures de fausses données d'utilisateurs via FakerPHP
  49.         $faker Factory::create('fr_FR');
  50.         for($i=0$i 50$i++)
  51.         {
  52.             $user = new User();
  53.             $user->setEmail($faker->email());
  54.             $user->setPassword(substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',10)),0,25));       
  55.             $manager->persist($user);        
  56.         }
  57.         $user = new User();
  58.         $user->setEmail('test@test.fr');
  59.         $user->setPassword('967520ae23e8ee14888bae72809031b98398ae4a636773e18fff917d77679334');       
  60.         $manager->persist($user);
  61.         
  62.         $manager->flush(); 
  63.         
  64.         return $this->render('data/index.html.twig', [
  65.             'controller_name' => 'DataController',            
  66.         ]);
  67.     }
  68.     #[Route('/data-reset-users'name'app_dataResetUsers')]
  69.     public function dataResetUsers(ResetDataService $resetDataService): Response
  70.     {
  71.         $result '';
  72.         try {
  73.             $resetDataService->resetUsersTablesAndIncrements();            
  74.             $result "Les données de la table Users ont correctement été effacées et réinitialisées";
  75.         } catch(\Exception $e) {
  76.             $result $e->getMessage();
  77.         }        
  78.         return $this->render('data/index.html.twig', [
  79.             'controller_name' => 'DataController',
  80.             'result' => $result,
  81.         ]);
  82.     }  
  83.     
  84.     /************************************************** */
  85.     #[Route('/data/data-getJson'name'app_dataGetJson')]
  86.     public function dataGetJson(FetchWithHttpResponseService $fetchWithHttpResponseService): Response
  87.     {
  88.         ini_set('max_execution_time''500'); //360 seconds = 6 minutes
  89.         set_time_limit(500);
  90.         $url 'https://615f5fb4f7254d0017068109.mockapi.io/api/v1/customers';
  91.         
  92.         $customers $fetchWithHttpResponseService->getJsonFromAPI($url);
  93.         $faker Factory::create('fr_FR');
  94.         // Récupérez les variables d'environnement pour la base de données
  95.         $dbhost $_SERVER['DB_HOST'];
  96.         $dbname $_SERVER['DB_NAME'];
  97.         $dbUser $_SERVER['DB_USER'];
  98.         $dbPass $_SERVER['DB_PASS'];
  99.         
  100.         // Connexion à la bdd:
  101.         try {
  102.             $pdo = new PDO("mysql:host=$dbhost; dbname=$dbname"$dbUser$dbPass);
  103.             $pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
  104.         } catch(PDOException $e) {
  105.             die("Connexion MySQL local failed: " $e->getMessage());
  106.         }
  107.         $sqlOrders "INSERT INTO `order` (`id`, `date`, `produits`, `nom_client`, `prenom_client`, `adresse_client`, `tel_client`) VALUES (?, ?, ?, ?, ?, ?, ?)";
  108.         $sthO $pdo->prepare($sqlOrders);
  109.         $sqlProducts "INSERT INTO `product` (`id`, `nom`, `description`, `prix`, `qte_stock`, `image`) VALUES (?, ?, ?, ?, ?, ?)";
  110.         $sthP $pdo->prepare($sqlProducts);
  111.         foreach ($customers as $customer) {
  112.             $dataDecodedOrders $customer['orders'];
  113.     
  114.             foreach ($dataDecodedOrders as $dataDecodeOrder) {
  115.                 $idCustomer $dataDecodeOrder['customerId'];
  116.                 $idOrder $dataDecodeOrder['id'];
  117.                 $produits = (array) null;                
  118.                 // Récupération des produits des commandes du client
  119.                 $url "https://615f5fb4f7254d0017068109.mockapi.io/api/v1/customers/$idCustomer/orders/$idOrder/products";
  120.                 
  121.                 $dataDecodedProducts $fetchWithHttpResponseService->getJsonFromAPI($url);                    
  122.                 
  123.                 if($dataDecodedProducts !== null )
  124.                 {
  125.                     foreach ($dataDecodedProducts as $dataDecodedProduct)
  126.                     {                     
  127.                         if(!empty($dataDecodedProduct['stock'])) {
  128.                             array_push($produits'{idProduit: '.$dataDecodedProduct['id'].', Qte: '.$dataDecodedProduct['stock'].'}');
  129.                         } else {                            
  130.                             array_push($produits'{idProduit: '.$dataDecodedProduct['id'].', Qte: indéfini }');
  131.                         }
  132.         
  133.                         $sthP->execute([ $dataDecodedProduct['id'], $dataDecodedProduct['name'], $dataDecodedProduct['details']['description'], $dataDecodedProduct['details']['price'], $faker->randomNumber(5false),  $faker->url() ]);
  134.                     } 
  135.                 }                                                     
  136.     
  137.                 $sthO->execute([ $dataDecodeOrder['id'], date_format(new DateTimeImmutable($dataDecodeOrder['createdAt']),"Y/m/d H:i:s"), Json_encode($produits), $customer['lastName'], $customer['firstName'], $customer['address']['city'].', '.$customer['address']['postalCode'], $faker->mobileNumber() ]);
  138.             }
  139.         }   
  140.         
  141.         return $this->render('data/index.html.twig', [
  142.             'controller_name' => 'DataController',
  143.         ]);
  144.     }
  145.     #[Route('/data-products'name'app_dataProducts')]
  146.     public function dataProducts(ProductRepository $repoP): Response
  147.     {
  148.         $products $repoP->findAll();
  149.         return $this->render('data/products.html.twig', [
  150.             'controller_name' => 'DataController',
  151.             'products' => $products
  152.         ]);
  153.     }
  154.     #[Route('/data-orders'name'app_dataOrders')]
  155.     public function dataOrders(OrderRepository $repoO): Response
  156.     {
  157.         $orders $repoO->findAll();
  158.         return $this->render('data/orders.html.twig', [
  159.             'controller_name' => 'DataController',
  160.             'orders' => $orders
  161.         ]);
  162.     }
  163.     #[Route('/data-users'name'app_dataUsers')]
  164.     public function dataUsers(UserRepository $repoU): Response
  165.     {
  166.         $users $repoU->findAll();
  167.         return $this->render('data/users.html.twig', [
  168.             'controller_name' => 'DataController',
  169.             'users' => $users
  170.         ]);
  171.     }
  172.     #[Route('/dataAuto'name'app_dataAuto')]
  173.     public function dataAuto(): Response
  174.     {
  175.         return $this->render('data/index.html.twig', [
  176.             'controller_name' => 'DataController',
  177.         ]);
  178.     }
  179. }