• 30 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 12/12/2019

Entraînez-vous à créer un système pour nettoyer vos entités

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

À vous de jouer

Vous avez bien lu les 3 premières parties du MOOC ? Parfait, le but de l’exercice est de mettre en pratique toutes les compétences acquises jusque maintenant : utilisation des services, et de Doctrine principalement. Il doit vous permettre de bien les assimiler et de vous assurer de les maîtriser.

Votre mission : un système de purge

Beaucoup d’annonces vont être créées sur notre site, certaines trouveront des candidatures pertinentes, d’autres pas forcément. C’est dans ce dernier cas qu’il nous faut un moyen de nettoyer les annonces sans candidatures qui ne sont plus utile à personne !

Pour cela, vous devez écrire un service que nous appellerons “oc_platform.purger.advert”. Ce service va récupérer et supprimer toutes les annonces dont la date de modification est plus vieille que X jours. Ce “X” doit être un paramètre de la méthode de votre service.

Attention également à ne pas supprimer des annonces ayant au moins une candidature. A partir du moment où on a une candidature sur une certaine annonce, alors on souhaite garder cette annonce indéfiniment.

La méthode à créer a donc la signature suivante :

<?php
public function purge($days)

Pour tester ce service, je vous invite à créer une action dans le contrôleur Advert, par exemple à l’URL /platform/purge/{days}, qui ne fait qu’exécuter la purge grâce à ce service. Pas besoin de vue, cette action de contrôleur ne sera pas notée.

Pour remplir cette mission, vous devrez peut-être créer une nouvelle méthode dans un repository.

Point de départ

Pour qu’on parle tous de la même chose, je vous propose de télécharger le code source que vous devez avoir à ce stade du cours. Cela nous fera une base commune, qui vous permettra de vérifier que vous avez bien le même, et facilitera la correction. Une fois l’archive extraite, n’oubliez pas de faire un composer install et vous serez bon pour utiliser le code !

Téléchargez le code source de départ

Conseils

Les dépendances de vos services

Pour chaque service que vous faites, pensez à bien réfléchir sur les dépendances dont vous avez besoin. Posez-vous les bonnes questions : est-ce que mon service a besoin d’envoyer des e-mails ? Est-ce que mon service a besoin d’accéder à la base de données ? Etc. En fonction de ces réponses, vous devez ajouter les services correspondants en argument du service que vous créez.

La construction de vos requêtes SQL

Pour construire vos requêtes SQL, servez-vous bien du chapitre sur la récupération des entités du cours, mais également de la page sur le QueryBuilder de la documentation Doctrine.

Notamment, pour vérifier qu’un attribut contenant une collection soit vide (ne contient aucune entité dans la relation), il faut utiliser la syntaxe suivante : attribut IS EMPTY.

Les données de test

Pour tester toutes les requêtes que vous allez faire, vous avez d’abord besoin de créer plein d’entités dans la base de données. Le plus simple pour cela est d’utiliser les fixtures comme nous l’avons vu dans cette partie du cours, mais vous pouvez également les ajouter à la main dans PhpMyAdmin : ce ne sont au final que des données de test.

Vérifiez votre travail

Vérifiez que vous avez bien les éléments suivants :

  • Le code source est lisible et bien indenté.

  • La vérification de la présence d’au moins une annonce se fait directement depuis la requête Doctrine, afin que celle-ci ne retourne que les annonces à supprimer effectivement.

  • Le service purger existe, sa configuration est correcte, et la méthode purge($days) existe telle qu’indiqué dans l’énoncé.

  • La méthode purge($days) supprime uniquement les annonces plus vieilles que le nombre de jours passé en argument ($days).

  • La requête pour récupérer les annonces à supprimer est faite depuis le repository, et utilise le mécanisme des paramètres (setParameter) pour injecter la date ou le nombre de jours.

Exemple de certificat de réussite
Exemple de certificat de réussite