fix: improve date formatting and backup path handling
- Updated `formatTimeAgo` in `AdvancedSettingsPageClient` to use a fixed format for hydration consistency. - Refined `formatDate` in `BackupSettingsPageClient` for consistent server/client formatting. - Refactored `BackupService` to use `getCurrentBackupPath` for all backup path references, ensuring up-to-date paths and avoiding caching issues. - Added `getCurrentBackupPath` method to dynamically retrieve the current backup path based on environment variables.
This commit is contained in:
@@ -27,14 +27,16 @@ export interface BackupInfo {
|
||||
}
|
||||
|
||||
export class BackupService {
|
||||
private defaultConfig: BackupConfig = {
|
||||
enabled: true,
|
||||
interval: 'hourly',
|
||||
maxBackups: 5,
|
||||
backupPath: this.getDefaultBackupPath(),
|
||||
includeUploads: true,
|
||||
compression: true,
|
||||
};
|
||||
private get defaultConfig(): BackupConfig {
|
||||
return {
|
||||
enabled: true,
|
||||
interval: 'hourly',
|
||||
maxBackups: 5,
|
||||
backupPath: this.getDefaultBackupPath(),
|
||||
includeUploads: true,
|
||||
compression: true,
|
||||
};
|
||||
}
|
||||
|
||||
private getDefaultBackupPath(): string {
|
||||
// 1. Variable d'environnement explicite
|
||||
@@ -110,7 +112,7 @@ export class BackupService {
|
||||
const backupId = `backup_${Date.now()}`;
|
||||
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
||||
const filename = `towercontrol_${timestamp}.db`;
|
||||
const backupPath = path.join(this.config.backupPath, filename);
|
||||
const backupPath = path.join(this.getCurrentBackupPath(), filename);
|
||||
|
||||
console.log(`🔄 Starting ${type} backup: ${filename}`);
|
||||
|
||||
@@ -226,7 +228,7 @@ export class BackupService {
|
||||
* Restaure une sauvegarde
|
||||
*/
|
||||
async restoreBackup(filename: string): Promise<void> {
|
||||
const backupPath = path.join(this.config.backupPath, filename);
|
||||
const backupPath = path.join(this.getCurrentBackupPath(), filename);
|
||||
|
||||
// Résoudre le chemin de la base de données
|
||||
let dbPath: string;
|
||||
@@ -304,19 +306,30 @@ export class BackupService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtient le chemin de sauvegarde actuel (toujours à jour)
|
||||
* Force la relecture des variables d'environnement à chaque appel
|
||||
*/
|
||||
private getCurrentBackupPath(): string {
|
||||
// Toujours recalculer depuis les variables d'environnement
|
||||
// pour éviter les problèmes de cache lors des refresh
|
||||
return this.getDefaultBackupPath();
|
||||
}
|
||||
|
||||
/**
|
||||
* Liste toutes les sauvegardes disponibles
|
||||
*/
|
||||
async listBackups(): Promise<BackupInfo[]> {
|
||||
try {
|
||||
const currentBackupPath = this.getCurrentBackupPath();
|
||||
await this.ensureBackupDirectory();
|
||||
const files = await fs.readdir(this.config.backupPath);
|
||||
const files = await fs.readdir(currentBackupPath);
|
||||
|
||||
const backups: BackupInfo[] = [];
|
||||
|
||||
for (const file of files) {
|
||||
if (file.startsWith('towercontrol_') && (file.endsWith('.db') || file.endsWith('.db.gz'))) {
|
||||
const filePath = path.join(this.config.backupPath, file);
|
||||
const filePath = path.join(currentBackupPath, file);
|
||||
const stats = await fs.stat(filePath);
|
||||
|
||||
// Extraire la date du nom de fichier
|
||||
@@ -353,7 +366,7 @@ export class BackupService {
|
||||
* Supprime une sauvegarde
|
||||
*/
|
||||
async deleteBackup(filename: string): Promise<void> {
|
||||
const backupPath = path.join(this.config.backupPath, filename);
|
||||
const backupPath = path.join(this.getCurrentBackupPath(), filename);
|
||||
|
||||
try {
|
||||
await fs.unlink(backupPath);
|
||||
@@ -411,11 +424,12 @@ export class BackupService {
|
||||
* S'assure que le dossier de backup existe
|
||||
*/
|
||||
private async ensureBackupDirectory(): Promise<void> {
|
||||
const currentBackupPath = this.getCurrentBackupPath();
|
||||
try {
|
||||
await fs.access(this.config.backupPath);
|
||||
await fs.access(currentBackupPath);
|
||||
} catch {
|
||||
await fs.mkdir(this.config.backupPath, { recursive: true });
|
||||
console.log(`📁 Created backup directory: ${this.config.backupPath}`);
|
||||
await fs.mkdir(currentBackupPath, { recursive: true });
|
||||
console.log(`📁 Created backup directory: ${currentBackupPath}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -447,7 +461,11 @@ export class BackupService {
|
||||
* Obtient la configuration actuelle
|
||||
*/
|
||||
getConfig(): BackupConfig {
|
||||
return { ...this.config };
|
||||
// Retourner une config avec le chemin à jour
|
||||
return {
|
||||
...this.config,
|
||||
backupPath: this.getCurrentBackupPath()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user