diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieKahootController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieKahootController.java index 64bd8e3..64dc600 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieKahootController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieKahootController.java @@ -83,7 +83,7 @@ public class PartieKahootController { return this.modelMapper.map(partie, PartieKahootDTO.class); } - @PutMapping(value= "/{codeInvitation}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PatchMapping(value= "/{codeInvitation}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) public PartieKahootDTO addPlayerToPartie(@PathVariable String codeInvitation, @RequestBody @Valid PartieAddJoueurRequest request){ Joueur joueur = this.joueurService.findById(request.getIdJoueur()); @@ -106,7 +106,7 @@ public class PartieKahootController { public PartieKahootStatusDTO demarrerPartie(@PathVariable String codeInvitation){ PartieKahoot partieKahoot = this.partieKahootService.getPartieKahootByIdOrCodeInvitation(codeInvitation); - if(partieKahoot.getStatus() == Status.Started){ + if(partieKahoot.getStatus() == Status.Started || partieKahoot.getStatus() == Status.DisplayingScore){ throw new PartyAlreadyStartedException(); } partieKahoot.setStatus(Status.Started); diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/PartieKahoot.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/PartieKahoot.java index c5d8fd5..f8406ab 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/PartieKahoot.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/PartieKahoot.java @@ -27,6 +27,10 @@ public class PartieKahoot extends Partie { @Temporal(TemporalType.TIMESTAMP) private Calendar tempsLimiteReponse; + @Column(name = "tempsaffichagescore") + @Temporal(TemporalType.TIMESTAMP) + private Calendar tempsAffichageScore; + @JsonManagedReference @OneToMany(mappedBy = "partie", fetch = FetchType.EAGER) private List questions; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Status.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Status.java index 4d87662..66a0ec4 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Status.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Status.java @@ -3,5 +3,6 @@ package fr.iut.sciencequest.sae.entities; public enum Status { Pending, Started, + DisplayingScore, Ended } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieKahootService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieKahootService.java index 80820d0..80e681d 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieKahootService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieKahootService.java @@ -18,7 +18,8 @@ import java.util.Optional; @AllArgsConstructor @Service public class PartieKahootService { - private static final int TEMPS_REPONSE_QUESTION = 60; //secondes + private static final int TEMPS_REPONSE_QUESTION = 20; //secondes + private static final int TEMPS_AFFICHAGE_SCORE = 5; //secondes private final PartieKahootRepository partieKahootRepository; private final QuestionPartieKahootRepository questionPartieKahootRepository; private final PartieRepository partieRepository; @@ -65,11 +66,16 @@ public class PartieKahootService { } public PartieKahoot questionSuivante(PartieKahoot partieKahoot){ - if(partieKahoot.getStatus() != Status.Started){ + if(partieKahoot.getStatus() != Status.Started && partieKahoot.getStatus() != Status.DisplayingScore ){ throw new PartyNotStartedException(); } - Optional questionPartieKahoot = partieKahoot.getQuestions().stream().filter(q -> !q.isAEtePose()).findFirst(); - if (questionPartieKahoot.isEmpty()){ + Optional questionSuivante = partieKahoot.getQuestions().stream().filter(q -> !q.isAEtePose()).findFirst(); + + //reset + partieKahoot.setStatus(Status.Started); + partieKahoot.setTempsAffichageScore(null); + + if (questionSuivante.isEmpty()){ partieKahoot.setStatus(Status.Ended); partieKahoot.setQuestionActuel(null); partieKahoot.setTempsLimiteReponse(null); @@ -78,23 +84,40 @@ public class PartieKahootService { tempsLimiteReponse.setTime(new Date()); tempsLimiteReponse.add(Calendar.SECOND, PartieKahootService.TEMPS_REPONSE_QUESTION); - questionPartieKahoot.get().setAEtePose(true); - partieKahoot.setQuestionActuel(questionPartieKahoot.get().getQuestion()); + questionSuivante.get().setAEtePose(true); + partieKahoot.setQuestionActuel(questionSuivante.get().getQuestion()); partieKahoot.setTempsLimiteReponse(tempsLimiteReponse); - this.questionPartieKahootRepository.save(questionPartieKahoot.get()); + this.questionPartieKahootRepository.save(questionSuivante.get()); } return this.update(partieKahoot); } + public PartieKahoot afficherScore(PartieKahoot partieKahoot){ + Calendar tempsAffichacheScore = Calendar.getInstance(); + tempsAffichacheScore.setTime(new Date()); + tempsAffichacheScore.add(Calendar.SECOND, TEMPS_AFFICHAGE_SCORE); + partieKahoot.setStatus(Status.DisplayingScore); + partieKahoot.setTempsAffichageScore(tempsAffichacheScore); + + //remove question + partieKahoot.setQuestionActuel(null); + partieKahoot.setTempsLimiteReponse(null); + + return this.partieKahootRepository.save(partieKahoot); + } + public PartieKahoot maintenirAJourQuestionActuel(PartieKahoot partieKahoot){ + Calendar actualDate = Calendar.getInstance(); + actualDate.setTime(new Date()); if(partieKahoot.getStatus() == Status.Started){ - Calendar actualDate = Calendar.getInstance(); - actualDate.setTime(new Date()); - Question questionActuel = partieKahoot.getQuestionActuel(); boolean toutLeMondeARepondu = partieKahoot.getJoueurs().size() == partieKahoot.getReponses().stream().filter(partieReponse -> Objects.equals(questionActuel.getId(), partieReponse.getQuestion().getId())).count(); if(actualDate.after(partieKahoot.getTempsLimiteReponse()) || toutLeMondeARepondu){ + partieKahoot = this.afficherScore(partieKahoot); + } + } else if (partieKahoot.getStatus() == Status.DisplayingScore) { + if(actualDate.after(partieKahoot.getTempsAffichageScore())){ partieKahoot = this.questionSuivante(partieKahoot); } } diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql index cc3c95b..001f284 100644 --- a/SpringBootProject/src/main/resources/schema.sql +++ b/SpringBootProject/src/main/resources/schema.sql @@ -128,7 +128,8 @@ CREATE TABLE Partie( CREATE TABLE PartieKahoot( idPartie integer PRIMARY KEY REFERENCES Partie(id), idQuestionActuel integer REFERENCES Question(id), - tempsLimiteReponse TIMESTAMP + tempsLimiteReponse TIMESTAMP, + tempsAffichageScore TIMESTAMP ); -- JOUEUR