--- title: Datenhaltung & Backup linkTitle: Datenhaltung weight: 5 toc: true --- Wo Rapport seine Daten speichert, wie du sie sicherst und wiederherstellst. > **Diese Seite beschreibt die Desktop-App (Single-User).** Wer im Team arbeitet und Rapport gegen einen [Rapport Server](../../server/) betreibt, sichert stattdessen die Postgres-Datenbank — siehe [Rapport Server § Backup](../../server/#backup). ## Speicherort (Desktop-App) Die Desktop-App speichert **alles lokal** — keine Cloud, kein Server. ### macOS ```text ~/Library/Application Support/com.rapport.app/ ``` Dort liegt eine einzelne **`localStorage`**-Datenbank des WebView, in der **alle** Rapport-Daten als JSON unter dem Key `studio_data_v1` gespeichert sind: - Bürodaten, Logo, IBAN - Mitarbeiter, Kunden, Projekte, Offerten - Zeit-Einträge, Rechnungen - Spesen, Lohnabrechnungen, Protokolle - App-Einstellungen > **Konsequenz:** Wer den Application-Support-Ordner kopiert, hat ein vollständiges Backup. Wer ihn löscht, verliert alle Daten. ### Warum localStorage? In der Desktop-App ist Rapport eine **Single-User-Anwendung**. localStorage ist dafür: - **Schnell** — keine Datenbank-Roundtrips - **Einfach** — keine Migration nötig, JSON-Schema im Code - **Portabel** — eine Datei → ein Backup Für **Multi-User-Betrieb** existiert [Rapport Server](../../server/) — Postgres + Auth + Realtime in einem Docker-Compose. Wechsel zwischen Desktop- und Server-Modus erfolgt im Login-Bildschirm der App. ## Backup-Strategien ### A · Einfach (manuell) Den ganzen Ordner kopieren: ```bash cp -R "~/Library/Application Support/com.rapport.app" \ "~/Documents/Rapport-Backup-$(date +%Y%m%d)" ``` → Auf USB-Stick, externen Datenträger oder in die Cloud. ### B · Time Machine Wenn Time Machine läuft, ist der Ordner automatisch dabei. Versionierung inbegriffen. > **Einschränkung:** Time Machine sichert nur lokal/USB. Für off-site-Backup separat sorgen. ### C · Cron-Job (täglich automatisch) ```bash # In ~/Library/LaunchAgents/com.rapport.backup.plist hinterlegen # oder als crontab-Eintrag: 0 22 * * * rsync -a "$HOME/Library/Application Support/com.rapport.app/" \ "$HOME/Backups/rapport/$(date +\%Y\%m\%d)/" ``` ### D · iCloud Drive (off-site) Application-Support liegt **nicht** automatisch in iCloud. Wer das will: ```bash # Symlink anlegen mkdir -p "~/iCloud Drive/Rapport" ln -s "~/Library/Application Support/com.rapport.app" "~/iCloud Drive/Rapport/data" ``` > **Achtung:** iCloud-Sync mit aktiver App kann zu **Race-Conditions** führen. Besser den Sync zeitversetzt (z. B. nachts via Cron). ## Wiederherstellung ### Vollständig (Rapport komplett tot) 1. Rapport beenden (Cmd+Q, nicht nur Fenster zu) 2. Aktuellen Ordner umbenennen (falls noch da): ```bash mv "~/Library/Application Support/com.rapport.app" \ "~/Library/Application Support/com.rapport.app.bak" ``` 3. Backup-Ordner zurück kopieren: ```bash cp -R "~/Documents/Rapport-Backup-20260523" \ "~/Library/Application Support/com.rapport.app" ``` 4. Rapport starten ### Selektiv (nur einzelne Daten) Da alle Daten in **einem JSON unter `studio_data_v1`** liegen, ist selektive Wiederherstellung **manuell**: 1. Backup-`localStorage`-Datei öffnen (WebKit-Format → mit Tool wie [WebKit Storage Inspector] lesen, oder via Rapport DevTools) 2. Gewünschte Felder in die aktuelle Instanz übertragen In der Praxis: meistens lohnt sich die **vollständige** Wiederherstellung mehr. ## Export-Funktionen (in der App) Aus Rapport selbst: | Was | Wo | Format | |---|---|---| | **Zeit-Auswertung** | Zeit → Export | CSV | | **Rechnung** | Rechnung → PDF | PDF (inkl. QR) | | **Offerte** | Offerte → PDF | PDF | | **Lohnabrechnung** | Mitarbeiter → PDF | PDF | | **Jahres-Buchhaltung** | Buchhaltung → Export | CSV | Die Exports sind für externe Verwendung (Buchhalter, Treuhänder, Archiv) gedacht — kein Full-Backup. ## Schema-Migrationen Bei Updates kann sich das Datenformat ändern. Rapport hat einen **Migrations-Mechanismus**: beim Start prüft die App, ob das gespeicherte Format dem aktuellen entspricht, und migriert es automatisch. Code: [src/storage/migrations.js](https://git.kgva.ch/karim/RAPPORT/src/branch/main/APP/src/storage/migrations.js). > **Empfehlung:** Vor jedem grösseren Update ein Backup machen — Migrationen sind getestet, aber 100%-Sicherheit gibt es nicht. ## Was wird **nicht** gespeichert? - **WebView-Cache** — `~/Library/Caches/com.rapport.app/` und `~/Library/WebKit/com.rapport.app/` sind sicher zu löschen (UI-Caches, regenerieren sich) - **App-Updates** — werden bei Bedarf erneut runtergeladen - **Logs** — `~/Library/Logs/com.rapport.app/` (geplant, derzeit nicht geschrieben) ## Datenmenge Typische Grössen pro Bürojahr: | Inhalt | Grösse | |---|---| | Logo (PNG/SVG) | 50 KB – 1 MB | | 1 Jahr Zeiterfassung (1 MA) | ~ 80 KB | | 1 Jahr Zeiterfassung (5 MA) | ~ 400 KB | | 50 Projekte mit je 5 Rechnungen | ~ 800 KB | | **Total typisches Solo-Büro / Jahr** | **~ 1–2 MB** | localStorage hat Limits (i. d. R. ~10 MB pro Origin). Für Solo-Büros reicht das problemlos für viele Jahre. Wer das Limit erreicht oder im Team arbeitet → [Rapport Server](../../server/).