Ajout de la javadoc

This commit is contained in:
2024-12-06 23:17:16 +01:00
parent 894e430efc
commit 8c483b35c3

View File

@@ -8,22 +8,49 @@ import java.sql.Statement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Date; 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 { 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"; 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"; private static final String LOGIN = "stiti";
/**
* Mot de passe de connexion à la base de données
*/
private static final String PASSWORD = "stiti1234"; 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; 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 { public Database() throws SQLException {
try { 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() { public Connection getDatabase() {
return this.database; return this.database;
} }
@@ -65,10 +95,15 @@ public class Database {
seed = rs.getLong("series_id"); seed = rs.getLong("series_id");
} }
} }
return seed; 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<PlayerScore> getAllScores(long seriesId) throws SQLException { public List<PlayerScore> getAllScores(long seriesId) throws SQLException {
List<PlayerScore> allScores = new ArrayList<>(); List<PlayerScore> allScores = new ArrayList<>();
@@ -95,7 +130,11 @@ public class Database {
return allScores; 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<String> getAllSeries() { public List<String> getAllSeries() {
List<String> series = new ArrayList<>(); List<String> series = new ArrayList<>();
try { try {
@@ -112,8 +151,11 @@ public class Database {
return series; 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<String> getSeriesByDateRange(Date startDate, Date endDate) { public List<String> getSeriesByDateRange(Date startDate, Date endDate) {
List<String> series = new ArrayList<>(); List<String> series = new ArrayList<>();
try { try {
@@ -132,8 +174,15 @@ public class Database {
return series; 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; int count = 0;
try { try {
// Construire la requête SQL en fonction du filtre "created_by_developer" // 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<String> getSeriesByDateRangePaginated(Date startDate, Date endDate, public List<String> getSeriesByDateRangePaginated(Date startDate, Date endDate,
int page, int itemsPerPage, int page, int itemsPerPage,
boolean onlyDeveloperCreated) { boolean onlyDeveloperCreated) {
List<String> series = new ArrayList<>(); List<String> series = new ArrayList<>();
try { try {
String query = "SELECT name FROM Series " + String query = "SELECT name FROM Series " +
"WHERE creation_date BETWEEN ? AND ? " + "WHERE creation_date BETWEEN ? AND ? " +
(onlyDeveloperCreated ? "AND created_by_developer = TRUE " : "") + (onlyDeveloperCreated ? "AND created_by_developer = TRUE " : "") +
"ORDER BY " + "ORDER BY " +
" CASE " + " CASE " +
" WHEN name LIKE 'Série custom%' THEN CAST(REGEXP_SUBSTR(name, '[0-9]+') AS UNSIGNED) " + " WHEN name LIKE 'Série custom%' THEN CAST(REGEXP_SUBSTR(name, '[0-9]+') AS UNSIGNED) " +
" ELSE NULL " + " ELSE NULL " +
" END ASC, " + " END ASC, " +
" created_by_developer DESC, " + " created_by_developer DESC, " +
" name ASC " + " name ASC " +
"LIMIT ? OFFSET ?"; "LIMIT ? OFFSET ?";
PreparedStatement statement = this.database.prepareStatement(query); PreparedStatement statement = this.database.prepareStatement(query);
statement.setDate(1, new java.sql.Date(startDate.getTime())); statement.setDate(1, new java.sql.Date(startDate.getTime()));
statement.setDate(2, new java.sql.Date(endDate.getTime())); statement.setDate(2, new java.sql.Date(endDate.getTime()));
statement.setInt(3, itemsPerPage); statement.setInt(3, itemsPerPage);
statement.setInt(4, (page - 1) * itemsPerPage); statement.setInt(4, (page - 1) * itemsPerPage);
ResultSet resultSet = statement.executeQuery(); ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
series.add(resultSet.getString("name")); series.add(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} }
} catch (SQLException e) { return series;
e.printStackTrace();
}
return series;
}
// Optional: Method to get series within a specific number of days
public List<String> getRecentSeries(int days) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -days);
Date pastDate = calendar.getTime();
return getSeriesByDateRange(pastDate, new Date());
} }
/**
* 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 { public long getSeedByName(String name) throws SQLException {
String query = "SELECT series_id FROM Series WHERE name = " + "\'" + name + "\'" +";"; String query = "SELECT series_id FROM Series WHERE name = " + "\'" + name + "\'" +";";
long seed = -1; // Valeur par défaut si le seed n'est pas trouvé 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"); seed = rs.getLong("series_id");
} }
} }
return seed; 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 { public void addScore(long seriesId, int score) throws SQLException {
String insertQuery = "INSERT INTO Scores (series_id, score) VALUES (?, ?)"; String insertQuery = "INSERT INTO Scores (series_id, score) VALUES (?, ?)";
try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) { 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 { public void addCustomSeed(long customSeed) throws SQLException {
// Vérifier si la seed existe déjà // Vérifier si la seed existe déjà
String checkQuery = "SELECT COUNT(*) FROM Series WHERE series_id = ?"; 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) * 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 * @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<PlayerScore> getTopPlayers() throws SQLException { public List<PlayerScore> getTopPlayers() throws SQLException {
List<PlayerScore> topPlayers = new ArrayList<>(); List<PlayerScore> topPlayers = new ArrayList<>();
@@ -305,9 +366,6 @@ public class Database {
return topPlayers; 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) * 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 * @param seriesId L'ID de la série