From c5ca57d52135dcdb5fec5951a1de5ca9720b051e Mon Sep 17 00:00:00 2001 From: visoulier Date: Thu, 28 Mar 2024 00:42:05 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20thematique=20selectionn=C3=A9es=20dans?= =?UTF-8?q?=20partie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sciencequest/sae/controllers/PartieController.java | 9 +++++++++ .../fr/iut/sciencequest/sae/dto/partie/PartieDTO.java | 4 ++++ .../java/fr/iut/sciencequest/sae/entities/Partie.java | 8 ++++++++ .../fr/iut/sciencequest/sae/entities/Thematique.java | 3 +++ SpringBootProject/src/main/resources/schema.sql | 9 +++++++++ 5 files changed, 33 insertions(+) diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java index ba3b67d..47cbfc7 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java @@ -6,11 +6,13 @@ import fr.iut.sciencequest.sae.controllers.request.PartieRequest; import fr.iut.sciencequest.sae.dto.partie.PartieDTO; import fr.iut.sciencequest.sae.entities.Joueur; import fr.iut.sciencequest.sae.entities.Partie; +import fr.iut.sciencequest.sae.entities.Thematique; import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException; import fr.iut.sciencequest.sae.exceptions.partie.PartyAlreadyStartedException; import fr.iut.sciencequest.sae.services.JeuService; import fr.iut.sciencequest.sae.services.JoueurService; import fr.iut.sciencequest.sae.services.PartieService; +import fr.iut.sciencequest.sae.services.ThematiqueService; import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.modelmapper.ModelMapper; @@ -18,6 +20,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -32,6 +35,7 @@ public class PartieController { private final PartieService partieService; private final JoueurService joueurService; private final JeuService jeuService; + private final ThematiqueService thematiqueService; private final ModelMapper modelMapper; @RequestMapping(value = "/{codeInvitation}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @@ -45,6 +49,11 @@ public class PartieController { Partie partie = new Partie(); partie.setJeu(this.jeuService.findById(request.getIdJeu())); partie.setJoueurs(List.of(this.joueurService.findById(request.getIdJoueur()))); + + partie.setThematiques(new ArrayList<>()); + for(int idThematique: request.getThematiques()){ + partie.getThematiques().add(this.thematiqueService.findById(idThematique)); + } partie = this.partieService.create(partie); return this.modelMapper.map(partie, PartieDTO.class); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java index 965c457..dafa38f 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java @@ -2,6 +2,8 @@ package fr.iut.sciencequest.sae.dto.partie; import fr.iut.sciencequest.sae.dto.jeu.JeuDTO; import fr.iut.sciencequest.sae.dto.joueur.JoueurSimpleDTO; +import fr.iut.sciencequest.sae.dto.thematique.ThematiqueSimpleDTO; +import fr.iut.sciencequest.sae.entities.Thematique; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.*; @@ -25,4 +27,6 @@ public class PartieDTO extends RepresentationModel { private List joueurs; @NotNull private JeuDTO jeu; + @NotEmpty + private List thematiques; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java index 58f2026..accb7b8 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java @@ -37,4 +37,12 @@ public class Partie { @Column(name = "datecreation") //default value : see Schema.sql private Date dateCreation; + + @ManyToMany(fetch = FetchType.EAGER) + @JoinTable( + name = "thematiqueselectionnee", + joinColumns = @JoinColumn(name = "idpartie"), + inverseJoinColumns = @JoinColumn(name="idthematique") + ) + List thematiques; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java index 4f011de..bf91bb2 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java @@ -35,4 +35,7 @@ public class Thematique { @OneToMany(mappedBy = "thematique") @Fetch(FetchMode.JOIN) private List scientifiques; + + @ManyToMany(mappedBy = "thematiques") + List parties; } diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql index 359d9fb..66b41b4 100644 --- a/SpringBootProject/src/main/resources/schema.sql +++ b/SpringBootProject/src/main/resources/schema.sql @@ -12,6 +12,7 @@ DROP TABLE IF EXISTS Joueur CASCADE; DROP TABLE IF EXISTS Indice CASCADE; DROP TABLE IF EXISTS Scientifique CASCADE; DROP TABLE IF EXISTS Thematique CASCADE; +DROP TABLE IF EXISTS ThematiqueSelectionnee CASCADE; DROP TABLE IF EXISTS Difficulte; @@ -150,6 +151,14 @@ CREATE TABLE Decouvrir( PRIMARY KEY (idUtilisateur, idScientifique) ); +-- ThematiqueSelectionnee + +CREATE TABLE ThematiqueSelectionnee( + idPartie integer REFERENCES Partie(id), + idThematique integer REFERENCES Thematique(id), + PRIMARY KEY (idPartie, idThematique) +); + -- TRIGGERS