ajout gestion initiation score

Springboot
Victor SOULIER 1 year ago
parent 504204e892
commit 161ae36542

@ -1,12 +1,12 @@
package fr.iut.sciencequest.sae.controllers;
import fr.iut.sciencequest.sae.assemblers.PartieModelAssembler;
import fr.iut.sciencequest.sae.controllers.request.PartieAddJoueurRequest;
import fr.iut.sciencequest.sae.controllers.request.PartieRequest;
import fr.iut.sciencequest.sae.dto.partieKahoot.PartieKahootDTO;
import fr.iut.sciencequest.sae.dto.partieKahoot.PartieKahootStatusDTO;
import fr.iut.sciencequest.sae.entities.*;
import fr.iut.sciencequest.sae.exceptions.partie.PartyAlreadyStartedException;
import fr.iut.sciencequest.sae.repositories.ScorePartieKahootJoueurRepository;
import fr.iut.sciencequest.sae.services.*;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
@ -22,7 +22,7 @@ import java.util.List;
@AllArgsConstructor
@RequestMapping("/api/v1/partie/kahoot")
public class PartieKahootController {
private final PartieModelAssembler partieModelAssembler;
private final ScorePartieKahootJoueurRepository scorePartieKahootJoueurRepository;
private final PartieKahootService partieKahootService;
private final JoueurService joueurService;
private final QuestionService questionService;
@ -39,9 +39,8 @@ public class PartieKahootController {
@ResponseStatus(HttpStatus.CREATED)
public PartieKahootDTO createPartie(@RequestBody @Valid PartieRequest request) {
PartieKahoot partie = new PartieKahoot();
partie.setJoueurs(List.of(this.joueurService.findById(request.getIdJoueur())));
Joueur joueur = this.joueurService.findById(request.getIdJoueur());
partie.setJoueurs(List.of(joueur));
partie.setThematiques(new ArrayList<>());
for(int idThematique: request.getThematiques()){
partie.getThematiques().add(this.thematiqueService.findById(idThematique));
@ -52,6 +51,11 @@ public class PartieKahootController {
partie.setQuestions(this.questionService.getRandomQuestions(1, partie.getThematiques(), partie.getDifficulte()));
partie = this.partieKahootService.create(partie);
ScorePartieKahootJoueur score = new ScorePartieKahootJoueur();
score.setId(new ScorePartieKahootJoueurKey(joueur.getId(), partie.getId()));
score.setJoueur(joueur);
score.setPartie(partie);
this.scorePartieKahootJoueurRepository.save(score);
return this.modelMapper.map(partie, PartieKahootDTO.class);
}
@ -62,6 +66,10 @@ public class PartieKahootController {
PartieKahoot partie = this.partieKahootService.getPartieKahootByIdOrCodeInvitation(codeInvitation);
if(!partie.getStatus().equals(Status.Pending)) throw new PartyAlreadyStartedException();
if(!partie.getJoueurs().contains(joueur)){
ScorePartieKahootJoueur score = new ScorePartieKahootJoueur();
score.setPartie(partie);
score.setJoueur(joueur);
partie.getScores().add(score);
partie.getJoueurs().add(joueur);
}
return this.modelMapper.map(this.partieKahootService.update(partie), PartieKahootDTO.class);
@ -75,7 +83,7 @@ public class PartieKahootController {
throw new PartyAlreadyStartedException();
}
partieKahoot.setStatus(Status.Started);
this.partieKahootService.update(partieKahoot);
partieKahoot = this.partieKahootService.update(partieKahoot);
return this.modelMapper.map(partieKahoot, PartieKahootStatusDTO.class);
}

@ -22,5 +22,5 @@ public class JoueurDTO extends RepresentationModel<JoueurDTO> {
@NotBlank
private String pseudo;
private PartieDTO partie;
private PartieDTO partieEnCours;
}

@ -1,10 +1,13 @@
package fr.iut.sciencequest.sae.dto.partieKahoot;
import fr.iut.sciencequest.sae.dto.scorePartieJoueur.ScorePartieKahootJoueurDTO;
import fr.iut.sciencequest.sae.entities.Status;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import org.springframework.hateoas.RepresentationModel;
import java.util.List;
@Data
@Builder
@ -14,4 +17,6 @@ import org.springframework.hateoas.RepresentationModel;
public class PartieKahootStatusDTO extends RepresentationModel<PartieKahootStatusDTO> {
@NotNull
private Status status;
private List<ScorePartieKahootJoueurDTO> scores;
}

@ -0,0 +1,18 @@
package fr.iut.sciencequest.sae.dto.scorePartieJoueur;
import fr.iut.sciencequest.sae.dto.joueur.JoueurSimpleDTO;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import org.springframework.hateoas.RepresentationModel;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class ScorePartieKahootJoueurDTO extends RepresentationModel<ScorePartieKahootJoueurDTO> {
@NotNull
private JoueurSimpleDTO joueur;
private Integer score;
}

@ -10,6 +10,8 @@ import lombok.NoArgsConstructor;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Data
@ -26,8 +28,11 @@ public class Joueur {
@JsonBackReference
@ManyToOne
@JoinColumn(name = "idpartie")
@JoinColumn(name = "idpartieencours")
@Fetch(FetchMode.JOIN)
@EqualsAndHashCode.Exclude
private Partie partie;
private Partie partieEnCours;
@OneToMany(mappedBy = "joueur")
private List<ScorePartieKahootJoueur> scores;
}

@ -25,7 +25,7 @@ public class Partie {
@JsonManagedReference
@OneToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "idpartie")
@JoinColumn(name = "idpartieencours")
private List<Joueur> joueurs;
@Column(name = "datecreation") //default value : see Schema.sql

@ -7,7 +7,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@ -31,4 +30,7 @@ public class PartieKahoot extends Partie {
inverseJoinColumns = @JoinColumn(name="idquestion")
)
private List<Question> questions;
@OneToMany(mappedBy = "partie", fetch = FetchType.EAGER)
private List<ScorePartieKahootJoueur> scores;
}

@ -0,0 +1,31 @@
package fr.iut.sciencequest.sae.entities;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(name="scorepartiekahootjoueur")
public class ScorePartieKahootJoueur {
@EmbeddedId
private ScorePartieKahootJoueurKey id = new ScorePartieKahootJoueurKey();
@ManyToOne
@MapsId("idJoueur")
@JoinColumn(name = "idjoueur")
private Joueur joueur;
@ManyToOne
@MapsId("idPartie")
@JoinColumn(name="idpartie")
private Partie partie;
private Integer score = 0;
}

@ -0,0 +1,22 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Embeddable
public class ScorePartieKahootJoueurKey implements Serializable {
@Column(name="idjoueur")
private Integer idJoueur;
@Column(name="idpartie")
private Integer idPartie;
}

@ -0,0 +1,9 @@
package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.ScorePartieKahootJoueur;
import fr.iut.sciencequest.sae.entities.ScorePartieKahootJoueurKey;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ScorePartieKahootJoueurRepository extends CrudRepository<ScorePartieKahootJoueur, ScorePartieKahootJoueurKey> {}

@ -15,6 +15,7 @@ DROP TABLE IF EXISTS Thematique CASCADE;
DROP TABLE IF EXISTS ThematiqueSelectionnee CASCADE;
DROP TABLE IF EXISTS PartieKahoot CASCADE;
DROP TABLE IF EXISTS QuestionPartieKahoot CASCADE;
DROP TABLE IF EXISTS ScorePartieKahootjoueur CASCADE;
DROP TABLE IF EXISTS Difficulte;
@ -133,7 +134,7 @@ CREATE TABLE PartieKahoot(
CREATE TABLE Joueur(
id SERIAL PRIMARY KEY,
idPartie integer REFERENCES Partie(id),
idPartieEnCours integer REFERENCES Partie(id),
pseudo varchar(255) NOT NULL UNIQUE
);
@ -178,6 +179,15 @@ CREATE TABLE QuestionPartieKahoot(
PRIMARY KEY (idPartieKahoot, idQuestion)
);
-- ScorePartieKahootjoueur
CREATE TABLE ScorePartieKahootjoueur(
idJoueur integer REFERENCES Joueur(id),
idPartie integer REFERENCES PartieKahoot(idPartie),
score integer,
PRIMARY KEY (idJoueur, idPartie)
);
-- TRIGGERS
@ -249,7 +259,7 @@ INSERT INTO Partie(codeInvitation, idJeu, idDifficulte, status) VALUES ('abcde',
INSERT INTO PartieKahoot(idPartie) VALUES (1);
-- Utilisateurs
INSERT INTO Joueur(pseudo, idPartie) VALUES ('moi, le meilleur joueur du monde', 1); --id = 1
INSERT INTO Joueur(pseudo, idPartieEnCours) VALUES ('moi, le meilleur joueur du monde', 1); --id = 1
INSERT INTO Utilisateur(idJoueur,email,password) VALUES (1, 'joueur','$2y$10$juGnlWC9cS19popEKLZsYeir0Jl39k6hDl0dpaCix00FDcdiEbtmS');
-- mdp = test

Loading…
Cancel
Save