feat: enhance backup management in AdvancedSettingsPage
- Added backup management functionality to `AdvancedSettingsPageClient`, including creating and verifying backups. - Updated `package.json` with new backup-related scripts. - Improved UI to display backup status and next scheduled backup time. - Updated `.gitignore` to exclude backup files. - Enhanced server-side data fetching to include backup data and database statistics.
This commit is contained in:
100
clients/backup-client.ts
Normal file
100
clients/backup-client.ts
Normal file
@@ -0,0 +1,100 @@
|
||||
import { httpClient } from './base/http-client';
|
||||
import { BackupInfo, BackupConfig } from '@/services/backup';
|
||||
|
||||
export interface BackupListResponse {
|
||||
backups: BackupInfo[];
|
||||
scheduler: {
|
||||
isRunning: boolean;
|
||||
isEnabled: boolean;
|
||||
interval: string;
|
||||
nextBackup: string | null;
|
||||
maxBackups: number;
|
||||
backupPath: string;
|
||||
};
|
||||
config: BackupConfig;
|
||||
}
|
||||
|
||||
export class BackupClient {
|
||||
private baseUrl = '/backups';
|
||||
|
||||
/**
|
||||
* Liste toutes les sauvegardes disponibles et l'état du scheduler
|
||||
*/
|
||||
async listBackups(): Promise<BackupListResponse> {
|
||||
const response = await httpClient.get<{ data: BackupListResponse }>(this.baseUrl);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée une nouvelle sauvegarde manuelle
|
||||
*/
|
||||
async createBackup(): Promise<BackupInfo> {
|
||||
const response = await httpClient.post<{ data: BackupInfo }>(this.baseUrl, {
|
||||
action: 'create'
|
||||
});
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie l'intégrité de la base de données
|
||||
*/
|
||||
async verifyDatabase(): Promise<void> {
|
||||
await httpClient.post(this.baseUrl, {
|
||||
action: 'verify'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour la configuration des sauvegardes
|
||||
*/
|
||||
async updateConfig(config: Partial<BackupConfig>): Promise<BackupConfig> {
|
||||
const response = await httpClient.post<{ data: BackupConfig }>(this.baseUrl, {
|
||||
action: 'config',
|
||||
config
|
||||
});
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Démarre ou arrête le planificateur automatique
|
||||
*/
|
||||
async toggleScheduler(enabled: boolean): Promise<{
|
||||
isRunning: boolean;
|
||||
isEnabled: boolean;
|
||||
interval: string;
|
||||
nextBackup: string | null;
|
||||
maxBackups: number;
|
||||
backupPath: string;
|
||||
}> {
|
||||
const response = await httpClient.post<{ data: {
|
||||
isRunning: boolean;
|
||||
isEnabled: boolean;
|
||||
interval: string;
|
||||
nextBackup: string | null;
|
||||
maxBackups: number;
|
||||
backupPath: string;
|
||||
} }>(this.baseUrl, {
|
||||
action: 'scheduler',
|
||||
enabled
|
||||
});
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime une sauvegarde
|
||||
*/
|
||||
async deleteBackup(filename: string): Promise<void> {
|
||||
await httpClient.delete(`${this.baseUrl}/${filename}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restaure une sauvegarde (développement uniquement)
|
||||
*/
|
||||
async restoreBackup(filename: string): Promise<void> {
|
||||
await httpClient.post(`${this.baseUrl}/${filename}`, {
|
||||
action: 'restore'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const backupClient = new BackupClient();
|
||||
Reference in New Issue
Block a user