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 47cbfc7..5e0e04b 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 @@ -9,10 +9,7 @@ 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 fr.iut.sciencequest.sae.services.*; import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.modelmapper.ModelMapper; @@ -36,6 +33,7 @@ public class PartieController { private final JoueurService joueurService; private final JeuService jeuService; private final ThematiqueService thematiqueService; + private final DifficulteService difficulteService; private final ModelMapper modelMapper; @RequestMapping(value = "/{codeInvitation}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @@ -47,13 +45,18 @@ public class PartieController { @ResponseStatus(HttpStatus.CREATED) public PartieDTO createPartie(@RequestBody @Valid PartieRequest request) { 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.setDifficulte(this.difficulteService.findById(request.getIdDifficulte())); + partie = this.partieService.create(partie); return this.modelMapper.map(partie, PartieDTO.class); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/request/PartieRequest.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/request/PartieRequest.java index 5bb5678..b38b6da 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/request/PartieRequest.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/request/PartieRequest.java @@ -1,5 +1,6 @@ package fr.iut.sciencequest.sae.controllers.request; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -12,6 +13,9 @@ public class PartieRequest { @NotNull private int idJoueur; + @NotEmpty private List thematiques; + + @NotNull private Integer idDifficulte; } 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 dafa38f..d04628e 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 @@ -1,5 +1,6 @@ package fr.iut.sciencequest.sae.dto.partie; +import fr.iut.sciencequest.sae.dto.difficulte.DifficulteSimpleDTO; import fr.iut.sciencequest.sae.dto.jeu.JeuDTO; import fr.iut.sciencequest.sae.dto.joueur.JoueurSimpleDTO; import fr.iut.sciencequest.sae.dto.thematique.ThematiqueSimpleDTO; @@ -29,4 +30,6 @@ public class PartieDTO extends RepresentationModel { private JeuDTO jeu; @NotEmpty private List thematiques; + @NotNull + private DifficulteSimpleDTO difficulte; } 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 accb7b8..513a56f 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 @@ -44,5 +44,9 @@ public class Partie { joinColumns = @JoinColumn(name = "idpartie"), inverseJoinColumns = @JoinColumn(name="idthematique") ) - List thematiques; + private List thematiques; + + @ManyToOne + @JoinColumn(name="iddifficulte", nullable = false) + private Difficulte difficulte; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/DifficulteService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/DifficulteService.java index 8ad5be3..1489f02 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/DifficulteService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/DifficulteService.java @@ -1,6 +1,9 @@ package fr.iut.sciencequest.sae.services; import fr.iut.sciencequest.sae.entities.Difficulte; +import fr.iut.sciencequest.sae.entities.Thematique; +import fr.iut.sciencequest.sae.exceptions.notFound.DifficulteNotFoundException; +import fr.iut.sciencequest.sae.exceptions.notFound.ThematiqueNotFoundException; import fr.iut.sciencequest.sae.repositories.DifficulteRepository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -17,4 +20,10 @@ public class DifficulteService { public Page findAll(Pageable p){ return this.difficulteRepository.findAll(p); } + + public Difficulte findById(int id) { + return this.difficulteRepository.findById(id).orElseThrow(() -> + new DifficulteNotFoundException(id) + ); + } } diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql index 66b41b4..7c1568d 100644 --- a/SpringBootProject/src/main/resources/schema.sql +++ b/SpringBootProject/src/main/resources/schema.sql @@ -114,6 +114,7 @@ CREATE TABLE Partie( id SERIAL PRIMARY KEY, codeInvitation varchar(5) UNIQUE DEFAULT make_uid(), idJeu integer REFERENCES Jeu(id), + idDifficulte integer REFERENCES Difficulte(id), status varchar(128) DEFAULT 'pending', dateCreation timestamp DEFAULT CURRENT_TIMESTAMP );