feat: dev-web - update pojo and database schema

This commit is contained in:
kmitresse
2024-03-21 14:16:50 +01:00
parent 7ea5af9751
commit bb9f1caee6
4 changed files with 183 additions and 3 deletions
+3
View File
@@ -19,6 +19,9 @@ CREATE TABLE IF NOT EXISTS game
id INT NOT NULL AUTO_INCREMENT,
difficulty VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
nb_rounds INT NOT NULL,
nb_colors INT NOT NULL,
nb_values_per_color INT NOT NULL,
PRIMARY KEY (id)
);
@@ -49,6 +49,15 @@ public class Game implements Serializable {
@Enumerated(EnumType.STRING)
private Difficulty difficulty;
@Column(name = "nb_rounds")
private int nbRounds;
@Column(name = "nb_colors")
private int nbColors;
@Column(name = "nb_values_per_color")
private int nbValuesPerColor;
@OneToMany(mappedBy = "game", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Player> players;
@@ -63,9 +72,15 @@ public class Game implements Serializable {
*
* @param difficulty la difficulté de la partie
* @see Difficulty
* @param nbRounds le nombre de tours de la partie
* @param nbColors le nombre de couleurs présente dans le deck
* @param nbValuesPerColor le nombre de valeurs par couleur
*/
public Game(Difficulty difficulty) {
public Game(Difficulty difficulty, int nbRounds, int nbColors, int nbValuesPerColor) {
this.difficulty = difficulty;
this.nbRounds = nbRounds;
this.nbColors = nbColors;
this.nbValuesPerColor = nbValuesPerColor;
}
/**
@@ -74,12 +89,18 @@ public class Game implements Serializable {
* @param id l'identifiant de la partie
* @param createdAt la date de création de la partie
* @param difficulty la difficulté de la partie
* @param nbRounds le nombre de tours de la partie
* @param nbColors le nombre de couleurs présente dans le deck
* @param nbValuesPerColor le nombre de valeurs par couleur
* @param players les joueurs de la partie
*/
public Game(BigDecimal id, Date createdAt, Difficulty difficulty, Set<Player> players) {
public Game(BigDecimal id, Date createdAt, Difficulty difficulty, int nbRounds, int nbColors, int nbValuesPerColor, Set<Player> players) {
this.id = id;
this.createdAt = createdAt;
this.difficulty = difficulty;
this.nbRounds = nbRounds;
this.nbColors = nbColors;
this.nbValuesPerColor = nbValuesPerColor;
this.players = players;
}
@@ -117,6 +138,48 @@ public class Game implements Serializable {
this.difficulty = difficulty;
}
/**
* @return le nombre de tours de la partie
*/
public int getNbRounds() {
return nbRounds;
}
/**
* @param nbRounds le nouveau nombre de tours de la partie
*/
public void setNbRounds(int nbRounds) {
this.nbRounds = nbRounds;
}
/**
* @return le nombre de couleurs présente dans le deck
*/
public int getNbColors() {
return nbColors;
}
/**
* @param nbColors le nouveau nombre de couleurs présente dans le deck
*/
public void setNbColors(int nbColors) {
this.nbColors = nbColors;
}
/**
* @return le nombre de valeurs par couleur
*/
public int getNbValuesPerColor() {
return nbValuesPerColor;
}
/**
* @param nbValuesPerColor le nouveau nombre de valeurs par couleur
*/
public void setNbValuesPerColor(int nbValuesPerColor) {
this.nbValuesPerColor = nbValuesPerColor;
}
/**
* @return les joueurs de la partie
*/
@@ -133,6 +196,13 @@ public class Game implements Serializable {
this.players = players;
}
/**
* @return le nombre de joueurs de la partie
*/
public int getNbPlayers() {
return this.players.size();
}
/**
* Ajoute un joueur à la partie
*
@@ -142,6 +212,13 @@ public class Game implements Serializable {
this.players.add(player);
}
/**
* Tri des joueurs de la partie par score
*/
public void sortPlayersByScore() {
this.players.stream().sorted((p1, p2) -> p1.getScore() - p2.getScore());
}
@Override
public String toString() {
return String.format("Game{id=%s, createdAt=%s, players=%s}", id.toString(), createdAt, players);
@@ -216,6 +216,13 @@ public class Player implements Serializable {
rightClickCount++;
}
/**
* @return le pourcentage de clics corrects du joueur sur la partie courante
*/
public double getRatioRightClick() {
return (double) rightClickCount * 100 / clickCount;
}
/**
* @return le nombre de clics rapides
*/
@@ -239,7 +246,12 @@ public class Player implements Serializable {
rapidClickCount++;
}
// public void getRatioRightCl
/**
* @return le pourcentage de clics rapides du joueur sur la partie courante
*/
public double getRatioRapidClick() {
return (double) rapidClickCount * 100 / clickCount;
}
@Override
public String toString() {
return String.format("Player{id=%s, game=%s, user=%s, score=%d, winner=%b, clickCount=%d, rightClickCount=%d, rapidClickCount=%d}", id.toString(), game.toString(), user.toString(), score, winner, clickCount, rightClickCount, rapidClickCount);
@@ -237,6 +237,94 @@ public class User implements Serializable {
return hashedPassword != null && hashedPassword.equals(this.password);
}
/**
* Récupère le nombre de parties jouées
*
* @return le nombre de parties jouées
*/
public int getNbPlayedGame() {
return playedGame.size();
}
/**
* Récupère le nombre de parties gagnées
*
* @return le nombre de parties gagnées
*/
public int getNbWin(){
int nbWin = 0;
for (Player p : playedGame) {
if (p.isWinner()) nbWin++;
}
return nbWin;
}
/**
* Récupère le pourcentage de victoire
*
* @return le pourcentage de victoire
*/
public double getWinRate(){
return (double) getNbWin() * 100 / getNbPlayedGame();
}
/**
* Récupère le nombre total de clics toute partie confondue
*
* @return le nombre total de clics
*/
public int getNbClicks(){
int nbClicks = 0;
for (Player p : playedGame) {
nbClicks += p.getClickCount();
}
return nbClicks;
}
/**
* Récupère le nombre total de clics réussi toute partie confondue
*
* @return le nombre total de clics réussi
*/
public int getNbRightClicks(){
int nbRightClicks = 0;
for (Player p : playedGame) {
nbRightClicks += p.getRightClickCount();
}
return nbRightClicks;
}
/**
* Récupère le pourcentage de clics réussi
*
* @return le pourcentage de clics réussi
*/
public double getRightClickPercentRate(){
return (double) getNbRightClicks() * 100 / getNbClicks();
}
/**
* Récupère le nombre total de clics les plus rapides toute partie confondue
*
* @return le nombre total de clics les plus rapides
*/
public int getNbRapidClicks(){
int nbRapidClicks = 0;
for (Player p : playedGame) {
nbRapidClicks += p.getRapidClickCount();
}
return nbRapidClicks;
}
/**
* Récupère le pourcentage de clics les plus rapides
*
* @return le pourcentage de clics les plus rapides
*/
public double getRapidClickPercentRate(){
return (double) getNbRapidClicks() * 100 / getNbClicks();
}
@Override
public String toString() {
return String.format("User{id=%s, username='%s', birth=%s, gender=%s}", id.toString(), username, birth.toString(), gender.toString());