Amélioration

This commit is contained in:
2024-12-05 16:02:08 +01:00
parent 7d1dbf29da
commit d7a23c63d4
4 changed files with 349 additions and 80 deletions

View File

@@ -5,11 +5,18 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
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;
import javax.swing.ImageIcon;
import fr.monkhanny.dorfromantik.gui.Reward;
public class Database {
// Chargement des variables d'environnement
@@ -85,6 +92,9 @@ public class Database {
int score = rs.getInt("score");
String seriesName = rs.getString("name"); // Nom de la série
// Créer un texte à afficher incluant le score et le nom de la série
String displayText = "Score: " + score + " | Série: " + seriesName;
// Ajouter l'objet PlayerScore à la liste avec un nom générique et le score
allScores.add(new PlayerScore(seriesName, score)); // Ajout du nom de la série
}
@@ -112,6 +122,79 @@ public class Database {
}
// New method to get series filtered by date range
public List<String> getSeriesByDateRange(Date startDate, Date endDate) {
List<String> series = new ArrayList<>();
try {
String query = "SELECT name FROM Series WHERE creation_date BETWEEN ? AND ? ORDER BY creation_date DESC";
PreparedStatement statement = this.database.prepareStatement(query);
statement.setDate(1, new java.sql.Date(startDate.getTime()));
statement.setDate(2, new java.sql.Date(endDate.getTime()));
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
series.add(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return series;
}
// New method to count series within a date range
public int countSeriesByDateRange(Date startDate, Date endDate) {
int count = 0;
try {
String query = "SELECT COUNT(*) as series_count FROM Series WHERE creation_date BETWEEN ? AND ?";
PreparedStatement statement = this.database.prepareStatement(query);
statement.setDate(1, new java.sql.Date(startDate.getTime()));
statement.setDate(2, new java.sql.Date(endDate.getTime()));
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
count = resultSet.getInt("series_count");
}
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
// New method to get paginated series within a date range
public List<String> getSeriesByDateRangePaginated(Date startDate, Date endDate,
int page, int itemsPerPage) {
List<String> series = new ArrayList<>();
try {
String query = "SELECT name FROM Series " +
"WHERE creation_date BETWEEN ? AND ? " +
"ORDER BY creation_date DESC " +
"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();
}
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());
}
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é
@@ -139,29 +222,55 @@ public class Database {
}
public void addCustomSeed(String name, long customSeed) throws SQLException {
// Vérifier si la seed existe déjà
String checkQuery = "SELECT COUNT(*) FROM Series WHERE series_id = ?";
try (PreparedStatement checkStmt = this.database.prepareStatement(checkQuery)) {
checkStmt.setLong(1, customSeed);
ResultSet rs = checkStmt.executeQuery();
if (rs.next() && rs.getInt(1) > 0) {
// la seed existe déjà
return; // Ne pas insérer si la seed existe déjà
public void addCustomSeed(long customSeed) throws SQLException {
// Vérifier si la seed existe déjà
String checkQuery = "SELECT COUNT(*) FROM Series WHERE series_id = ?";
try (PreparedStatement checkStmt = this.database.prepareStatement(checkQuery)) {
checkStmt.setLong(1, customSeed);
ResultSet rs = checkStmt.executeQuery();
if (rs.next() && rs.getInt(1) > 0) {
// La seed existe déjà
return; // Ne pas insérer si la seed existe déjà
}
}
// Trouver le plus grand numéro existant dans les noms de série
String lastSeriesQuery = "SELECT name FROM Series";
int nextId = 1; // Valeur par défaut si aucune série n'existe
try (PreparedStatement lastSeriesStmt = this.database.prepareStatement(lastSeriesQuery)) {
ResultSet rs = lastSeriesStmt.executeQuery();
while (rs.next()) {
String seriesName = rs.getString("name");
// Extraire le numéro à la fin du nom de la série
String[] parts = seriesName.split(" ");
try {
int number = Integer.parseInt(parts[parts.length - 1]);
if (number >= nextId) {
nextId = number + 1; // Incrémenter pour la nouvelle série
}
} catch (NumberFormatException e) {
// Ignorer les séries dont le nom ne suit pas le format attendu
continue;
}
}
}
// Générer le nom dynamique "Série Custom X"
String seriesName = "Série custom " + nextId;
// Insérer la nouvelle série dans la base de données
String insertQuery = "INSERT INTO Series (name, series_id, creation_date) VALUES (?, ?, CURRENT_TIMESTAMP)";
try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) {
stmt.setString(1, seriesName);
stmt.setLong(2, customSeed); // Utiliser customSeed comme series_id
stmt.executeUpdate();
} catch (SQLException e) {
System.err.println("Erreur lors de l'ajout de la seed custom: " + e.getMessage());
throw e;
}
}
// Si la seed n'existe pas, procéder à l'insertion
String insertQuery = "INSERT INTO Series (name, series_id, creation_date) VALUES (?, ?, CURRENT_TIMESTAMP)";
try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) {
stmt.setString(1, name);
stmt.setLong(2, customSeed);
stmt.executeUpdate();
} catch (SQLException e) {
System.err.println("Erreur lors de l'ajout de la seed custom: " + e.getMessage());
throw e;
}
}
/**
* Récupère les meilleurs scores des joueurs (limite de 10 scores)
@@ -181,7 +290,10 @@ public class Database {
while (rs.next()) {
int score = rs.getInt("score");
String seriesName = rs.getString("name"); // Nom de la série
// Créer un texte à afficher incluant le score et le nom de la série
String displayText = "Score: " + score + " | Série: " + seriesName;
// Ajouter l'objet PlayerScore à la liste
topPlayers.add(new PlayerScore(seriesName, score)); // Assurez-vous que PlayerScore accepte un nom de série
}