From 8c483b35c3331c43ce6f2ee39d356f97d5192b49 Mon Sep 17 00:00:00 2001 From: Lenny FOULOU Date: Fri, 6 Dec 2024 23:17:16 +0100 Subject: [PATCH] Ajout de la javadoc --- .../dorfromantik/utils/Database.java | 166 ++++++++++++------ 1 file changed, 112 insertions(+), 54 deletions(-) diff --git a/src/fr/monkhanny/dorfromantik/utils/Database.java b/src/fr/monkhanny/dorfromantik/utils/Database.java index bb9c27d..8cbc1c7 100644 --- a/src/fr/monkhanny/dorfromantik/utils/Database.java +++ b/src/fr/monkhanny/dorfromantik/utils/Database.java @@ -8,22 +8,49 @@ import java.sql.Statement; import java.sql.ResultSet; import java.sql.PreparedStatement; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.List; import java.util.Date; +/** + * Classe pour gérer la connexion à la base de données et effectuer des opérations de lecture et d'écriture + * + * Cette classe permet de se connecter à une base de données MariaDB et d'effectuer des opérations de lecture et d'écriture. + * + * @version 1.0 + * @author Moncef STITI + * @see PlayerScore + * @see SQLException + * @see Connection + * @see DriverManager + * @see Statement + * @see ResultSet + * @see PreparedStatement + */ public class Database { - // Chargement des variables d'environnement + /** + * URL de connexion à la base de données + */ private static final String URL = "jdbc:mariadb://dwarves.iut-fbleau.fr/stiti"; + + /** + * Identifiants de connexion à la base de données + */ private static final String LOGIN = "stiti"; + + /** + * Mot de passe de connexion à la base de données + */ private static final String PASSWORD = "stiti1234"; - // Variable de passerelle entre le programme et la base de données + /** + * Connexion à la base de données + */ private Connection database; /** - * Ouvre la connexion avec la base de données + * Constructeur pour initialiser la connexion à la base de données + * @throws SQLException Si une erreur se produit lors de la connexion à la base de données */ public Database() throws SQLException { try { @@ -43,7 +70,10 @@ public class Database { } } - + /** + * Récupère la connexion à la base de données + * @return La connexion à la base de données + */ public Connection getDatabase() { return this.database; } @@ -65,10 +95,15 @@ public class Database { seed = rs.getLong("series_id"); } } - return seed; } + /** + * Récupère le nom de la série correspondant au mode de jeu (series_id) + * @param seriesId L'ID de la série (mode de jeu) + * @return Le nom de la série associée à ce mode de jeu + * @throws SQLException Si une erreur se produit lors de la récupération du nom de la série + */ public List getAllScores(long seriesId) throws SQLException { List allScores = new ArrayList<>(); @@ -95,7 +130,11 @@ public class Database { return allScores; } - + /** + * Récupère toutes les séries de la base de données + * @return Les séries stockées dans la base de données + * @throws SQLException Si une erreur se produit lors de la récupération des séries + */ public List getAllSeries() { List series = new ArrayList<>(); try { @@ -112,8 +151,11 @@ public class Database { return series; } - - // New method to get series filtered by date range + /** + * Récupère les séries dans une plage de dates + * @return La liste des séries créées dans la plage de dates spécifiée + * @throws SQLException Si une erreur se produit lors de la récupération des séries + */ public List getSeriesByDateRange(Date startDate, Date endDate) { List series = new ArrayList<>(); try { @@ -132,8 +174,15 @@ public class Database { return series; } - // New method to count series within a date range - public int countSeriesByDateRange(Date startDate, Date endDate, boolean onlyDeveloperCreated) { + /** + * Compte le nombre de séries créées dans une plage de dates + * @param startDate Date de début + * @param endDate Date de fin + * @param onlyDeveloperCreated Indique si seules les séries créées par les développeurs doivent être comptées + * @return Le nombre de séries créées dans la plage de dates spécifiée + * @throws SQLException Si une erreur se produit lors de la récupération du nombre de séries + */ + public int countSeriesByDateRange(Date startDate, Date endDate, boolean onlyDeveloperCreated) { int count = 0; try { // Construire la requête SQL en fonction du filtre "created_by_developer" @@ -157,50 +206,54 @@ public class Database { } - // New method to get paginated series within a date range + /** + * Récupère les séries dans une plage de dates, paginées + * @param startDate Date de début + * @param endDate Date de fin + * @param page Numéro de page + * @param itemsPerPage Nombre d'éléments par page + * @param onlyDeveloperCreated Indique si seules les séries créées par les développeurs doivent être récupérées + * @return La liste des séries créées dans la plage de dates spécifiée, paginée + * @throws SQLException Si une erreur se produit lors de la récupération des séries + */ public List getSeriesByDateRangePaginated(Date startDate, Date endDate, int page, int itemsPerPage, boolean onlyDeveloperCreated) { - List series = new ArrayList<>(); - try { - String query = "SELECT name FROM Series " + - "WHERE creation_date BETWEEN ? AND ? " + - (onlyDeveloperCreated ? "AND created_by_developer = TRUE " : "") + - "ORDER BY " + - " CASE " + - " WHEN name LIKE 'Série custom%' THEN CAST(REGEXP_SUBSTR(name, '[0-9]+') AS UNSIGNED) " + - " ELSE NULL " + - " END ASC, " + - " created_by_developer DESC, " + - " name ASC " + - "LIMIT ? OFFSET ?"; - - PreparedStatement statement = this.database.prepareStatement(query); - statement.setDate(1, new java.sql.Date(startDate.getTime())); - statement.setDate(2, new java.sql.Date(endDate.getTime())); - statement.setInt(3, itemsPerPage); - statement.setInt(4, (page - 1) * itemsPerPage); - - ResultSet resultSet = statement.executeQuery(); - while (resultSet.next()) { - series.add(resultSet.getString("name")); + List series = new ArrayList<>(); + try { + String query = "SELECT name FROM Series " + + "WHERE creation_date BETWEEN ? AND ? " + + (onlyDeveloperCreated ? "AND created_by_developer = TRUE " : "") + + "ORDER BY " + + " CASE " + + " WHEN name LIKE 'Série custom%' THEN CAST(REGEXP_SUBSTR(name, '[0-9]+') AS UNSIGNED) " + + " ELSE NULL " + + " END ASC, " + + " created_by_developer DESC, " + + " name ASC " + + "LIMIT ? OFFSET ?"; + + PreparedStatement statement = this.database.prepareStatement(query); + statement.setDate(1, new java.sql.Date(startDate.getTime())); + statement.setDate(2, new java.sql.Date(endDate.getTime())); + statement.setInt(3, itemsPerPage); + statement.setInt(4, (page - 1) * itemsPerPage); + + ResultSet resultSet = statement.executeQuery(); + while (resultSet.next()) { + series.add(resultSet.getString("name")); + } + } catch (SQLException e) { + e.printStackTrace(); } - } catch (SQLException e) { - e.printStackTrace(); - } - return series; -} - - - // Optional: Method to get series within a specific number of days - public List getRecentSeries(int days) { - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.DAY_OF_YEAR, -days); - Date pastDate = calendar.getTime(); - - return getSeriesByDateRange(pastDate, new Date()); + return series; } + /** + * Récupère la seed correspondant au nom de la série + * @return La seed associée au nom de la série + * @throws SQLException Si une erreur se produit lors de la récupération de la seed + */ public long getSeedByName(String name) throws SQLException { String query = "SELECT series_id FROM Series WHERE name = " + "\'" + name + "\'" +";"; long seed = -1; // Valeur par défaut si le seed n'est pas trouvé @@ -211,10 +264,13 @@ public class Database { seed = rs.getLong("series_id"); } } - return seed; } + /** + * Ajoute un score à une série + * @throws SQLException Si une erreur se produit lors de l'ajout du score + */ public void addScore(long seriesId, int score) throws SQLException { String insertQuery = "INSERT INTO Scores (series_id, score) VALUES (?, ?)"; try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) { @@ -227,7 +283,11 @@ public class Database { } } - + /** + * Ajoute une seed personnalisée à la base de données + * @param customSeed La seed personnalisée à ajouter + * @throws SQLException Si une erreur se produit lors de l'ajout de la seed + */ public void addCustomSeed(long customSeed) throws SQLException { // Vérifier si la seed existe déjà String checkQuery = "SELECT COUNT(*) FROM Series WHERE series_id = ?"; @@ -281,6 +341,7 @@ public class Database { /** * Récupère les meilleurs scores des joueurs (limite de 10 scores) * @return une liste de résultats sous forme de tableau contenant le score et la date formatée + * @throws SQLException Si une erreur se produit lors de la récupération des scores */ public List getTopPlayers() throws SQLException { List topPlayers = new ArrayList<>(); @@ -305,9 +366,6 @@ public class Database { return topPlayers; } - - - /** * Récupère les scores d'une série spécifique, triés en ordre décroissant (du plus élevé au plus bas) * @param seriesId L'ID de la série