memory

Play Memory
Log | Files | Refs

AdminController.php (2243B)


      1 <?php
      2 
      3 namespace App\Controller;
      4 
      5 use Doctrine\Persistence\ManagerRegistry;
      6 use Psr\Log\LoggerInterface;
      7 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
      8 use Symfony\Component\HttpFoundation\JsonResponse;
      9 use Symfony\Component\Routing\Annotation\Route;
     10 
     11 #[Route('/api/admin')]
     12 class AdminController extends AbstractController
     13 {
     14     public function __construct(private LoggerInterface $logger) {}
     15     #[Route('/aggregate', methods: ['GET'])]
     16     public function aggregateData(ManagerRegistry $doctrine)
     17     {
     18         $em = $doctrine->getManager();
     19         $aggregate = [];
     20         $aggregate[] = $em->createQuery("select count(g) as aantal_spellen from App\Entity\Game g")->getArrayResult()[0];
     21         $aggregate[] = $em->createQuery("select count(p) as aantal_spelers from App\Entity\Player p")->getArrayResult()[0];
     22         $aggregate[] = $em->createQuery("select g.api, count(g.api) as aantal from App\Entity\Game g group by g.api")->getResult();
     23 
     24         return new JsonResponse($aggregate);
     25     }
     26 
     27 
     28     #[Route('/players', methods: ['GET'])]
     29     public function players(ManagerRegistry $doctrine)
     30     {
     31         $em = $doctrine->getManager();
     32         $players = $em->createQuery("select p.username, p.email from App\Entity\Player p")->getArrayResult();
     33         return new JsonResponse($players);
     34     }
     35 
     36     /*
     37      * Onderstaande endpoint geeft het aantal spelen dat per dag gespeeld is terug
     38      * Feitelijk is dit gewoon een `group by`, maar dat kregen we niet aan de praat
     39      * in DBAL. Dus we hebben we het maar gewoon met een loopje gemaakt.
     40      *
     41      * Iemand een betere oplossing hiervoor heeft, is welkom om een PR te doen. Als -ie
     42      * goed is, krijg je een snikker.
     43      *
     44      * BABA/HOEM
     45      */
     46 
     47     #[Route('/dates', methods: ['GET'])]
     48     public function getAggregatedByDate(ManagerRegistry $doctrine) {
     49         $em = $doctrine->getManager();
     50         $games = $em->createQuery("select g.dateTime as date from App\Entity\Game g order by date")->getArrayResult();
     51 
     52         $cnt = [];
     53         foreach ($games as $el) {
     54             $key = $el['date']->format('Y-m-d');
     55             $cnt[$key] = array_key_exists($key, $cnt) ?  $cnt[$key]+1 : 1;
     56         }
     57 
     58         return new JsonResponse($cnt);
     59     }
     60 
     61 
     62 
     63 }