mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-25 13:45:03 +08:00
feat(backup): add pre-migration backup, periodic backup, backfill warning, and backup management UI
Four improvements to the database backup mechanism: 1. Auto backup before schema migration - creates a snapshot when upgrading from an older database version, providing a safety net beyond the existing SAVEPOINT rollback mechanism. 2. Periodic startup backup - checks on app launch whether the latest backup is older than 24 hours and creates a new one if needed, ensuring all users have recent backups regardless of usage patterns. 3. Backfill failure notification - switch now returns SwitchResult with warnings instead of silently ignoring backfill errors, so users are informed when their manual config changes may not have been saved. 4. Backup management UI - new BackupListSection in Settings > Data Management showing all backup snapshots with restore capability, including a confirmation dialog and automatic safety backup before restore.
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
//! └── settings.rs
|
||||
//! ```
|
||||
|
||||
mod backup;
|
||||
pub(crate) mod backup;
|
||||
mod dao;
|
||||
mod migration;
|
||||
mod schema;
|
||||
@@ -110,6 +110,22 @@ impl Database {
|
||||
conn: Mutex::new(conn),
|
||||
};
|
||||
db.create_tables()?;
|
||||
|
||||
// Pre-migration backup: only when upgrading from an existing database
|
||||
{
|
||||
let conn = lock_conn!(db.conn);
|
||||
let version = Self::get_user_version(&conn)?;
|
||||
drop(conn);
|
||||
if version > 0 && version < SCHEMA_VERSION {
|
||||
log::info!(
|
||||
"Creating pre-migration database backup (v{version} → v{SCHEMA_VERSION})"
|
||||
);
|
||||
if let Err(e) = db.backup_database_file() {
|
||||
log::warn!("Pre-migration backup failed, continuing migration: {e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
db.apply_schema_migrations()?;
|
||||
db.ensure_model_pricing_seeded()?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user