ajout méthode question suivente

Springboot
Victor SOULIER 1 year ago
parent 28d4ac77b6
commit 2a2b84c55b

@ -102,17 +102,14 @@ public class PartieKahootController {
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public PartieKahootStatusDTO demarrerPartie(@PathVariable String codeInvitation){ public PartieKahootStatusDTO demarrerPartie(@PathVariable String codeInvitation){
PartieKahoot partieKahoot = this.partieKahootService.getPartieKahootByIdOrCodeInvitation(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){ if(partieKahoot.getStatus() == Status.Started){
throw new PartyAlreadyStartedException(); throw new PartyAlreadyStartedException();
} }
partieKahoot.setStatus(Status.Started); partieKahoot.setStatus(Status.Started);
partieKahoot.setQuestionActuel(partieKahoot.getQuestions().getFirst().getQuestion());
partieKahoot.setTempsLimiteReponse(tempsLimiteReponse); partieKahoot = this.partieKahootService.questionSuivante(partieKahoot);
partieKahoot = this.partieKahootService.update(partieKahoot);
return this.modelMapper.map(partieKahoot, PartieKahootStatusDTO.class); return this.modelMapper.map(partieKahoot, PartieKahootStatusDTO.class);
} }

@ -28,4 +28,7 @@ public class QuestionPartieKahoot {
@MapsId("idPartieKahoot") @MapsId("idPartieKahoot")
@JoinColumn(name="idpartiekahoot") @JoinColumn(name="idpartiekahoot")
private PartieKahoot partie; private PartieKahoot partie;
@Column(name = "aetepose")
private boolean aEtePose = false;
} }

@ -1,16 +1,26 @@
package fr.iut.sciencequest.sae.services; package fr.iut.sciencequest.sae.services;
import fr.iut.sciencequest.sae.entities.PartieKahoot; 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.DuplicatedIdException;
import fr.iut.sciencequest.sae.exceptions.notFound.PartieKahootNotFoundException; import fr.iut.sciencequest.sae.exceptions.notFound.PartieKahootNotFoundException;
import fr.iut.sciencequest.sae.exceptions.partie.PartyNotStartedException;
import fr.iut.sciencequest.sae.repositories.*; import fr.iut.sciencequest.sae.repositories.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Calendar;
import java.util.Date;
import java.util.Optional;
@AllArgsConstructor @AllArgsConstructor
@Service @Service
public class PartieKahootService { public class PartieKahootService {
private static final int TEMPS_REPONSE_QUESTION = 60; //secondes
private final PartieKahootRepository partieKahootRepository; private final PartieKahootRepository partieKahootRepository;
private final QuestionPartieKahootRepository questionPartieKahootRepository;
private final PartieRepository partieRepository; private final PartieRepository partieRepository;
public PartieKahoot findById(int id) { public PartieKahoot findById(int id) {
@ -54,4 +64,27 @@ public class PartieKahootService {
return this.findById(savedPartie.getId()); return this.findById(savedPartie.getId());
} }
public PartieKahoot questionSuivante(PartieKahoot partieKahoot){
if(partieKahoot.getStatus() != Status.Started){
throw new PartyNotStartedException();
}
Optional<QuestionPartieKahoot> 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);
}
} }

@ -178,6 +178,7 @@ CREATE TABLE ThematiqueSelectionnee(
CREATE TABLE QuestionPartieKahoot( CREATE TABLE QuestionPartieKahoot(
idPartieKahoot integer REFERENCES PartieKahoot(idPartie), idPartieKahoot integer REFERENCES PartieKahoot(idPartie),
idQuestion integer REFERENCES Question(id), idQuestion integer REFERENCES Question(id),
aetepose boolean DEFAULT false,
PRIMARY KEY (idPartieKahoot, idQuestion) PRIMARY KEY (idPartieKahoot, idQuestion)
); );

Loading…
Cancel
Save