ajout temporisation pour score avec etat
continuous-integration/drone/push Build is passing Details

Springboot
Victor SOULIER 1 year ago
parent 2e523e7161
commit 78b0991962

@ -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);

@ -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<QuestionPartieKahoot> questions;

@ -3,5 +3,6 @@ package fr.iut.sciencequest.sae.entities;
public enum Status {
Pending,
Started,
DisplayingScore,
Ended
}

@ -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> questionPartieKahoot = partieKahoot.getQuestions().stream().filter(q -> !q.isAEtePose()).findFirst();
if (questionPartieKahoot.isEmpty()){
Optional<QuestionPartieKahoot> 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);
}
}

@ -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

Loading…
Cancel
Save