b0439e39c4
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
1.4 KiB
1.4 KiB
Feature Context: Database Backup & Restore
Configuration
- Development mode: Automated
- Execution mode: Direct
- Strategy: Big Bang
- Build:
npm run build - Test:
npm run test - Lint:
npm run lint - Dev server:
npm run dev(port: 5173)
Current State
Starting implementation. Existing import/export code is still in place — will be removed in Phase 4.
Tech Stack
- SvelteKit 5 + TypeScript
- Prisma ORM with SQLite (
data/launcher.db) - node-cron (already a dependency, used by healthcheckScheduler)
- Zod validation
- Tailwind CSS + bits-ui components
- svelte-i18n for localization
- lucide-svelte for icons
Key Patterns from Codebase
- Services in
src/lib/server/services/— pure functions, Prisma transactions - API routes follow SvelteKit conventions with admin auth guards
- Scheduler pattern:
src/lib/server/jobs/healthcheckScheduler.ts— cron start/stop, wired in hooks.server.ts - Admin components in
src/lib/components/admin/ - Audit logging via
auditLogService.ts
Cross-Phase Dependencies
- Phase 2 depends on Phase 1 (backupService)
- Phase 3 depends on Phases 1+2 (API endpoints)
- Phase 4 is independent cleanup
Implementation Notes
- Using
VACUUM INTOfor safe backup creation (no locking) - Backups stored in
data/backups/directory - Restore requires Prisma disconnect → file swap → reconnect
- SystemSettings gets new fields: backupEnabled, backupCronExpression, backupMaxCount