Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
FavoritesService
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 6
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getSession
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 list
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 add
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 remove
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 removeAll
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Services;
4
5use App\Entity\Movie;
6use Exception;
7use Symfony\Component\HttpFoundation\RequestStack;
8use Symfony\Component\HttpFoundation\Session\SessionInterface;
9
10class FavoritesService
11{
12    
13    /**
14     * le requete en cours
15     *
16     * @var RequestStack
17     */
18    private $request;
19
20    // TODO : de qui/quoi a-t-on besoin ? des quels services ? de quel classe ?
21    // 1. la session : que l'on trouve dans RequestStack (trouvé via la commande debug:autowiring)
22    // les besoins en terme de services, donc injection de dépendance
23    // doivent être fait au niveau du constructeur
24    public function __construct(RequestStack $request)
25    {
26        $this->request = $request;
27        // ! Accessing the session in the constructor is *NOT* recommended, since
28        // it might not be accessible yet or lead to unwanted side-effects
29        // $this->session = $requestStack->getSession();
30        // ? a but de débug pour voir comment est fait la création de notre service
31        // throw new Exception();
32    }
33
34    /**
35    * get current session
36    */
37    public function getSession()
38    {
39        return $this->request->getSession();
40    }
41
42    // TODO : quels sont les besoins/fonctionnalités que l'on délègue a ce service
43    // 1. list
44    // 2. add
45    // 3. remove
46    // ? ce sont les méthodes qui seront appelées par nos controller
47    // il ne faut pas faire d'injection de dépendance dans ces méthodes
48    
49    public function list()
50    {
51        $favoris = $this->getSession()->get("favoris", []);
52
53        return $favoris;
54    }
55
56    public function add(Movie $movie)
57    {
58        // TODO améliorer avec un tableau
59        // je récupère ce qu'il y a déjà en session
60        $favorisList = $this->getSession()->get("favoris", []);
61        // j'ajoute le nouveau film à un emplacement précis : son ID
62        $favorisList[$movie->getId()] = $movie;
63
64        // je met à jour la session avec la nouvelle liste
65        $this->getSession()->set("favoris", $favorisList);
66    }
67
68    public function remove(Movie $movie)
69    {
70        // TODO : supprimer un favoris
71        // 1. il me faut un id, parce que l'on pense au futur et la gestion de multiple favoris
72        // 2. il me faut la session pour récupérer les favoris
73
74        $favorisList = $this->getSession()->get("favoris", []);
75
76        if (array_key_exists($movie->getId(), $favorisList)){
77            // ? https://www.php.net/manual/en/function.unset.php
78            unset($favorisList[$movie->getId()]);
79            // met à jour la session
80            $this->getSession()->set("favoris", $favorisList);
81        }
82    }
83
84    public function removeAll()
85    {
86        // on met un tableau vide pour purger nos favoris
87        $this->getSession()->set("favoris", []);
88        // version plus bourine qui supprime directement la clé en session
89        $this->getSession()->remove("favoris");
90    }
91
92}