Files
web-app-launcher/plans/database-backup/CONTEXT.md
T
alexei.dolgolyov b0439e39c4 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
2026-04-02 23:16:18 +03:00

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 INTO for 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