Ir al contenido

Sincronización

La interfaz siempre lee de los stores locales (rápido y sin conexión). Con sesión iniciada, la cuenta es la fuente de verdad y los cambios se suben solos.

flowchart TD
  inicio([Inicia sesión]) --> yaSync{¿Ya se sincronizó<br/>en esta pestaña?}
  yaSync -- sí --> restaurada[restored:<br/>sigue con lo local]
  yaSync -- no --> perfil{¿La cuenta<br/>tiene perfil?}
  perfil -- sí --> bajar[Baja perfil, valores, cálculos<br/>y recetas guardadas<br/>y reemplaza lo local]
  perfil -- no --> datos{¿El dispositivo tiene datos?<br/>valores, cálculos, recetas guardadas<br/>o moneda distinta de ARS}
  datos -- no --> crear[created:<br/>lo local pasa a ser el perfil]
  datos -- sí --> preguntar[needs-migration:<br/>se le pregunta a la persona]
  preguntar -- Importar --> subir[Sube todo lo local a la cuenta]
  preguntar -- Empezar de cero --> limpio[Cuenta vacía,<br/>se descarta lo local]
  bajar --> escuchar
  crear --> escuchar
  subir --> escuchar
  limpio --> escuchar
  restaurada --> escuchar
  escuchar([Escucha cambios locales])
sequenceDiagram
  participant UI as Calculadora / preferencias
  participant St as Stores (zustand)
  participant Sy as Sincronización
  participant A as API

  UI->>St: Cambia un valor
  St-->>Sy: Aviso de cambio
  Sy->>Sy: Espera 800 ms (junta cambios seguidos)
  Sy->>A: PUT /me/profile · /me/drafts/:formula · /me/history/:id · /me/saved-recipes/:receta
  Note over Sy,A: Si falla se reintenta, sin bloquear la UI
  • Moneda, idioma y tema → perfil. Valores de cada calculadora → borradores. Cálculos guardados → historial (hasta 15). Recetas guardadas → recetas guardadas (hasta 100).
  • Al cerrar sesión, el dispositivo vuelve al modo invitado sin los datos de la cuenta.