Ajout de la javadoc
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user