FacegamesController   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 169
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 6
dl 0
loc 169
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A setContainer() 0 5 1
A getFacegamesAction() 0 4 1
A getFacegameAction() 0 6 1
A postFacegameAction() 0 14 3
A patchFacegameAction() 0 13 3
A getGlobalStatisticsAction() 0 9 1
A getUserStatisticsAction() 0 16 2
1
<?php
2
3
namespace KI\UserBundle\Controller;
4
5
use KI\CoreBundle\Controller\ResourceController;
6
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
7
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
8
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
9
use Symfony\Component\DependencyInjection\ContainerInterface;
10
use Symfony\Component\HttpFoundation\Request;
11
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
12
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
13
14
class FacegamesController extends ResourceController
15
{
16
    public function setContainer(ContainerInterface $container = null)
17
    {
18
        parent::setContainer($container);
19
        $this->initialize('Facegame', 'User');
20
    }
21
22
    /**
23
     * @ApiDoc(
24
     *  resource=true,
25
     *  description="Liste les jeux",
26
     *  output="KI\UserBundle\Entity\Facegame",
27
     *  statusCodes={
28
     *   200="Requête traitée avec succès",
29
     *   401="Une authentification est nécessaire pour effectuer cette action",
30
     *   403="Pas les droits suffisants pour effectuer cette action",
31
     *  },
32
     *  section="Utilisateurs"
33
     * )
34
     * @Route("/facegames")
35
     * @Method("GET")
36
     */
37
    public function getFacegamesAction()
38
    {
39
        return $this->getAll();
40
    }
41
42
    /**
43
     * @ApiDoc(
44
     *  description="Retourne un jeu",
45
     *  output="KI\UserBundle\Entity\Facegame",
46
     *  statusCodes={
47
     *   200="Requête traitée avec succès",
48
     *   401="Une authentification est nécessaire pour effectuer cette action",
49
     *   403="Pas les droits suffisants pour effectuer cette action",
50
     *   404="Ressource non trouvée"
51
     *  },
52
     *  section="Utilisateurs"
53
     * )
54
     * @Route("/facegames/{slug}")
55
     * @Method("GET")
56
     */
57
    public function getFacegameAction($slug)
58
    {
59
        $facegame = $this->getOne($slug);
60
61
        return $this->json($facegame);
62
    }
63
64
    /**
65
     * @ApiDoc(
66
     *  description="Crée un jeu",
67
     *  input="KI\UserBundle\Form\FacegameType",
68
     *  output="KI\UserBundle\Entity\Facegame",
69
     *  statusCodes={
70
     *   201="Requête traitée avec succès avec création d’un document",
71
     *   400="La syntaxe de la requête est erronée",
72
     *   401="Une authentification est nécessaire pour effectuer cette action",
73
     *   403="Pas les droits suffisants pour effectuer cette action",
74
     *  },
75
     *  section="Utilisateurs"
76
     * )
77
     * @Route("/facegames")
78
     * @Method("POST")
79
     */
80
    public function postFacegameAction()
81
    {
82
        $data = $this->post($this->is('USER'));
83
84
        if ($data['code'] == 201) {
85
            $facegameHelper = $this->get('ki_user.helper.facegame');
86
87
            if (!$facegameHelper->fillUserList($data['item'])) {
88
                $this->manager->detach($data['item']);
89
                return $this->json($data['item'], 400);
90
            }
91
        }
92
        return $this->formJson($data);
93
    }
94
95
    /**
96
     * @ApiDoc(
97
     *  description="Modifie un jeu",
98
     *  input="KI\UserBundle\Form\FacegameType",
99
     *  statusCodes={
100
     *   204="Requête traitée avec succès mais pas d’information à renvoyer",
101
     *   400="La syntaxe de la requête est erronée",
102
     *   401="Une authentification est nécessaire pour effectuer cette action",
103
     *   403="Pas les droits suffisants pour effectuer cette action",
104
     *   404="Ressource non trouvée",
105
     *   503="Service temporairement indisponible ou en maintenance",
106
     *  },
107
     *  section="Utilisateurs"
108
     * )
109
     * @Route("/facegames/{slug}")
110
     * @Method("PATCH")
111
     */
112
    public function patchFacegameAction(Request $request, $slug)
113
    {
114
        $facegame = $this->findBySlug($slug);
115
116
        if (!$request->request->has('wrongAnswers') || !$request->request->has('duration')) {
117
            throw new BadRequestHttpException('Paramètre manquant');
118
        }
119
120
        $facegameHelper = $this->get('ki_user.helper.facegame');
121
        $facegameHelper->endGame($facegame, $request->request->get('wrongAnswers'), $request->request->get('duration'));
122
123
        return $this->json(null, 204);
124
    }
125
126
    /**
127
     * @ApiDoc(
128
     *  resource=false,
129
     *  description="Renvoie les statistiques globales sur la Réponse D",
130
     *  output="KI\UserBundle\Entity\Facegame",
131
     *  statusCodes={
132
     *   200="Requête traitée avec succès",
133
     *   401="Une authentification est nécessaire pour effectuer cette action",
134
     *   403="Pas les droits suffisants pour effectuer cette action",
135
     *  },
136
     *  section="Utilisateurs"
137
     * )
138
     * @Route("/statistics/facegame")
139
     * @Method("GET")
140
     */
141
    public function getGlobalStatisticsAction()
142
    {
143
        return $this->json([
144
            'totalNormal'        => $this->repository->getNormalGamesCount(),
145
            'totalHardcore'      => $this->repository->getHardcoreGamesCount(),
146
            'normalHighscores'   => $this->repository->getNormalHighscores(),
147
            'hardcoreHighscores' => $this->repository->getHardcoreHighscores(),
148
        ]);
149
    }
150
151
    /**
152
     * @ApiDoc(
153
     *  description="Renvoie les statistiques d'un utilisateur sur la Réponse D",
154
     *  output="KI\UserBundle\Entity\Facegame",
155
     *  statusCodes={
156
     *   200="Requête traitée avec succès",
157
     *   401="Une authentification est nécessaire pour effectuer cette action",
158
     *   403="Pas les droits suffisants pour effectuer cette action",
159
     *   404="Ressource non trouvée"
160
     *  },
161
     *  section="Utilisateurs"
162
     * )
163
     * @Route("/statistics/facegame/{slug}")
164
     * @Method("GET")
165
     */
166
    public function getUserStatisticsAction($slug)
167
    {
168
        $repository = $this->get('ki_user.repository.user');
169
        $user = $repository->findOneByUsername($slug);
170
171
        if ($user === null) {
172
            throw new NotFoundHttpException('Utilisateur non trouvé');
173
        }
174
175
        return $this->json([
176
            'totalNormal'        => $this->repository->getUserGamesCount($user, 0),
177
            'totalHardcore'      => $this->repository->getUserGamesCount($user, 1),
178
            'normalHighscores'   => $this->repository->getUserHighscores($user, 0),
179
            'hardcoreHighscores' => $this->repository->getUserHighscores($user, 1),
180
        ]);
181
    }
182
}
183