From 2a2b84c55b4c60011b0ffadc84d03053a6a02205 Mon Sep 17 00:00:00 2001 From: visoulier Date: Sun, 31 Mar 2024 18:35:04 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20m=C3=A9thode=20question=20suivente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/PartieKahootController.java | 9 ++--- .../sae/entities/QuestionPartieKahoot.java | 3 ++ .../sae/services/PartieKahootService.java | 33 +++++++++++++++++++ .../src/main/resources/schema.sql | 1 + 4 files changed, 40 insertions(+), 6 deletions(-) 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 92af417..529be47 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 @@ -102,17 +102,14 @@ public class PartieKahootController { @ResponseStatus(HttpStatus.OK) public PartieKahootStatusDTO demarrerPartie(@PathVariable String codeInvitation){ PartieKahoot partieKahoot = this.partieKahootService.getPartieKahootByIdOrCodeInvitation(codeInvitation); - Calendar tempsLimiteReponse = Calendar.getInstance(); - tempsLimiteReponse.setTime(new Date()); - tempsLimiteReponse.add(Calendar.MINUTE, 1); + if(partieKahoot.getStatus() == Status.Started){ throw new PartyAlreadyStartedException(); } partieKahoot.setStatus(Status.Started); - partieKahoot.setQuestionActuel(partieKahoot.getQuestions().getFirst().getQuestion()); - partieKahoot.setTempsLimiteReponse(tempsLimiteReponse); - partieKahoot = this.partieKahootService.update(partieKahoot); + + partieKahoot = this.partieKahootService.questionSuivante(partieKahoot); return this.modelMapper.map(partieKahoot, PartieKahootStatusDTO.class); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/QuestionPartieKahoot.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/QuestionPartieKahoot.java index d70595c..21b1530 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/QuestionPartieKahoot.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/QuestionPartieKahoot.java @@ -28,4 +28,7 @@ public class QuestionPartieKahoot { @MapsId("idPartieKahoot") @JoinColumn(name="idpartiekahoot") private PartieKahoot partie; + + @Column(name = "aetepose") + private boolean aEtePose = false; } 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 70f9e0e..30b5c89 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 @@ -1,16 +1,26 @@ package fr.iut.sciencequest.sae.services; import fr.iut.sciencequest.sae.entities.PartieKahoot; +import fr.iut.sciencequest.sae.entities.Question; +import fr.iut.sciencequest.sae.entities.QuestionPartieKahoot; +import fr.iut.sciencequest.sae.entities.Status; import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException; import fr.iut.sciencequest.sae.exceptions.notFound.PartieKahootNotFoundException; +import fr.iut.sciencequest.sae.exceptions.partie.PartyNotStartedException; import fr.iut.sciencequest.sae.repositories.*; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Calendar; +import java.util.Date; +import java.util.Optional; + @AllArgsConstructor @Service public class PartieKahootService { + private static final int TEMPS_REPONSE_QUESTION = 60; //secondes private final PartieKahootRepository partieKahootRepository; + private final QuestionPartieKahootRepository questionPartieKahootRepository; private final PartieRepository partieRepository; public PartieKahoot findById(int id) { @@ -54,4 +64,27 @@ public class PartieKahootService { return this.findById(savedPartie.getId()); } + public PartieKahoot questionSuivante(PartieKahoot partieKahoot){ + if(partieKahoot.getStatus() != Status.Started){ + throw new PartyNotStartedException(); + } + Optional questionPartieKahoot = partieKahoot.getQuestions().stream().filter(q -> !q.isAEtePose()).findFirst(); + if (questionPartieKahoot.isEmpty()){ + partieKahoot.setStatus(Status.Ended); + partieKahoot.setQuestionActuel(null); + partieKahoot.setTempsLimiteReponse(null); + }else{ + Calendar tempsLimiteReponse = Calendar.getInstance(); + tempsLimiteReponse.setTime(new Date()); + tempsLimiteReponse.add(Calendar.SECOND, PartieKahootService.TEMPS_REPONSE_QUESTION); + + questionPartieKahoot.get().setAEtePose(true); + partieKahoot.setQuestionActuel(questionPartieKahoot.get().getQuestion()); + partieKahoot.setTempsLimiteReponse(tempsLimiteReponse); + + this.questionPartieKahootRepository.save(questionPartieKahoot.get()); + } + return this.update(partieKahoot); + } + } diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql index c79b41b..b0cf062 100644 --- a/SpringBootProject/src/main/resources/schema.sql +++ b/SpringBootProject/src/main/resources/schema.sql @@ -178,6 +178,7 @@ CREATE TABLE ThematiqueSelectionnee( CREATE TABLE QuestionPartieKahoot( idPartieKahoot integer REFERENCES PartieKahoot(idPartie), idQuestion integer REFERENCES Question(id), + aetepose boolean DEFAULT false, PRIMARY KEY (idPartieKahoot, idQuestion) );