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 }