From bb9f1caee64d4ab83b367e034ce8d28a056b0fc4 Mon Sep 17 00:00:00 2001 From: kmitresse Date: Thu, 21 Mar 2024 14:16:50 +0100 Subject: [PATCH] feat: dev-web - update pojo and database schema --- S2/DevWeb/Projet/mysql/init.sql | 3 + .../src/main/java/uppa/project/pojo/Game.java | 81 ++++++++++++++++- .../main/java/uppa/project/pojo/Player.java | 14 ++- .../src/main/java/uppa/project/pojo/User.java | 88 +++++++++++++++++++ 4 files changed, 183 insertions(+), 3 deletions(-) diff --git a/S2/DevWeb/Projet/mysql/init.sql b/S2/DevWeb/Projet/mysql/init.sql index 92f7c55..1edbdad 100644 --- a/S2/DevWeb/Projet/mysql/init.sql +++ b/S2/DevWeb/Projet/mysql/init.sql @@ -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) ); diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Game.java b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Game.java index faf84a9..413eb40 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Game.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Game.java @@ -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 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 players) { + public Game(BigDecimal id, Date createdAt, Difficulty difficulty, int nbRounds, int nbColors, int nbValuesPerColor, Set 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); diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Player.java b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Player.java index c36ee44..1a7a4b5 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Player.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/Player.java @@ -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); diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/User.java b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/User.java index 1bbe4b5..bd2c374 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/User.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/User.java @@ -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());