Zum Hauptinhalt springen

Synchronisierung (Duo)

Im Cloud-Modus gehört der Plan zu einem Haushalt, und Nutzer sind mit ihm verknüpft. Eine zweite Person tritt mit einem Einladungscode bei.

Modell des Teilens

  • Ein Haushalt = ein gemeinsamer Zustand (jsonb).
  • Mitglieder sind über eine Mitgliedschaftstabelle verknüpft.
  • Der Zugriff wird durch Row Level Security erzwungen — nur ein Mitglied kann den Zustand seines Haushalts lesen und ändern.
  • Der Zustand ist Ende-zu-Ende verschlüsselt; der Verschlüsselungsschlüssel des Haushalts wird per Schlüsselaustausch mit der eingeladenen Partnerin oder dem eingeladenen Partner geteilt, sodass weder wir noch Dritte ihn lesen können.

Eine Partnerin/einen Partner hinzufügen (ein Tippen)

Solange der Plan nur einen Erwachsenen hat, zeigt das Dashboard eine Karte „Partnerin/Partner einladen". Ein Tippen öffnet ein Sheet mit dem Einladungscode (und einer optionalen E-Mail-Einladung). Die zweite Person erstellt ein Konto und gibt den Code ein — von da an sehen Sie beide denselben Plan. Die Karte verschwindet, sobald die Partnerin/der Partner beitritt.

Das Gewähren des Zugriffs auf die verschlüsselten Daten geschieht automatisch: Wenn die einladende Person die App öffnet oder fokussiert, versiegelt ihr Gerät den Haushaltsschlüssel für die Partnerin/den Partner (ein idempotenter Schritt, gefahrlos wiederholbar). Es sind keine manuellen Einstellungen oder Admin-Aktionen nötig.

Bis das geschieht, sieht die Partnerin/der Partner einen ruhigen Bildschirm „Sie werden verbunden" — die App prüft die Verbindung alle paar Sekunden und schließt sie von selbst ab. Wenn es eine Weile dauert, bitten Sie die andere Person einfach, GrapeVest auf ihrem Gerät zu öffnen.

Speichern mit Zusammenführung

Der Zustand wird als Ganzes geschrieben, mit optimistischer Nebenläufigkeitskontrolle:

  1. Die App merkt sich die Markierung updated_at des zuletzt abgerufenen Zustands.
  2. Beim Speichern sendet sie diese Markierung. Wenn in der Zwischenzeit jemand geschrieben hat, weichen die Markierungen voneinander ab → ein Konflikt wird erkannt.
  3. Die App ruft dann den frischen Zustand ab und führt zusammen: Nach Monat verschlüsselte Maps (Einträge, Snapshots) werden kombiniert, und die übrigen Felder werden von der neueren Seite nach updated_at übernommen. So verliert „zwei Personen füllen verschiedene Monate aus" keine Daten.

Abrufen und Aktualisieren

Der Zustand wird abgerufen, wenn Sie den Haushalt betreten, live, sobald Ihre Partnerin/Ihr Partner eine Änderung vornimmt (ein Realtime-Abonnement auf der Haushaltszeile), und als Fallback, wenn Sie zum Tab/Fenster zurückkehren. Wenn die Änderung einer Partnerin/eines Partners eintrifft, wird eine kurze Meldung „Ihre Partnerin/Ihr Partner hat den Plan aktualisiert" angezeigt.

Wenn Sie gerade lokale, noch nicht synchronisierte Änderungen haben, wird der entfernte Zustand mit ihnen zusammengeführt (wir überschreiben sie nicht stillschweigend) — nach derselben Regel wie bei einem Schreibkonflikt (nach Monat verschlüsselte Maps zusammengeführt, der Rest nach dem neueren updated_at).

Verlassen und Löschen

  • Den Haushalt verlassen — entzieht diesem Konto den Zugriff; wenn das letzte Mitglied geht, wird der Haushalt (und sein Zustand) entfernt, sodass keine verwaisten Daten zurückbleiben.
  • Konto löschen — entfernt jeden Haushalt, in dem Sie das einzige Mitglied sind (DSGVO).