src/Controller/InternalApiController.php line 171

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Club;
  4. use App\Entity\ClubNameHistory;
  5. use App\Entity\Event;
  6. use App\Entity\Game;
  7. use App\Entity\GameStats;
  8. use App\Entity\Player;
  9. use App\Entity\PlayerAchievements;
  10. use App\Entity\PlayerCareer;
  11. use App\Entity\Season;
  12. use App\Entity\Stadium;
  13. use App\Entity\ChangeList;
  14. use App\Entity\StadiumNameHistory;
  15. use App\Entity\Tournament;
  16. use App\Entity\TournamentClub;
  17. use App\Entity\TournamentStage;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use GuzzleHttp\Exception\GuzzleException;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use GuzzleHttp\Client;
  22. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  23. use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
  24. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  25. use Symfony\Component\Serializer\Serializer;
  26. use Doctrine\Common\Annotations\AnnotationReader;
  27. use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
  28. use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
  29. use DateTimeInterface;
  30. use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  31. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  32. class InternalApiController extends AbstractController
  33. {
  34.     protected EntityManagerInterface $em;
  35.     private Serializer $serializer;
  36.     private string $password;
  37.     private string $sendUrl;
  38.     public function __construct(
  39.         EntityManagerInterface $entityManager,
  40.         string $secretKey,
  41.         string $url
  42.     ){
  43.         $this->em       $entityManager;
  44.         $this->password $secretKey;
  45.         $this->sendUrl  $url;
  46.         $dateCallback = function(
  47.             $innerObject
  48.         ){
  49.             return $innerObject instanceof DateTimeInterface $innerObject->format("Y-m-d H:i:s") : '';
  50.         };
  51.         $defaultContext = [
  52.             AbstractNormalizer::CALLBACKS => [
  53.                 'birthdate'  => $dateCallback,
  54.                 'team_debut' => $dateCallback,
  55.                 'start'      => $dateCallback,
  56.                 'end'        => $dateCallback,
  57.                 'startDate'  => $dateCallback,
  58.                 'endDate'    => $dateCallback,
  59.                 'dateStart'  => $dateCallback,
  60.                 'timeStart'  => $dateCallback,
  61.                 'createDate' => $dateCallback,
  62.                 'fromDate'   => $dateCallback,
  63.                 'dateCreate' => $dateCallback,
  64.                 'dateUpdate' => $dateCallback,
  65.             ],
  66.         ];
  67.         $encoders             = [new JsonEncoder()];
  68.         $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
  69.         $normalizers          = [
  70.             new ObjectNormalizer(
  71.                 $classMetadataFactory,
  72.                 null,
  73.                 null,
  74.                 null,
  75.                 null,
  76.                 null,
  77.                 $defaultContext
  78.             ),
  79.             new DateTimeNormalizer(),
  80.         ];
  81.         $this->serializer = new Serializer($normalizers$encoders);
  82.     }
  83.     public function send(): Response
  84.     {
  85.         $jsonData = [];
  86.         $changes  $this->em->getRepository(ChangeList::class)->findNotSent();
  87.         if(!is_null($changes) and !empty($changes)){
  88.             foreach($changes as $change){
  89.                 $json['entity_name'] = $change->getEntityName();
  90.                 $json['change_type'] = $change->getChangeType();
  91.                 if($change->getChangeType() != 'del'){
  92.                     switch($change->getEntityName()){
  93.                         case "Club":
  94.                             $club     $this->em->getRepository(Club::class)->find($change->getChangeId());
  95.                             $jsonData $this->serializer->serialize($club'json', ['groups' => 'groupClub']);
  96.                             break;
  97.                         case "Event":
  98.                             $event $this->em->getRepository(Event::class)->find($change->getChangeId());
  99.                             if(!is_null($event)){
  100.                                 $jsonData $this->serializer->serialize($event'json', ['groups' => 'groupEvent']);
  101.                             }else{
  102.                                 $jsonData '';
  103.                                 $change->setSent(1);
  104.                             }
  105.                             break;
  106.                         case "Game":
  107.                             $game     $this->em->getRepository(Game::class)->find($change->getChangeId());
  108.                             $jsonData $this->serializer->serialize($game'json', ['groups' => 'groupGame']);
  109.                             break;
  110.                         case "Player":
  111.                             $player   $this->em->getRepository(Player::class)->find($change->getChangeId());
  112.                             $jsonData $this->serializer->serialize($player'json', ['groups' => 'groupPlayer']);
  113.                             break;
  114.                         case "Season":
  115.                             $season   $this->em->getRepository(Season::class)->find($change->getChangeId());
  116.                             $jsonData $this->serializer->serialize($season'json', ['groups' => 'groupSeason']);
  117.                             break;
  118.                         case "Stadium":
  119.                             $stadium  $this->em->getRepository(Stadium::class)->find($change->getChangeId());
  120.                             $jsonData $this->serializer->serialize($stadium'json', ['groups' => 'groupStadium']);
  121.                             break;
  122.                         case "Tournament":
  123.                             $tournament $this->em->getRepository(Tournament::class)->find($change->getChangeId());
  124.                             $jsonData   $this->serializer->serialize($tournament'json', ['groups' => 'groupTournament']);
  125.                             break;
  126.                         case "TournamentStage":
  127.                             $tournamentStage $this->em->getRepository(TournamentStage::class)->find($change->getChangeId());
  128.                             $jsonData        $this->serializer->serialize($tournamentStage'json', ['groups' => 'groupTournamentStage']);
  129.                             break;
  130.                         case "TournamentClub":
  131.                             $tournamentClub $this->em->getRepository(TournamentClub::class)->find($change->getChangeId());
  132.                             $jsonData       $this->serializer->serialize($tournamentClub'json', ['groups' => 'groupTournamentClub']);
  133.                             break;
  134.                         case "ClubNameHistory":
  135.                             $clubHistoryName $this->em->getRepository(ClubNameHistory::class)->find($change->getChangeId());
  136.                             $jsonData        $this->serializer->serialize($clubHistoryName'json');
  137.                             break;
  138.                         case "StadiumNameHistory":
  139.                             $stadiumHistoryName $this->em->getRepository(StadiumNameHistory::class)->find($change->getChangeId());
  140.                             $jsonData           $this->serializer->serialize($stadiumHistoryName'json');
  141.                             break;
  142.                         case "GameStats":
  143.                             $gameStats $this->em->getRepository(GameStats::class)->find($change->getChangeId());
  144.                             $jsonData  $this->serializer->serialize($gameStats'json', ['groups' => 'groupGameStats']);
  145.                             break;
  146.                         case "PlayerCareer":
  147.                             $career   $this->em->getRepository(PlayerCareer::class)->find($change->getChangeId());
  148.                             $jsonData $this->serializer->serialize($career'json', ['groups' => 'groupPlayerCareer']);
  149.                             break;
  150.                         case "PlayerAchievements":
  151.                             $achievements $this->em->getRepository(PlayerAchievements::class)->find($change->getChangeId());
  152.                             $jsonData     $this->serializer->serialize($achievements'json', ['groups' => 'groupPlayerAchievements']);
  153.                             break;
  154.                     }
  155.                     $jsonData json_decode($jsonDatatrue);
  156.                     if(isset($jsonData['logo'])){
  157.                         if($jsonData['logo'] != ''){
  158.                             $jsonData['logo'] = ((!empty($_SERVER['HTTPS'])) ? 'https' 'http').'://'.$_SERVER['HTTP_HOST'].$jsonData['logo'];
  159.                         }
  160.                     }
  161.                     if(isset($jsonData['logoForList'])){
  162.                         if($jsonData['logoForList'] != ''){
  163.                             $jsonData['logoForList'] = ((!empty($_SERVER['HTTPS'])) ? 'https' 'http').'://'.$_SERVER['HTTP_HOST'].$jsonData['logoForList'];
  164.                         }
  165.                     }
  166.                 }else{
  167.                     $json['entity_name'] = $change->getEntityName();
  168.                     $json['change_type'] = $change->getChangeType();
  169.                     $jsonData['id']      = $change->getChangeId();
  170.                 }
  171.                 $hash         md5($this->password.$change->getChangeId().$json['entity_name'].$json['change_type']);
  172.                 $json['hash'] = $hash;
  173.                 $json['data'] = $jsonData;
  174.                 $client = new Client();
  175.                 try{
  176.                     $response $client->request(
  177.                         'POST',
  178.                         $this->sendUrl,
  179.                         [
  180.                         'auth' => ['admin''12345'],
  181.                         'json' => $json,
  182.                         ]
  183.                     );
  184.                     $result json_decode($response->getBody()->getContents());
  185.                     if(isset($result->status) and $result->status == 'success'){
  186.                         $change->setSent(1);
  187.                     }elseif(isset($result->status) and $result->status == 'error'){
  188.                         $change->setErrorText($result->description);
  189.                     }
  190.                 }catch(GuzzleException $e){
  191.                     $change->setErrorText("Response code: ".$e->getCode());
  192.                 }
  193.                 $change->setCount($change->getCount() + 1);
  194.                 $this->em->persist($change);
  195.                 $this->em->flush();
  196.             }
  197.         }
  198.         return new Response(
  199.             'Content',
  200.             Response::HTTP_OK,
  201.             ['content-type' => 'text/html']
  202.         );
  203.     }
  204. }