| Code Coverage | ||||||||||
| Lines | Functions and Methods | Classes and Traits | ||||||||
| Total |  | 0.00% | 0 / 93 |  | 0.00% | 0 / 2 | CRAP |  | 0.00% | 0 / 1 | 
| Oflix |  | 0.00% | 0 / 93 |  | 0.00% | 0 / 2 | 210 |  | 0.00% | 0 / 1 | 
| __construct |  | 0.00% | 0 / 1 |  | 0.00% | 0 / 1 | 2 | |||
| load |  | 0.00% | 0 / 92 |  | 0.00% | 0 / 1 | 182 | |||
| 1 | <?php | 
| 2 | |
| 3 | namespace App\DataFixtures; | 
| 4 | |
| 5 | use App\Entity\Casting; | 
| 6 | use App\Entity\Genre; | 
| 7 | use App\Entity\Movie; | 
| 8 | use App\Entity\Person; | 
| 9 | use App\Entity\Season; | 
| 10 | use App\Entity\Type; | 
| 11 | use App\Entity\User; | 
| 12 | use App\Repository\MovieRepository; | 
| 13 | use App\Services\OmdbApi; | 
| 14 | use Bluemmb\Faker\PicsumPhotosProvider; | 
| 15 | use Xylis\FakerCinema\Provider\Movie as FakerMovieProvider; | 
| 16 | use Xylis\FakerCinema\Provider\TvShow as FakerTvShowProvider; | 
| 17 | use Xylis\FakerCinema\Provider\Person as FakerPersonProvider; | 
| 18 | use DateTime; | 
| 19 | use Doctrine\Bundle\FixturesBundle\Fixture; | 
| 20 | use Doctrine\Persistence\ObjectManager; | 
| 21 | |
| 22 | class Oflix extends Fixture | 
| 23 | { | 
| 24 | |
| 25 | /** | 
| 26 | * Service OmdbApi | 
| 27 | * | 
| 28 | * @var OmdbApi | 
| 29 | */ | 
| 30 | private $omdbApi; | 
| 31 | |
| 32 | /** | 
| 33 | * Constructor | 
| 34 | */ | 
| 35 | public function __construct(OmdbApi $omdbApi) | 
| 36 | { | 
| 37 | $this->omdbApi = $omdbApi; | 
| 38 | } | 
| 39 | /** | 
| 40 | * Création de donnée | 
| 41 | * | 
| 42 | * @param ObjectManager $manager Equivalent à l'EntityManager | 
| 43 | */ | 
| 44 | public function load(ObjectManager $manager): void | 
| 45 | { | 
| 46 | // utilisation de Faker | 
| 47 | // use the factory to create a Faker\Generator instance | 
| 48 | // Faker US | 
| 49 | $faker = \Faker\Factory::create(); | 
| 50 | $fakerFr = \Faker\Factory::create('fr_FR'); | 
| 51 | |
| 52 | // * les providers vont ajouter des méthodes avec de nouvelles fausses données | 
| 53 | $faker->addProvider(new PicsumPhotosProvider($faker)); | 
| 54 | // ? on utilise le use pour donner un alias à la classe, que PHP ne se trompe pas avec notre entité | 
| 55 | $faker->addProvider(new FakerMovieProvider($faker)); | 
| 56 | $faker->addProvider(new FakerPersonProvider($faker)); | 
| 57 | $faker->addProvider(new FakerTvShowProvider($faker)); | 
| 58 | |
| 59 | |
| 60 | // * la création de données | 
| 61 | // 1. faire une nouvelle instance d'une entité | 
| 62 | // 2. remplir toutes les propriétés obligatoires de cette instance | 
| 63 | // 3. demander au manager de persiter l'entité | 
| 64 | // 4. stocker dans un tableau les entités pour les relations futures | 
| 65 | |
| 66 | // TODO : créer 3 utilisateurs, chacun avec un ROLE | 
| 67 | $admin = new User(); | 
| 68 | $admin->setEmail("admin@admin.com"); | 
| 69 | // * on donne le mot de passe hashé | 
| 70 | // mdp : admin | 
| 71 | $admin->setPassword('$2y$13$UX6UDREB8cdTuNVt3i9QcOFcyFqcQbCk.yh.D9rgYHJzs4GrfD/w.'); | 
| 72 | $admin->setRoles(['ROLE_ADMIN']); | 
| 73 | |
| 74 | $manager->persist($admin); | 
| 75 | |
| 76 | $managerUser = new User(); | 
| 77 | $managerUser->setEmail("manager@manager.com"); | 
| 78 | // * on donne le mot de passe hashé | 
| 79 | // mdp : manager | 
| 80 | $managerUser->setPassword('$2y$13$ehwmxDazwOE8ol3eTRz/C.YapEQ8UMyDFzolfGCg97gegVtOwjXu6'); | 
| 81 | $managerUser->setRoles(['ROLE_MANAGER']); | 
| 82 | |
| 83 | $manager->persist($managerUser); | 
| 84 | |
| 85 | |
| 86 | $user = new User(); | 
| 87 | $user->setEmail("user@user.com"); | 
| 88 | // * on donne le mot de passe hashé | 
| 89 | // mdp : user | 
| 90 | $user->setPassword('$2y$13$J9VkB737ouoPOiH0oTGNQOlvqxZ6Hz95mZiubq/kFzgJ2B7nt608m'); | 
| 91 | $user->setRoles(['ROLE_USER']); | 
| 92 | |
| 93 | $manager->persist($user); | 
| 94 | |
| 95 | |
| 96 | // TODO : créer 10 Genres | 
| 97 | $genres = ["Action", "Animation", "Aventure", "Comédie", "Dessin Animé", "Documentaire", "Drame", "Espionnage", "Famille", "Fantastique", "Historique", "Policier", "Romance", "Science-fiction", "Thriller", "Western"]; | 
| 98 | // TODO : faire un foreach sur le tableau pour avoir des données plus réaliste | 
| 99 | /** @var Genre[] $allGenre */ | 
| 100 | $allGenre = []; | 
| 101 | foreach ($genres as $genreName) { | 
| 102 | // TODO on commence par en créer 1, puis on fait une boucle | 
| 103 | // * faire un new | 
| 104 | $newGenre = new Genre(); | 
| 105 | |
| 106 | // * remplir les propriétés | 
| 107 | $newGenre->setName($genreName); | 
| 108 | |
| 109 | // * appeler la méthode persist avec notre entité | 
| 110 | // on demande la persitance de l'objet | 
| 111 | $manager->persist($newGenre); | 
| 112 | |
| 113 | // 4. pour les fixtures : un tableau avec tout les genres | 
| 114 | $allGenre[] = $newGenre; | 
| 115 | } | 
| 116 | |
| 117 | // TODO : créer les 2 types : film et série | 
| 118 | $types = ["film", "série"]; | 
| 119 | /** @var Type[] $allTypes */ | 
| 120 | $allTypes = []; | 
| 121 | foreach ($types as $type) { | 
| 122 | // * faire un new | 
| 123 | $newType = new Type(); | 
| 124 | |
| 125 | // * remplir les propriétés | 
| 126 | $newType->setName($type); | 
| 127 | |
| 128 | // * appeler la méthode persist avec notre entité | 
| 129 | // on demande la persitance de l'objet | 
| 130 | $manager->persist($newType); | 
| 131 | |
| 132 | // 4. tableau de fixtures | 
| 133 | $allTypes[] = $newType; | 
| 134 | } | 
| 135 | |
| 136 | // TODO : 2000 person | 
| 137 | /** @var Person[] $allPerson */ | 
| 138 | $allPerson = []; | 
| 139 | for ($i=0; $i < 2000; $i++) { | 
| 140 | // 1. faire une nouvelle instance | 
| 141 | $newPerson = new Person(); | 
| 142 | //2. remplir les prop | 
| 143 | // si on utilise le faker cinema, il faut rajouter un traitement pour séparer prénom / nom | 
| 144 | $actorFullName = $faker->actor();// Cate Blanchett | 
| 145 | $actorNames = explode(" ", $actorFullName); | 
| 146 | // ! JB aime pas l'utilisation de ce tableau sans vérifier que les index existe | 
| 147 | $newPerson->setFirstname($actorNames[0]); | 
| 148 | $newPerson->setLastname($actorNames[1]); | 
| 149 | |
| 150 | // 3. demander la persitance | 
| 151 | $manager->persist($newPerson); | 
| 152 | |
| 153 | // 4. pour les fixtures : un tableau avec toutes les personnes | 
| 154 | $allPerson[] = $newPerson; | 
| 155 | |
| 156 | } | 
| 157 | |
| 158 | // TODO : créer 10 films => limite pour l'API | 
| 159 | /** @var Movie[] $allMovies */ | 
| 160 | $allMovies = []; | 
| 161 | for ($i=0; $i < 10; $i++) { | 
| 162 | // 1. instance | 
| 163 | $newMovie = new Movie(); | 
| 164 | // 2. prop | 
| 165 | // * on décalle la propriété title car avec le faker on veux différencier les titres | 
| 166 | $newMovie->setDuration(mt_rand(10, 360)); | 
| 167 | $newMovie->setRating(mt_rand(0,50) / 10); | 
| 168 | $newMovie->setSummary($fakerFr->realText()); | 
| 169 | $newMovie->setSynopsis("lorem ipsum synopsis"); | 
| 170 | // ? https://www.php.net/manual/fr/datetime.construct.php | 
| 171 | $newMovie->setReleaseDate(new DateTime("1970-01-01")); | 
| 172 | $newMovie->setCountry("FR"); | 
| 173 | |
| 174 | $defaultUrl = "https://amc-theatres-res.cloudinary.com/amc-cdn/static/images/fallbacks/DefaultOneSheetPoster.jpg"; | 
| 175 | $picsumDefaultUrl = "https://picsum.photos/200/300"; | 
| 176 | |
| 177 | $picsumSeededUrl = "https://picsum.photos/seed/radium".$i."/200/300"; | 
| 178 | |
| 179 | $fakerPicsumSeededUrl = $faker->imageUrl(200,300, 'radium-' . $i); | 
| 180 | $newMovie->setPoster($fakerPicsumSeededUrl); | 
| 181 | |
| 182 | // 2.bis : les associations | 
| 183 | $randomType = $allTypes[mt_rand(0, count($allTypes)-1)]; | 
| 184 | $newMovie->setType($randomType); | 
| 185 | |
| 186 | // * on décalle la propriété title car avec le faker on veux différencier les titres | 
| 187 | if ($randomType->getName() === "série"){ | 
| 188 | $newMovie->setTitle($faker->tvShow()); | 
| 189 | } else { | 
| 190 | $newMovie->setTitle($faker->movie()); | 
| 191 | } | 
| 192 | |
| 193 | // TODO utiliser le service que vous avez créé : OMDBAPI | 
| 194 | // $omdbApiModel = $this->omdbApi->fetch("aaaaa"); | 
| 195 | // dd($omdbApiModel->getPoster()); | 
| 196 | $omdbApiModel = $this->omdbApi->fetch($newMovie->getTitle()); | 
| 197 | // dd($omdbApiModel); | 
| 198 | $newMovie->setPoster($omdbApiModel->getPoster()); | 
| 199 | |
| 200 | // 3. persist | 
| 201 | $manager->persist($newMovie); | 
| 202 | |
| 203 | // 4. tableau de fixtures | 
| 204 | $allMovies[] = $newMovie; | 
| 205 | } | 
| 206 | |
| 207 | // TODO : création de casting : il nous faut les objets Person ET les objets Movie | 
| 208 | // Pour chaque film, je veux entre 3 et 5 casting | 
| 209 | foreach ($allMovies as $movie) { | 
| 210 | //random nb casting | 
| 211 | $randomNbCasting = mt_rand(3,5); | 
| 212 | for ($i=1; $i <= $randomNbCasting; $i++) { | 
| 213 | // 1 . | 
| 214 | $newCasting = new Casting(); | 
| 215 | // 2. | 
| 216 | $newCasting->setRole("Role #" . $i); | 
| 217 | $newCasting->setCreditOrder($i); | 
| 218 | // 2.b | 
| 219 | $newCasting->setMovie($movie); | 
| 220 | $randomPerson = $allPerson[mt_rand(0, count($allPerson)-1)]; | 
| 221 | $newCasting->setPerson($randomPerson); | 
| 222 | //3. persist | 
| 223 | $manager->persist($newCasting); | 
| 224 | } | 
| 225 | } | 
| 226 | |
| 227 | // TODO : association de Genre avec Movie : entre 3 et 5 genre par film | 
| 228 | foreach ($allMovies as $movie) { | 
| 229 | $randomNbGenre = mt_rand(3,5); | 
| 230 | for ($i=0; $i <= $randomNbGenre; $i++) { | 
| 231 | // 1. je cherche un genre aléatoire | 
| 232 | $randomGenre = $allGenre[mt_rand(0, count($allGenre)-1)]; | 
| 233 | // 2. je remplit l'association | 
| 234 | $movie->addGenre($randomGenre); | 
| 235 | // 3. pas de persist car les 2 objets (movie / genre) sont déjà connu de Doctrine | 
| 236 | } | 
| 237 | } | 
| 238 | |
| 239 | // TODO : association de Season avec Movie : entre 3 et 10 Season par série | 
| 240 | foreach ($allMovies as $movie) { | 
| 241 | // je teste si le type est une série | 
| 242 | if ($movie->getType()->getName() == "série") | 
| 243 | { | 
| 244 | $randomNbSeason = mt_rand(3,10); | 
| 245 | for ($i=1; $i <= $randomNbSeason; $i++) { | 
| 246 | // 1. | 
| 247 | $newSeason = new Season(); | 
| 248 | // 2. | 
| 249 | $newSeason->setNumber($i); | 
| 250 | $newSeason->setNbEpisodes(mt_rand(12, 24)); | 
| 251 | // 2.b Movie est le porteur, c'est donc avec movie que l'on renseigne l'association | 
| 252 | $movie->addSeason($newSeason); | 
| 253 | |
| 254 | //3. persist | 
| 255 | $manager->persist($newSeason); | 
| 256 | } | 
| 257 | } | 
| 258 | } | 
| 259 | |
| 260 | // * appeler la méthode flush | 
| 261 | // c'est ici que les requetes SQL sont exécutées | 
| 262 | $manager->flush(); | 
| 263 | } | 
| 264 | } |