diff --git a/src/main/java/fr/clelia/avis/business/Editeur.java b/src/main/java/fr/clelia/avis/business/Editeur.java index 108733d..7be2843 100644 --- a/src/main/java/fr/clelia/avis/business/Editeur.java +++ b/src/main/java/fr/clelia/avis/business/Editeur.java @@ -17,6 +17,7 @@ import java.util.List; @DynamicUpdate @DynamicInsert @EqualsAndHashCode +@ToString public class Editeur { @Id @@ -31,6 +32,7 @@ public class Editeur { private String logo; @JsonManagedReference + @ToString.Exclude @OneToMany(mappedBy = "editeur", cascade = CascadeType.REMOVE) // OneEditeurToManyJeux private List jeux; diff --git a/src/main/java/fr/clelia/avis/business/Joueur.java b/src/main/java/fr/clelia/avis/business/Joueur.java index 561ef8e..9033dc3 100644 --- a/src/main/java/fr/clelia/avis/business/Joueur.java +++ b/src/main/java/fr/clelia/avis/business/Joueur.java @@ -14,4 +14,11 @@ import java.time.LocalDate; public class Joueur extends Utilisateur { private LocalDate dateDeNaissance; + + public Joueur(String pseudo, String email, String motDePasse, LocalDate dateDeNaissance) { + this.setPseudo(pseudo); + this.setEmail(email); + this.setMotDePasse(motDePasse); + this.dateDeNaissance = dateDeNaissance; + } } diff --git a/src/main/java/fr/clelia/avis/business/Moderateur.java b/src/main/java/fr/clelia/avis/business/Moderateur.java index f921b0a..cb3dfb2 100644 --- a/src/main/java/fr/clelia/avis/business/Moderateur.java +++ b/src/main/java/fr/clelia/avis/business/Moderateur.java @@ -13,4 +13,11 @@ import org.springframework.boot.convert.DataSizeUnit; public class Moderateur extends Utilisateur { private String numeroDeTelephone; + + public Moderateur(String pseudo, String email, String motDePasse, String numeroDeTelephone) { + this.setPseudo(pseudo); + this.setEmail(email); + this.setMotDePasse(motDePasse); + this.setNumeroDeTelephone(numeroDeTelephone); + } } diff --git a/src/main/java/fr/clelia/avis/business/Plateforme.java b/src/main/java/fr/clelia/avis/business/Plateforme.java index 45fbf39..12a0040 100644 --- a/src/main/java/fr/clelia/avis/business/Plateforme.java +++ b/src/main/java/fr/clelia/avis/business/Plateforme.java @@ -16,6 +16,7 @@ import java.util.List; @RequiredArgsConstructor @Getter @Setter +@ToString public class Plateforme { @Id @@ -27,5 +28,6 @@ public class Plateforme { @ManyToMany(mappedBy="plateformes") @JsonIgnore + @ToString.Exclude private List jeux; } \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java b/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java index aabd5cf..12b7468 100644 --- a/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java +++ b/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java @@ -1,15 +1,23 @@ package fr.clelia.avis.initialisation; import fr.clelia.avis.business.Editeur; +import fr.clelia.avis.business.Jeu; +import fr.clelia.avis.business.Joueur; import fr.clelia.avis.business.Plateforme; import fr.clelia.avis.repository.EditeurRepository; import fr.clelia.avis.repository.PlateformeRepository; +import fr.clelia.avis.repository.JeuRepository; +import fr.clelia.avis.repository.JoueurRepository; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; +import java.time.LocalDate; +import java.util.List; +import java.util.Random; + @Component // Spring va instancier cette classe // et placer cette instance dans son conteneur IoC //@AllArgsConstructor @@ -20,12 +28,26 @@ public class AjoutDonneesInitiales { private EditeurRepository editeurRepository; @Autowired private PlateformeRepository plateformeRepository; + @Autowired + private JeuRepository jeuRepository; + @Autowired + private JoueurRepository joueurRepository; @EventListener(ApplicationReadyEvent.class) public void init() { System.out.println("Ajout des données initiales"); ajouterEditeurs(); ajouterPlateformes(); + ajouterJeux(); + ajouteurJoueurs(); + afficherStatistiques(); + } + + private void afficherStatistiques() { + editeurRepository.findByLogoStartsWith("micro") + .forEach(System.out::println); + plateformeRepository.findByNomStartsWith("Nintendo") + .forEach(System.out::println); } private void ajouterEditeurs() { @@ -107,4 +129,84 @@ public class AjoutDonneesInitiales { } } + private void ajouterJeux() { + if (jeuRepository.count() == 0) { + + Editeur editeur = editeurRepository.findByNom("Ubisoft"); + + List plateformes = plateformeRepository.findAll(); + + Jeu jeuAvecBuilder = Jeu.builder() + .nom("Test") + .editeur(editeur) + .plateformes(List.of(plateformes.get(0))) + .build(); + + jeuRepository.save(new Jeu("Rocket League", editeurRepository.findByNom("Psyonix"), List.of(plateformeRepository.findByNom("Windows")))); + + Jeu jeu = new Jeu("Ghost Recon: Wildlands", editeur, plateformes); + jeuRepository.save(jeu); + + jeuRepository.save( + new Jeu( + "Assassin's creed black flag", + editeurRepository.findByNom("Ubisoft"), + List.of( + plateformeRepository.findByNom("Windows"), + plateformeRepository.findByNom("PlayStation 4"), + plateformeRepository.findByNom("Xbox One"), + plateformeRepository.findByNom("Nintendo Switch") + ))); + + Editeur mobius = editeurRepository.findByNom("Mobius Digital"); + List plateformes2 = List.of( + plateformeRepository.findByNom("PC-Engine"), + plateformeRepository.findByNom("Xbox One"), + plateformeRepository.findByNom("PlayStation 4"), + plateformeRepository.findByNom("Nintendo Switch") + ); + + jeuRepository.save(new Jeu("Outer Wilds", mobius, plateformes2)); + + List plateformes3 = plateformeRepository.findAll(); + List editeurs = editeurRepository.findAll(); + jeuRepository.save(new Jeu("Overwatch", editeurs.get(9), plateformes3.subList(4, 6))); + jeuRepository.save(new Jeu("Super Mario Odyssey", editeurs.get(1), plateformes3.subList(3, 4))); + jeuRepository.save(new Jeu("The Witcher 3: Wild Hunt", editeurs.get(2), plateformes3.subList(4, 6))); + jeuRepository.save(new Jeu("Red Dead Redemption 2", editeurs.get(3), plateformes3.subList(4, 7))); + jeuRepository.save(new Jeu("Minecraft", editeurs.get(4), plateformes3.subList(4, 8))); + jeuRepository.save(new Jeu("Cyberpunk 2077", editeurs.get(5), plateformes3.subList(4, 6))); + jeuRepository.save(new Jeu("God of War", editeurs.get(6), plateformes3.subList(9, 10))); + jeuRepository.save(new Jeu("Hollow Knight", editeurs.get(7), plateformes3.subList(3, 5))); + jeuRepository.save(new Jeu("Stardew Valley", editeurs.get(8), plateformes3.subList(4, 7))); + + jeuRepository.save(new Jeu("ZELDA : TOTK", editeurRepository.findByNom("Nintendo"), List.of(plateformeRepository.findByNom("Nintendo Switch")))); + jeuRepository.save(new Jeu("The Legend of Zelda: Breath of the Wild", editeurRepository.findByNom("Nintendo"), List.of(plateformeRepository.findByNom("Nintendo Switch")) + )); + } + } + + private void ajouteurJoueurs() { + Random random = new Random(); + List pseudos = List.of( + "Justine", + "Cedric", + "Guillaume", + "Maxence", + "Vincent L", + "Maxime", + "Anastasia", + "Ndiogou", + "Marion", + "Nejmeddine", + "Cesar", + "Moulaye", + "Julien", + "Amaury", + "Vincent S" + ); + pseudos.forEach(p -> joueurRepository.save(new Joueur(p, p.replaceAll(" ", "") + "@soprasteria.com", "12345", LocalDate.of(random.nextInt(30)+1980, 1, 1)))); + + } + } diff --git a/src/main/java/fr/clelia/avis/repository/EditeurRepository.java b/src/main/java/fr/clelia/avis/repository/EditeurRepository.java index d210225..fca50d7 100644 --- a/src/main/java/fr/clelia/avis/repository/EditeurRepository.java +++ b/src/main/java/fr/clelia/avis/repository/EditeurRepository.java @@ -2,10 +2,21 @@ package fr.clelia.avis.repository; import fr.clelia.avis.business.Editeur; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; public interface EditeurRepository extends JpaRepository { // Méthode dérivée List findByNomContainingIgnoreCase(String nomRecherche); + + @Query(""" + SELECT e + FROM Editeur e + WHERE e.logo LIKE concat(:logo, '%') + """) + List findByLogoStartsWith(@Param("logo") String logo); + + Editeur findByNom(String nom); } \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/repository/PlateformeRepository.java b/src/main/java/fr/clelia/avis/repository/PlateformeRepository.java index 074f628..dcbb35c 100644 --- a/src/main/java/fr/clelia/avis/repository/PlateformeRepository.java +++ b/src/main/java/fr/clelia/avis/repository/PlateformeRepository.java @@ -1,7 +1,23 @@ package fr.clelia.avis.repository; +import fr.clelia.avis.business.Editeur; import fr.clelia.avis.business.Plateforme; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; public interface PlateformeRepository extends JpaRepository { + // Méthode dérivée + List findByNomContainingIgnoreCase(String nomRecherche); + + @Query(""" + SELECT p + FROM Plateforme p + WHERE p.nom LIKE concat(:nom, '%') + """) + List findByNomStartsWith(@Param("nom") String nom); + + Plateforme findByNom(String nom); } \ No newline at end of file