Przejdź do głównej zawartości

Synchronizacja (Duo)

W trybie chmurowym plan należy do gospodarstwa domowego, a użytkownicy są z nim powiązani. Druga osoba dołącza kodem zaproszenia.

Model współdzielenia

  • Jedno gospodarstwo = wspólny stan (jsonb).
  • Członkowie powiązani przez tabelę członkostwa.
  • Dostęp egzekwowany przez Row Level Security — tylko członek widzi i zmienia stan swojego gospodarstwa.
  • Stan jest szyfrowany end-to-end; klucz szyfrujący gospodarstwa jest udostępniany zaproszonemu partnerowi przez wymianę kluczy, więc ani my, ani osoby trzecie nie odczytają danych.

Dodanie partnera (jeden klik)

Dopóki plan ma tylko jednego dorosłego, na pulpicie widnieje karta „Dodaj partnera". Jedno tapnięcie otwiera arkusz z kodem zaproszenia (i opcjonalnym zaproszeniem e-mail). Druga osoba zakłada konto i wpisuje kod — od tej chwili oboje widzą ten sam plan. Karta znika, gdy partner dołączy.

Nadanie dostępu do zaszyfrowanych danych dzieje się automatycznie: gdy zapraszający otworzy lub uaktywni aplikację, jego urządzenie pieczętuje klucz gospodarstwa dla partnera (krok idempotentny, bezpieczny przy wielokrotnym powtórzeniu). Nie trzeba żadnych ręcznych ustawień ani działań administracyjnych.

Zanim to nastąpi, partner widzi spokojny ekran „Łączymy Was" — aplikacja sprawdza połączenie co kilka sekund i sama je domyka. Jeśli się przeciąga, wystarczy poprosić drugą osobę, by otworzyła GrapeVest na swoim urządzeniu.

Zapis ze scalaniem

Stan zapisywany jest w całości, z optymistyczną kontrolą współbieżności:

  1. Aplikacja zapamiętuje znacznik updated_at ostatnio pobranego stanu.
  2. Przy zapisie wysyła ten znacznik. Jeśli ktoś zapisał w międzyczasie, znaczniki się rozjadą → wykryty konflikt.
  3. Wtedy aplikacja pobiera świeży stan i scala: mapy kluczowane miesiącem (wpisy, snapshoty) są łączone, a pozostałe pola bierze nowsza strona wg updated_at. Dzięki temu „dwie osoby uzupełniają różne miesiące" nie gubi danych.

Pobieranie i odświeżanie

Stan pobierany jest po wejściu do gospodarstwa, na żywo przy każdej zmianie po stronie partnera (subskrypcja Realtime na wierszu gospodarstwa) oraz przy powrocie do karty/okna jako zapas. Gdy zmiana partnera dotrze, pokazujemy krótki komunikat „Partner zaktualizował plan".

Jeśli masz w danym momencie lokalne, jeszcze niezsynchronizowane edycje, stan zdalny jest z nimi scalany (nie nadpisujemy ich po cichu) — tą samą regułą co przy konflikcie zapisu (mapy miesięczne łączone, reszta wg nowszego updated_at).

Opuszczenie i usunięcie

  • Opuść gospodarstwo — cofa dostęp temu kontu; gdy wychodzi ostatni członek, gospodarstwo (wraz ze stanem) jest usuwane, by nie zostawiać osieroconych danych.
  • Usuń konto — kasuje gospodarstwa, w których jesteś jedynym członkiem (RODO).