AdminController.php (2243B) download
1<?php
2
3namespace App\Controller;
4
5use Doctrine\Persistence\ManagerRegistry;
6use Psr\Log\LoggerInterface;
7use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
8use Symfony\Component\HttpFoundation\JsonResponse;
9use Symfony\Component\Routing\Annotation\Route;
10
11#[Route('/api/admin')]
12class 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}