diff --git a/src/main/java/fr/clelia/avis/AvisApplication.java b/src/main/java/fr/clelia/avis/AvisApplication.java index 278f495..909df55 100644 --- a/src/main/java/fr/clelia/avis/AvisApplication.java +++ b/src/main/java/fr/clelia/avis/AvisApplication.java @@ -1,13 +1,22 @@ package fr.clelia.avis; +import fr.clelia.avis.business.Joueur; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import java.time.LocalDate; + @SpringBootApplication public class AvisApplication { public static void main(String[] args) { + SpringApplication.run(AvisApplication.class, args); + Joueur joueur = Joueur.builder() + .pseudo("Joueur") + .email("amaury.maizy@soprasteria.com") + .dateDeNaissance(LocalDate.of(2000, 1, 1)) + .build(); } } diff --git a/src/main/java/fr/clelia/avis/business/Avatar.java b/src/main/java/fr/clelia/avis/business/Avatar.java index 89ca1e2..e4debb7 100644 --- a/src/main/java/fr/clelia/avis/business/Avatar.java +++ b/src/main/java/fr/clelia/avis/business/Avatar.java @@ -14,4 +14,4 @@ public class Avatar { @OneToOne(mappedBy="avatar") private Utilisateur utilisateur; -} \ No newline at end of file +} diff --git a/src/main/java/fr/clelia/avis/business/Editeur.java b/src/main/java/fr/clelia/avis/business/Editeur.java index 75fbbbb..108733d 100644 --- a/src/main/java/fr/clelia/avis/business/Editeur.java +++ b/src/main/java/fr/clelia/avis/business/Editeur.java @@ -1,9 +1,11 @@ package fr.clelia.avis.business; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.persistence.*; - import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; import lombok.*; - import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import java.util.List; @@ -19,6 +21,7 @@ public class Editeur { @Id @GeneratedValue + @JsonProperty(access = JsonProperty.Access.READ_ONLY) private Long id; @Column(length = 100, unique = true) @@ -27,8 +30,12 @@ public class Editeur { private String logo; + @JsonManagedReference + @OneToMany(mappedBy = "editeur", cascade = CascadeType.REMOVE) // OneEditeurToManyJeux + private List jeux; + public Editeur(String nom, String logo) { this.nom = nom; this.logo = logo; } -} \ No newline at end of file +} diff --git a/src/main/java/fr/clelia/avis/business/Jeu.java b/src/main/java/fr/clelia/avis/business/Jeu.java index 0c2b769..2543b81 100644 --- a/src/main/java/fr/clelia/avis/business/Jeu.java +++ b/src/main/java/fr/clelia/avis/business/Jeu.java @@ -1,23 +1,177 @@ package fr.clelia.avis.business; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.*; -import lombok.*; -import java.util.List; +import lombok.Data; +import lombok.NonNull; -import java.util.ArrayList; +import java.time.LocalDate; +import java.util.List; @Entity @Data public class Jeu { @Id + @GeneratedValue private Long id; + @NonNull + private String nom; + @ManyToOne - @JoinColumn(name = "editeur_id") + @NonNull + @JsonBackReference private Editeur editeur; @ManyToMany - private List plateformes = new ArrayList<>(); + @NonNull + @JsonManagedReference // On souhaite voir en Json les plateformes du jeu + private List plateformes; -} \ No newline at end of file + private LocalDate dateDeSortie; + + private boolean possedeImage; + + public Jeu(@NonNull String nom, @NonNull Editeur editeur, @NonNull List plateformes) { + this.nom = nom; + this.editeur = editeur; + this.plateformes = plateformes; + } + + public Jeu(Long id, @NonNull String nom, @NonNull Editeur editeur, @NonNull List plateformes) { + this.id = id; + this.nom = nom; + this.editeur = editeur; + this.plateformes = plateformes; + } + + public Jeu() { + } + + public static JeuBuilder builder() { + return new JeuBuilder(); + } + + public Long getId() { + return this.id; + } + + public @NonNull String getNom() { + return this.nom; + } + + public @NonNull Editeur getEditeur() { + return this.editeur; + } + + public @NonNull List getPlateformes() { + return this.plateformes; + } + + public void setId(Long id) { + this.id = id; + } + + public void setNom(@NonNull String nom) { + this.nom = nom; + } + + public void setEditeur(@NonNull Editeur editeur) { + this.editeur = editeur; + } + + public void setPlateformes(@NonNull List plateformes) { + this.plateformes = plateformes; + } + + public boolean equals(final Object o) { + if (o == this) return true; + if (!(o instanceof Jeu)) return false; + final Jeu other = (Jeu) o; + if (!other.canEqual((Object) this)) return false; + final Object this$id = this.getId(); + final Object other$id = other.getId(); + if (this$id == null ? other$id != null : !this$id.equals(other$id)) return false; + final Object this$nom = this.getNom(); + final Object other$nom = other.getNom(); + if (this$nom == null ? other$nom != null : !this$nom.equals(other$nom)) return false; + final Object this$editeur = this.getEditeur(); + final Object other$editeur = other.getEditeur(); + if (this$editeur == null ? other$editeur != null : !this$editeur.equals(other$editeur)) return false; + final Object this$plateformes = this.getPlateformes(); + final Object other$plateformes = other.getPlateformes(); + if (this$plateformes == null ? other$plateformes != null : !this$plateformes.equals(other$plateformes)) + return false; + return true; + } + + protected boolean canEqual(final Object other) { + return other instanceof Jeu; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $id = this.getId(); + result = result * PRIME + ($id == null ? 43 : $id.hashCode()); + final Object $nom = this.getNom(); + result = result * PRIME + ($nom == null ? 43 : $nom.hashCode()); + final Object $editeur = this.getEditeur(); + result = result * PRIME + ($editeur == null ? 43 : $editeur.hashCode()); + final Object $plateformes = this.getPlateformes(); + result = result * PRIME + ($plateformes == null ? 43 : $plateformes.hashCode()); + return result; + } + + public String toString() { + return "Jeu(id=" + this.getId() + ", nom=" + this.getNom() + ", editeur=" + this.getEditeur() + ", plateformes=" + this.getPlateformes() + ")"; + } + + public static class JeuBuilder { + private Long id; + private @NonNull String nom; + private @NonNull Editeur editeur; + private @NonNull List plateformes; + + JeuBuilder() { + } + + public JeuBuilder id(Long id) { + this.id = id; + return this; + } + + public JeuBuilder nom(@NonNull String nom) { + this.nom = nom; + return this; + } + + public JeuBuilder editeur(@NonNull Editeur editeur) { + this.editeur = editeur; + return this; + } + + public JeuBuilder plateformes(@NonNull List plateformes) { + this.plateformes = plateformes; + return this; + } + + public Jeu build() { + return new Jeu(this.id, this.nom, this.editeur, this.plateformes); + } + + public String toString() { + return "Jeu.JeuBuilder(id=" + this.id + ", nom=" + this.nom + ", editeur=" + this.editeur + ", plateformes=" + this.plateformes + ")"; + } + } +/* + public Jeu(String nom, Editeur editeur, List plateformes) { + this.nom = nom; + this.editeur = editeur; + this.plateformes = plateformes; + } + + */ +} diff --git a/src/main/java/fr/clelia/avis/business/Joueur.java b/src/main/java/fr/clelia/avis/business/Joueur.java index 2d03cbb..561ef8e 100644 --- a/src/main/java/fr/clelia/avis/business/Joueur.java +++ b/src/main/java/fr/clelia/avis/business/Joueur.java @@ -14,4 +14,4 @@ import java.time.LocalDate; public class Joueur extends Utilisateur { private LocalDate dateDeNaissance; -} \ No newline at end of file +} diff --git a/src/main/java/fr/clelia/avis/business/Moderateur.java b/src/main/java/fr/clelia/avis/business/Moderateur.java index b6f8d93..f921b0a 100644 --- a/src/main/java/fr/clelia/avis/business/Moderateur.java +++ b/src/main/java/fr/clelia/avis/business/Moderateur.java @@ -13,4 +13,4 @@ import org.springframework.boot.convert.DataSizeUnit; public class Moderateur extends Utilisateur { private String numeroDeTelephone; -} \ No newline at end of file +} diff --git a/src/main/java/fr/clelia/avis/business/Plateforme.java b/src/main/java/fr/clelia/avis/business/Plateforme.java index bfb3b27..45fbf39 100644 --- a/src/main/java/fr/clelia/avis/business/Plateforme.java +++ b/src/main/java/fr/clelia/avis/business/Plateforme.java @@ -1,19 +1,31 @@ package fr.clelia.avis.business; -import jakarta.persistence.*; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; import lombok.*; -import org.hibernate.annotations.DynamicInsert; -import org.hibernate.annotations.DynamicUpdate; -@Data -@DynamicInsert -@DynamicUpdate +import java.util.List; + @Entity +@NoArgsConstructor +@RequiredArgsConstructor +@Getter +@Setter public class Plateforme { @Id @GeneratedValue private Long id; + @NonNull private String nom; + + @ManyToMany(mappedBy="plateformes") + @JsonIgnore + private List jeux; } \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/controller/EditeurController.java b/src/main/java/fr/clelia/avis/controller/EditeurController.java new file mode 100644 index 0000000..6916a39 --- /dev/null +++ b/src/main/java/fr/clelia/avis/controller/EditeurController.java @@ -0,0 +1,34 @@ +package fr.clelia.avis.controller; + +import fr.clelia.avis.service.EditeurService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class EditeurController { + + // Dépendance + private final EditeurService editeurService; + + public EditeurController(EditeurService editeurService) { + this.editeurService = editeurService; + } + + @GetMapping("editeurs") + public ModelAndView getEditeurs() { + ModelAndView mav = new ModelAndView("editeurs"); + mav.addObject("editeurs", editeurService.recupererEditeurs()); + return mav; + } + + @PostMapping("editeurs") + public ModelAndView postEditeurs(@RequestParam("NOM") String nomRecherche) { + ModelAndView modelAndView = new ModelAndView("editeurs"); + modelAndView.addObject("editeurs", editeurService.recupererEditeursAyantUnNomContenant(nomRecherche)); + modelAndView.addObject("nom", nomRecherche); + return modelAndView; + } +} diff --git a/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java b/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java index 7efaeda..aabd5cf 100644 --- a/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java +++ b/src/main/java/fr/clelia/avis/initialisation/AjoutDonneesInitiales.java @@ -1,22 +1,110 @@ package fr.clelia.avis.initialisation; import fr.clelia.avis.business.Editeur; +import fr.clelia.avis.business.Plateforme; import fr.clelia.avis.repository.EditeurRepository; +import fr.clelia.avis.repository.PlateformeRepository; 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; @Component // Spring va instancier cette classe // et placer cette instance dans son conteneur IoC -@AllArgsConstructor +//@AllArgsConstructor public class AjoutDonneesInitiales { // Dépendances + @Autowired private EditeurRepository editeurRepository; + @Autowired + private PlateformeRepository plateformeRepository; @EventListener(ApplicationReadyEvent.class) public void init() { System.out.println("Ajout des données initiales"); + ajouterEditeurs(); + ajouterPlateformes(); } -} \ No newline at end of file + + private void ajouterEditeurs() { + if (editeurRepository.count() == 0) { + editeurRepository.save(new Editeur("Mobius Digital", "mobiusdigitalgames.com")); + editeurRepository.save(new Editeur("Activision", "activision.com")); + editeurRepository.save(new Editeur("Amazon Games","amazongames.com")); + editeurRepository.save(new Editeur("Ankama", "ankama.com")); + editeurRepository.save(new Editeur("Psyonix", "psyonix.com")); + editeurRepository.save(new Editeur("Bandai Namco", "bandai.co.jp")); + editeurRepository.save(new Editeur("Bethesda", "bethesda.net")); + editeurRepository.save(new Editeur("BioWare", "bioware.com")); + editeurRepository.save(new Editeur("Blizzard", "blizzard.com")); + editeurRepository.save(new Editeur("Capcom", "capcom.com")); + editeurRepository.save(new Editeur("CCP", "ccpgames.com")); + editeurRepository.save(new Editeur("CD Projekt Red", "cdprojekt.com")); + editeurRepository.save(new Editeur("Davilex", "davilex.nl")); + editeurRepository.save(new Editeur("Digital Extreme", "digitalextremes.com")); + editeurRepository.save(new Editeur("Electronic Arts", "ea.com")); + editeurRepository.save(new Editeur("Epic Games", "epicgames.com")); + editeurRepository.save(new Editeur("FromSoftware", "fromsoftware.jp")); + editeurRepository.save(new Editeur("Hazelight Studios", "hazelight.se")); + editeurRepository.save(new Editeur("idSoftware", "idsoftware.com")); + editeurRepository.save(new Editeur("Microsoft", "microsoft.com")); + editeurRepository.save(new Editeur("MonolithSoftware", "monolithsoft.co.jp")); + editeurRepository.save(new Editeur("Naughty Dog", "naughtydog.com")); + editeurRepository.save(new Editeur("Nintendo", "nintendo.com")); + editeurRepository.save(new Editeur("Riot Games", "riotgames.com")); + editeurRepository.save(new Editeur("Rockstar", "rockstar.com")); + editeurRepository.save(new Editeur("Sega", "sega.com")); + editeurRepository.save(new Editeur("Square Enix", "squareenix.com")); + editeurRepository.save(new Editeur("Tencent", "tencentgames.com")); + editeurRepository.save(new Editeur("Ubisoft", "ubisoft.com")); + editeurRepository.save(new Editeur("Ultra Software", null)); + editeurRepository.save(new Editeur("Valve", "valvesoftware.com")); + editeurRepository.save(new Editeur("Wildcard", "wildcardmobile.com")); + } + } + + private void ajouterPlateformes() { + if (plateformeRepository.count() == 0) { + plateformeRepository.save(new Plateforme("Amstrad CPC")); + plateformeRepository.save(new Plateforme("Nintendo Wii")); + plateformeRepository.save(new Plateforme("Nintendo Wii U")); + plateformeRepository.save(new Plateforme("Nintendo Switch")); + plateformeRepository.save(new Plateforme("Windows")); + plateformeRepository.save(new Plateforme("MacOS")); + plateformeRepository.save(new Plateforme("Steam")); + plateformeRepository.save(new Plateforme("Neo-Geo")); + plateformeRepository.save(new Plateforme("PlayStation 1")); + plateformeRepository.save(new Plateforme("PlayStation 2")); + plateformeRepository.save(new Plateforme("PlayStation 3")); + plateformeRepository.save(new Plateforme("PlayStation 4")); + plateformeRepository.save(new Plateforme("PlayStation 5")); + plateformeRepository.save(new Plateforme("PlayStation Vita")); + plateformeRepository.save(new Plateforme("PSP")); + plateformeRepository.save(new Plateforme("Sega Dreamcast")); + plateformeRepository.save(new Plateforme("Sega Mastersystem")); + plateformeRepository.save(new Plateforme("Sega Saturn")); + plateformeRepository.save(new Plateforme("Xbox One")); + plateformeRepository.save(new Plateforme("Xbox One Series")); + plateformeRepository.save(new Plateforme("Xbox 360")); + plateformeRepository.save(new Plateforme("Amiga")); + plateformeRepository.save(new Plateforme("Android")); + plateformeRepository.save(new Plateforme("Atari 8-bit")); + plateformeRepository.save(new Plateforme("Atari Jaguar")); + plateformeRepository.save(new Plateforme("Commodore 64")); + plateformeRepository.save(new Plateforme("Game Boy")); + plateformeRepository.save(new Plateforme("Game Boy Color")); + plateformeRepository.save(new Plateforme("Game Boy Advance")); + plateformeRepository.save(new Plateforme("Game Boy Advance SP")); + plateformeRepository.save(new Plateforme("NES")); + plateformeRepository.save(new Plateforme("PC-Engine")); + plateformeRepository.save(new Plateforme("SNES")); + plateformeRepository.save(new Plateforme("Nintendo 3DS")); + plateformeRepository.save(new Plateforme("Nintendo 64")); + plateformeRepository.save(new Plateforme("Nintendo DS")); + plateformeRepository.save(new Plateforme("Nintendo Gamecube")); + } + } + +} diff --git a/src/main/java/fr/clelia/avis/repository/AvatarRepository.java b/src/main/java/fr/clelia/avis/repository/AvatarRepository.java index d3b2ca3..e191c47 100644 --- a/src/main/java/fr/clelia/avis/repository/AvatarRepository.java +++ b/src/main/java/fr/clelia/avis/repository/AvatarRepository.java @@ -1,4 +1,7 @@ package fr.clelia.avis.repository; -public interface AvatarRepository { +import fr.clelia.avis.business.Avatar; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AvatarRepository extends JpaRepository { } diff --git a/src/main/java/fr/clelia/avis/repository/JeuRepository.java b/src/main/java/fr/clelia/avis/repository/JeuRepository.java index ff8a0e5..f7d7114 100644 --- a/src/main/java/fr/clelia/avis/repository/JeuRepository.java +++ b/src/main/java/fr/clelia/avis/repository/JeuRepository.java @@ -1,4 +1,8 @@ package fr.clelia.avis.repository; -public interface JeuRepository { -} +import fr.clelia.avis.business.Jeu; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +public interface JeuRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/repository/JoueurRepository.java b/src/main/java/fr/clelia/avis/repository/JoueurRepository.java index b525776..3393130 100644 --- a/src/main/java/fr/clelia/avis/repository/JoueurRepository.java +++ b/src/main/java/fr/clelia/avis/repository/JoueurRepository.java @@ -1,4 +1,7 @@ package fr.clelia.avis.repository; -public interface JoueurRepository { -} +import fr.clelia.avis.business.Joueur; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface JoueurRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/repository/ModerateurRepository.java b/src/main/java/fr/clelia/avis/repository/ModerateurRepository.java index 5091925..daac642 100644 --- a/src/main/java/fr/clelia/avis/repository/ModerateurRepository.java +++ b/src/main/java/fr/clelia/avis/repository/ModerateurRepository.java @@ -1,4 +1,7 @@ package fr.clelia.avis.repository; -public interface ModerateurRepository { -} +import fr.clelia.avis.business.Moderateur; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ModerateurRepository extends JpaRepository { +} \ 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 2e8017e..074f628 100644 --- a/src/main/java/fr/clelia/avis/repository/PlateformeRepository.java +++ b/src/main/java/fr/clelia/avis/repository/PlateformeRepository.java @@ -1,4 +1,7 @@ package fr.clelia.avis.repository; -public interface PlateformeRepository { -} +import fr.clelia.avis.business.Plateforme; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PlateformeRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/repository/UtilisateurRepository.java b/src/main/java/fr/clelia/avis/repository/UtilisateurRepository.java index f36fe12..eb01b00 100644 --- a/src/main/java/fr/clelia/avis/repository/UtilisateurRepository.java +++ b/src/main/java/fr/clelia/avis/repository/UtilisateurRepository.java @@ -1,4 +1,7 @@ package fr.clelia.avis.repository; -public interface UtilisateurRepository { -} +import fr.clelia.avis.business.Utilisateur; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UtilisateurRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/fr/clelia/avis/service/EditeurService.java b/src/main/java/fr/clelia/avis/service/EditeurService.java new file mode 100644 index 0000000..54ceeeb --- /dev/null +++ b/src/main/java/fr/clelia/avis/service/EditeurService.java @@ -0,0 +1,12 @@ +package fr.clelia.avis.service; + +import fr.clelia.avis.business.Editeur; + +import java.util.List; + +public interface EditeurService { + + List recupererEditeurs(); + + List recupererEditeursAyantUnNomContenant(String nomRecherche); +} diff --git a/src/main/java/fr/clelia/avis/service/impl/EditeurServiceImpl.java b/src/main/java/fr/clelia/avis/service/impl/EditeurServiceImpl.java new file mode 100644 index 0000000..9919c89 --- /dev/null +++ b/src/main/java/fr/clelia/avis/service/impl/EditeurServiceImpl.java @@ -0,0 +1,32 @@ +package fr.clelia.avis.service.impl; + +import fr.clelia.avis.business.Editeur; +import fr.clelia.avis.repository.EditeurRepository; +import fr.clelia.avis.service.EditeurService; +import org.springframework.stereotype.Service; + +import java.util.List; + +//@Component +@Service +public class EditeurServiceImpl implements EditeurService { + + private final EditeurRepository editeurRepository; + + // Ce constructeur va faire déduire à Spring + // qu'il doit d'abord instancier la repo + // avant d'instancier le service + public EditeurServiceImpl(EditeurRepository editeurRepository) { + this.editeurRepository = editeurRepository; + } + + @Override + public List recupererEditeurs() { + return editeurRepository.findAll(); + } + + @Override + public List recupererEditeursAyantUnNomContenant(String nomRecherche) { + return editeurRepository.findByNomContainingIgnoreCase(nomRecherche); + } +} diff --git a/src/main/resources/templates/editeurs.html b/src/main/resources/templates/editeurs.html new file mode 100644 index 0000000..082b211 --- /dev/null +++ b/src/main/resources/templates/editeurs.html @@ -0,0 +1,30 @@ + + + + + + Editeurs + + +
+

Liste des éditeurs

+
+ + +
+ + + + + + + + + + + + + +
Id TrierLogo TrierNom Trier
Logo de l'éditeur'
+ + \ No newline at end of file diff --git a/src/main/resources/templates/entete.html b/src/main/resources/templates/entete.html new file mode 100644 index 0000000..7a5602e --- /dev/null +++ b/src/main/resources/templates/entete.html @@ -0,0 +1,32 @@ + + + + + + + + + + +
ÉditeursJeuxPlateformesConfigurationSwagger
+ + + + + +
H2Console
+ + + + + + + + +
ActuatorBeansHealthPropriétés de configurationEnvironnement
+ + + + + +
HibernateStatistiques
\ No newline at end of file