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.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<PlayerScore> getAllScores(long seriesId) throws SQLException {
List<PlayerScore> 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<String> getAllSeries() {
List<String> 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<String> getSeriesByDateRange(Date startDate, Date endDate) {
List<String> 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<String> getSeriesByDateRangePaginated(Date startDate, Date endDate,
int page, int itemsPerPage,
boolean onlyDeveloperCreated) {
List<String> 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<String> 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<String> 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<PlayerScore> getTopPlayers() throws SQLException {
List<PlayerScore> 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