feat(backup): replace JSON import/export with SQLite database backup system
Replace the JSON-based import/export with a proper backup system that copies the SQLite database file directly. Supports manual on-demand backups, periodic scheduled backups via node-cron, configurable retention, file download, and full database restore. - Add backupService with VACUUM INTO for safe DB copies - Add backupScheduler following healthcheckScheduler pattern - Add 6 admin API endpoints (create, list, download, restore, delete, schedule) - Add BackupPanel UI with backup table, confirmation dialogs, schedule config - Add backup fields to SystemSettings schema - Remove old ImportExportPanel, exportService, importService, and related code
This commit is contained in:
+31
-16
@@ -235,22 +235,37 @@
|
||||
"admin.discovery_traefik_url": "Traefik API URL",
|
||||
"admin.discovery_traefik_url_hint": "Traefik dashboard API base URL (e.g. http://traefik:8080). Set via TRAEFIK_API_URL env var.",
|
||||
|
||||
"admin.import_export_title": "Import / Export",
|
||||
"admin.import_export_description": "Export all data (apps, boards, groups, settings) as JSON, or import from a previously exported file.",
|
||||
"admin.export_section": "Export Data",
|
||||
"admin.export_button": "Export JSON",
|
||||
"admin.export_exporting": "Exporting...",
|
||||
"admin.export_success": "Export downloaded successfully.",
|
||||
"admin.import_section": "Import Data",
|
||||
"admin.import_select_file": "Select a JSON export file",
|
||||
"admin.import_preview": "Preview",
|
||||
"admin.import_mode_label": "Conflict Resolution",
|
||||
"admin.import_mode_skip": "Skip existing (keep current data)",
|
||||
"admin.import_mode_overwrite": "Overwrite existing (replace with imported data)",
|
||||
"admin.import_button": "Import",
|
||||
"admin.import_importing": "Importing...",
|
||||
"admin.import_success": "Import completed.",
|
||||
"admin.import_invalid_json": "Selected file is not valid JSON.",
|
||||
"admin.backup_title": "Database Backup",
|
||||
"admin.backup_description": "Create, restore, and schedule backups of your database. Backups are full copies of the SQLite database file.",
|
||||
"admin.backup_create": "Create Backup",
|
||||
"admin.backup_creating": "Creating...",
|
||||
"admin.backup_create_success": "Backup created successfully.",
|
||||
"admin.backup_list_title": "Backups",
|
||||
"admin.backup_list_empty": "No backups yet. Create your first backup above.",
|
||||
"admin.backup_filename": "Filename",
|
||||
"admin.backup_size": "Size",
|
||||
"admin.backup_date": "Created",
|
||||
"admin.backup_actions": "Actions",
|
||||
"admin.backup_download": "Download",
|
||||
"admin.backup_restore": "Restore",
|
||||
"admin.backup_delete": "Delete",
|
||||
"admin.backup_restore_confirm_title": "Restore Backup",
|
||||
"admin.backup_restore_confirm": "Are you sure you want to restore from this backup? This will replace all current data with the backup contents. This action cannot be undone.",
|
||||
"admin.backup_restore_success": "Database restored successfully. Please reload the page.",
|
||||
"admin.backup_delete_confirm_title": "Delete Backup",
|
||||
"admin.backup_delete_confirm": "Are you sure you want to delete this backup? This action cannot be undone.",
|
||||
"admin.backup_delete_success": "Backup deleted.",
|
||||
"admin.backup_schedule_title": "Scheduled Backups",
|
||||
"admin.backup_schedule_enabled": "Enable periodic backups",
|
||||
"admin.backup_schedule_cron": "Schedule",
|
||||
"admin.backup_schedule_max_count": "Max backups to keep",
|
||||
"admin.backup_schedule_preset_daily": "Daily at 3 AM",
|
||||
"admin.backup_schedule_preset_twice_daily": "Every 12 hours",
|
||||
"admin.backup_schedule_preset_weekly": "Weekly (Sunday 3 AM)",
|
||||
"admin.backup_schedule_preset_custom": "Custom cron",
|
||||
"admin.backup_schedule_save": "Save Schedule",
|
||||
"admin.backup_schedule_saving": "Saving...",
|
||||
"admin.backup_schedule_saved": "Backup schedule updated.",
|
||||
|
||||
"search.placeholder": "Search apps and boards...",
|
||||
"search.trigger": "Search...",
|
||||
|
||||
Reference in New Issue
Block a user