chore: prettier everywhere
This commit is contained in:
@@ -4,7 +4,10 @@
|
||||
* Usage: tsx scripts/backup-manager.ts [command] [options]
|
||||
*/
|
||||
|
||||
import { backupService, BackupConfig } from '../src/services/data-management/backup';
|
||||
import {
|
||||
backupService,
|
||||
BackupConfig,
|
||||
} from '../src/services/data-management/backup';
|
||||
import { backupScheduler } from '../src/services/data-management/backup-scheduler';
|
||||
import { formatDateForDisplay } from '../src/lib/date-utils';
|
||||
|
||||
@@ -57,7 +60,7 @@ OPTIONS:
|
||||
|
||||
for (let i = 1; i < args.length; i++) {
|
||||
const arg = args[i];
|
||||
|
||||
|
||||
if (arg === '--force') {
|
||||
options.force = true;
|
||||
} else if (arg === '--help') {
|
||||
@@ -70,9 +73,12 @@ OPTIONS:
|
||||
return options;
|
||||
}
|
||||
|
||||
private async confirmAction(message: string, force?: boolean): Promise<boolean> {
|
||||
private async confirmAction(
|
||||
message: string,
|
||||
force?: boolean
|
||||
): Promise<boolean> {
|
||||
if (force) return true;
|
||||
|
||||
|
||||
// Simulation d'une confirmation (en CLI réel, utiliser readline)
|
||||
console.log(`⚠️ ${message}`);
|
||||
console.log('✅ Action confirmée (--force activé ou mode auto)');
|
||||
@@ -83,12 +89,12 @@ OPTIONS:
|
||||
const units = ['B', 'KB', 'MB', 'GB'];
|
||||
let size = bytes;
|
||||
let unitIndex = 0;
|
||||
|
||||
|
||||
while (size >= 1024 && unitIndex < units.length - 1) {
|
||||
size /= 1024;
|
||||
unitIndex++;
|
||||
}
|
||||
|
||||
|
||||
return `${size.toFixed(1)} ${units[unitIndex]}`;
|
||||
}
|
||||
|
||||
@@ -170,15 +176,19 @@ OPTIONS:
|
||||
}
|
||||
|
||||
private async createBackup(force: boolean = false): Promise<void> {
|
||||
console.log('🔄 Création d\'une sauvegarde...');
|
||||
console.log("🔄 Création d'une sauvegarde...");
|
||||
const result = await backupService.createBackup('manual', force);
|
||||
|
||||
|
||||
if (result === null) {
|
||||
console.log('⏭️ Sauvegarde sautée: Aucun changement détecté depuis la dernière sauvegarde');
|
||||
console.log(' 💡 Utilisez --force pour créer une sauvegarde malgré tout');
|
||||
console.log(
|
||||
'⏭️ Sauvegarde sautée: Aucun changement détecté depuis la dernière sauvegarde'
|
||||
);
|
||||
console.log(
|
||||
' 💡 Utilisez --force pour créer une sauvegarde malgré tout'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (result.status === 'success') {
|
||||
console.log(`✅ Sauvegarde créée: ${result.filename}`);
|
||||
console.log(` Taille: ${this.formatFileSize(result.size)}`);
|
||||
@@ -194,24 +204,28 @@ OPTIONS:
|
||||
private async listBackups(): Promise<void> {
|
||||
console.log('📋 Liste des sauvegardes:\n');
|
||||
const backups = await backupService.listBackups();
|
||||
|
||||
|
||||
if (backups.length === 0) {
|
||||
console.log(' Aucune sauvegarde disponible');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`${'Nom'.padEnd(40)} ${'Taille'.padEnd(10)} ${'Type'.padEnd(12)} ${'Date'}`);
|
||||
console.log(
|
||||
`${'Nom'.padEnd(40)} ${'Taille'.padEnd(10)} ${'Type'.padEnd(12)} ${'Date'}`
|
||||
);
|
||||
console.log('─'.repeat(80));
|
||||
|
||||
|
||||
for (const backup of backups) {
|
||||
const name = backup.filename.padEnd(40);
|
||||
const size = this.formatFileSize(backup.size).padEnd(10);
|
||||
const type = (backup.type === 'manual' ? 'Manuelle' : 'Automatique').padEnd(12);
|
||||
const type = (
|
||||
backup.type === 'manual' ? 'Manuelle' : 'Automatique'
|
||||
).padEnd(12);
|
||||
const date = this.formatDate(backup.createdAt);
|
||||
|
||||
|
||||
console.log(`${name} ${size} ${type} ${date}`);
|
||||
}
|
||||
|
||||
|
||||
console.log(`\n📊 Total: ${backups.length} sauvegarde(s)`);
|
||||
}
|
||||
|
||||
@@ -220,7 +234,7 @@ OPTIONS:
|
||||
`Supprimer la sauvegarde "${filename}" ?`,
|
||||
force
|
||||
);
|
||||
|
||||
|
||||
if (!confirmed) {
|
||||
console.log('❌ Suppression annulée');
|
||||
return;
|
||||
@@ -230,12 +244,15 @@ OPTIONS:
|
||||
console.log(`✅ Sauvegarde supprimée: ${filename}`);
|
||||
}
|
||||
|
||||
private async restoreBackup(filename: string, force?: boolean): Promise<void> {
|
||||
private async restoreBackup(
|
||||
filename: string,
|
||||
force?: boolean
|
||||
): Promise<void> {
|
||||
const confirmed = await this.confirmAction(
|
||||
`Restaurer la base de données depuis "${filename}" ? ATTENTION: Cela remplacera toutes les données actuelles !`,
|
||||
force
|
||||
);
|
||||
|
||||
|
||||
if (!confirmed) {
|
||||
console.log('❌ Restauration annulée');
|
||||
return;
|
||||
@@ -247,7 +264,7 @@ OPTIONS:
|
||||
}
|
||||
|
||||
private async verifyDatabase(): Promise<void> {
|
||||
console.log('🔍 Vérification de l\'intégrité de la base...');
|
||||
console.log("🔍 Vérification de l'intégrité de la base...");
|
||||
await backupService.verifyDatabaseHealth();
|
||||
console.log('✅ Base de données vérifiée avec succès');
|
||||
}
|
||||
@@ -255,21 +272,29 @@ OPTIONS:
|
||||
private async showConfig(): Promise<void> {
|
||||
const config = backupService.getConfig();
|
||||
const status = backupScheduler.getStatus();
|
||||
|
||||
|
||||
console.log('⚙️ Configuration des sauvegardes:\n');
|
||||
console.log(` Activé: ${config.enabled ? '✅ Oui' : '❌ Non'}`);
|
||||
console.log(
|
||||
` Activé: ${config.enabled ? '✅ Oui' : '❌ Non'}`
|
||||
);
|
||||
console.log(` Fréquence: ${config.interval}`);
|
||||
console.log(` Max sauvegardes: ${config.maxBackups}`);
|
||||
console.log(` Compression: ${config.compression ? '✅ Oui' : '❌ Non'}`);
|
||||
console.log(
|
||||
` Compression: ${config.compression ? '✅ Oui' : '❌ Non'}`
|
||||
);
|
||||
console.log(` Chemin: ${config.backupPath}`);
|
||||
console.log(`\n📊 Statut du planificateur:`);
|
||||
console.log(` En cours: ${status.isRunning ? '✅ Oui' : '❌ Non'}`);
|
||||
console.log(` Prochaine: ${status.nextBackup ? this.formatDate(status.nextBackup) : 'Non planifiée'}`);
|
||||
console.log(
|
||||
` En cours: ${status.isRunning ? '✅ Oui' : '❌ Non'}`
|
||||
);
|
||||
console.log(
|
||||
` Prochaine: ${status.nextBackup ? this.formatDate(status.nextBackup) : 'Non planifiée'}`
|
||||
);
|
||||
}
|
||||
|
||||
private async setConfig(configString: string): Promise<void> {
|
||||
const [key, value] = configString.split('=');
|
||||
|
||||
|
||||
if (!key || !value) {
|
||||
console.error('❌ Format invalide. Utilisez: key=value');
|
||||
process.exit(1);
|
||||
@@ -283,7 +308,9 @@ OPTIONS:
|
||||
break;
|
||||
case 'interval':
|
||||
if (!['hourly', 'daily', 'weekly'].includes(value)) {
|
||||
console.error('❌ Interval invalide. Utilisez: hourly, daily, ou weekly');
|
||||
console.error(
|
||||
'❌ Interval invalide. Utilisez: hourly, daily, ou weekly'
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
newConfig.interval = value as BackupConfig['interval'];
|
||||
@@ -306,7 +333,7 @@ OPTIONS:
|
||||
|
||||
backupService.updateConfig(newConfig);
|
||||
console.log(`✅ Configuration mise à jour: ${key} = ${value}`);
|
||||
|
||||
|
||||
// Redémarrer le scheduler si nécessaire
|
||||
if (key === 'enabled' || key === 'interval') {
|
||||
backupScheduler.restart();
|
||||
@@ -326,12 +353,18 @@ OPTIONS:
|
||||
|
||||
private async schedulerStatus(): Promise<void> {
|
||||
const status = backupScheduler.getStatus();
|
||||
|
||||
|
||||
console.log('📊 Statut du planificateur:\n');
|
||||
console.log(` État: ${status.isRunning ? '✅ Actif' : '❌ Arrêté'}`);
|
||||
console.log(` Activé: ${status.isEnabled ? '✅ Oui' : '❌ Non'}`);
|
||||
console.log(
|
||||
` État: ${status.isRunning ? '✅ Actif' : '❌ Arrêté'}`
|
||||
);
|
||||
console.log(
|
||||
` Activé: ${status.isEnabled ? '✅ Oui' : '❌ Non'}`
|
||||
);
|
||||
console.log(` Fréquence: ${status.interval}`);
|
||||
console.log(` Prochaine: ${status.nextBackup ? this.formatDate(status.nextBackup) : 'Non planifiée'}`);
|
||||
console.log(
|
||||
` Prochaine: ${status.nextBackup ? this.formatDate(status.nextBackup) : 'Non planifiée'}`
|
||||
);
|
||||
console.log(` Max sauvegardes: ${status.maxBackups}`);
|
||||
}
|
||||
}
|
||||
@@ -340,7 +373,7 @@ OPTIONS:
|
||||
if (require.main === module) {
|
||||
const cli = new BackupManagerCLI();
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
|
||||
cli.run(args).catch((error) => {
|
||||
console.error('❌ Erreur fatale:', error);
|
||||
process.exit(1);
|
||||
|
||||
Reference in New Issue
Block a user