hanze/memory

memory-backend/src/Controller/AdminController.php in main
Repositories | Summary | Log | Files

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}