ajout gestion initiation score

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

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

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

@ -1,10 +1,13 @@
package fr.iut.sciencequest.sae.dto.partieKahoot; package fr.iut.sciencequest.sae.dto.partieKahoot;
import fr.iut.sciencequest.sae.dto.scorePartieJoueur.ScorePartieKahootJoueurDTO;
import fr.iut.sciencequest.sae.entities.Status; import fr.iut.sciencequest.sae.entities.Status;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.*; import lombok.*;
import org.springframework.hateoas.RepresentationModel; import org.springframework.hateoas.RepresentationModel;
import java.util.List;
@Data @Data
@Builder @Builder
@ -14,4 +17,6 @@ import org.springframework.hateoas.RepresentationModel;
public class PartieKahootStatusDTO extends RepresentationModel<PartieKahootStatusDTO> { public class PartieKahootStatusDTO extends RepresentationModel<PartieKahootStatusDTO> {
@NotNull @NotNull
private Status status; 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.Fetch;
import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.FetchMode;
import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Data @Data
@ -26,8 +28,11 @@ public class Joueur {
@JsonBackReference @JsonBackReference
@ManyToOne @ManyToOne
@JoinColumn(name = "idpartie") @JoinColumn(name = "idpartieencours")
@Fetch(FetchMode.JOIN) @Fetch(FetchMode.JOIN)
@EqualsAndHashCode.Exclude @EqualsAndHashCode.Exclude
private Partie partie; private Partie partieEnCours;
@OneToMany(mappedBy = "joueur")
private List<ScorePartieKahootJoueur> scores;
} }

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

@ -7,7 +7,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List; import java.util.List;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -31,4 +30,7 @@ public class PartieKahoot extends Partie {
inverseJoinColumns = @JoinColumn(name="idquestion") inverseJoinColumns = @JoinColumn(name="idquestion")
) )
private List<Question> questions; 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 ThematiqueSelectionnee CASCADE;
DROP TABLE IF EXISTS PartieKahoot CASCADE; DROP TABLE IF EXISTS PartieKahoot CASCADE;
DROP TABLE IF EXISTS QuestionPartieKahoot CASCADE; DROP TABLE IF EXISTS QuestionPartieKahoot CASCADE;
DROP TABLE IF EXISTS ScorePartieKahootjoueur CASCADE;
DROP TABLE IF EXISTS Difficulte; DROP TABLE IF EXISTS Difficulte;
@ -133,7 +134,7 @@ CREATE TABLE PartieKahoot(
CREATE TABLE Joueur( CREATE TABLE Joueur(
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
idPartie integer REFERENCES Partie(id), idPartieEnCours integer REFERENCES Partie(id),
pseudo varchar(255) NOT NULL UNIQUE pseudo varchar(255) NOT NULL UNIQUE
); );
@ -178,6 +179,15 @@ CREATE TABLE QuestionPartieKahoot(
PRIMARY KEY (idPartieKahoot, idQuestion) 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 -- TRIGGERS
@ -249,7 +259,7 @@ INSERT INTO Partie(codeInvitation, idJeu, idDifficulte, status) VALUES ('abcde',
INSERT INTO PartieKahoot(idPartie) VALUES (1); INSERT INTO PartieKahoot(idPartie) VALUES (1);
-- Utilisateurs -- 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'); INSERT INTO Utilisateur(idJoueur,email,password) VALUES (1, 'joueur','$2y$10$juGnlWC9cS19popEKLZsYeir0Jl39k6hDl0dpaCix00FDcdiEbtmS');
-- mdp = test -- mdp = test

Loading…
Cancel
Save