Files
ChatStatistikTool/src/db/DatabaseBackupRunner.java
Christian Berger fa7c019588 init
2025-11-24 09:15:38 +01:00

69 lines
2.3 KiB
Java

package db;
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
public class DatabaseBackupRunner {
private static final String REQUIRED_USER = "cbu615";
private static final String BACKUP_DIR = "V:\\Schulungsstatistik_Backup";
private static final String DB_FILE = util.Config.getDbPath();
private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/** Call this once on program start */
public static void runBackupCheck() {
if (!System.getProperty("user.name").equalsIgnoreCase(REQUIRED_USER)) return;
File backupFolder = new File(BACKUP_DIR);
if (!backupFolder.exists()) backupFolder.mkdirs();
LocalDate newest = findNewestBackupDate(backupFolder);
if (newest == null || newest.isBefore(LocalDate.now().minusDays(7))) {
System.out.println("creating backup...");
createBackup(backupFolder);
} else
{
System.out.println("no backup needed; last backup in " + BACKUP_DIR + " (" + newest.format(DateTimeFormatter.ISO_LOCAL_DATE) + ")");
}
}
private static LocalDate findNewestBackupDate(File folder) {
File[] files = folder.listFiles((dir, name) -> name.startsWith("backup_") && name.endsWith(".db"));
if (files == null || files.length == 0) return null;
return java.util.Arrays.stream(files)
.map(f -> {
try {
String datePart = f.getName().substring("backup_".length(), "backup_".length() + 10);
return LocalDate.parse(datePart, FMT);
} catch (Exception e) {
return null;
}
})
.filter(d -> d != null)
.max(Comparator.naturalOrder())
.orElse(null);
}
private static void createBackup(File folder) {
String date = LocalDate.now().format(FMT);
File target = new File(folder, "backup_" + date + ".db");
try {
Files.copy(
Paths.get(DB_FILE),
target.toPath(),
StandardCopyOption.REPLACE_EXISTING
);
} catch (IOException e) {
e.printStackTrace();
}
}
}