diff --git a/src-tauri/src/commands/import_export.rs b/src-tauri/src/commands/import_export.rs index 42ee6b209..ae7dab364 100644 --- a/src-tauri/src/commands/import_export.rs +++ b/src-tauri/src/commands/import_export.rs @@ -123,6 +123,24 @@ pub async fn open_zip_file_dialog( // ─── Database backup management ───────────────────────────── +/// Manually create a database backup +#[tauri::command] +pub async fn create_db_backup(state: State<'_, AppState>) -> Result { + let db = state.db.clone(); + tauri::async_runtime::spawn_blocking(move || match db.backup_database_file()? { + Some(path) => Ok(path + .file_name() + .map(|f| f.to_string_lossy().into_owned()) + .unwrap_or_default()), + None => Err(AppError::Config( + "Database file not found, backup skipped".to_string(), + )), + }) + .await + .map_err(|e| format!("Backup failed: {e}"))? + .map_err(|e: AppError| e.to_string()) +} + /// List all database backup files #[tauri::command] pub fn list_db_backups() -> Result, String> { diff --git a/src/lib/api/settings.ts b/src/lib/api/settings.ts index 567e78f70..6adb9bb80 100644 --- a/src/lib/api/settings.ts +++ b/src/lib/api/settings.ts @@ -223,6 +223,10 @@ export interface BackupEntry { } export const backupsApi = { + async createDbBackup(): Promise { + return await invoke("create_db_backup"); + }, + async listDbBackups(): Promise { return await invoke("list_db_backups"); },