Pular para o conteúdo principal

Status: Approved · v2 · SPEC-ARCH-STATE-001

depends_on: SPEC-DOMAIN-AUTH-001, SPEC-ARCH-FRONTEND-001

used_by: IS-ZERO-00.2, IS-MVP-02.1

Estado, cache e autenticação no frontend

Regras para evitar stores gigantes, vazamentos entre sessões e inconsistência após mutations.

Modelo

Categorias de estado

  • Server state: pages, lists, entities, notifications, wallet; pertence a hooks/cache.
  • Session state: usuário, tokens, onboarding e AuthIntent; store controlado.
  • UI state: modal, tab local, filtros temporários; fica próximo da tela.
  • Draft state: formulário/multi-step; provider ou form state da feature.

Zustand no MVP é reservado para sessão/configurações globais pequenas. Não copiar listas da API para stores globais.

Invalidation

Cada mutation declara query keys afetadas. Ex.: cheer invalida public team viewer, supporters e feed personalization. Result validation invalida match, team/player stats, standings/ranking e feed suggestions.

Auth

Sessão inicial possui unknown → anonymous | authenticated | onboardingRequired | suspended. Refresh coordenado. Logout limpa cache privado, estado de gestão e AuthIntent executado.

Cache sensível

Respostas de gestão e carteira são isoladas por user/session; nunca persistidas em armazenamento inseguro. Public cache pode sobreviver navegação, mas respeita status/TTL.

AuthIntent

  • Intent contém tipo, target mínimo, returnUrl allowlisted e expiração.
  • Executado apenas após onboarding completo.
  • Falha mantém contexto e oferece retomar, sem loop.
  • Intent financeiro nunca armazena segredo/QR.

Critérios de aceite

  • Server state não é duplicado em store.
  • Logout limpa dados privados.
  • Mutation possui invalidation explícita.
  • Auth boot não pisca conteúdo privado.