Skip to content

adr-0019-catalogo-de-papeis-em-memoria-no-cliente

O sistema adotará um serviço central de catálogo de papéis no cliente (RoleCatalogService), alinhado ao conceito do serviço de perfil.

  • Todas as chamadas ao catálogo de papéis no frontend devem ser feitas por meio do RoleCatalogService.
  • Nenhum módulo de apresentação ou aplicação deve chamar o repositório/backend diretamente para obter a lista de papéis disponíveis.
  • O serviço mantém em memória os resultados já carregados, indexados por contexto (unitId, requesterRole) ou por catálogo completo (full).
  • Primeira requisição para um dado contexto carrega do backend e armazena no cache.
  • Requisições subsequentes para o mesmo contexto retornam do cache, salvo indicação de refresh.
  • Normal: retorna do cache se existir; caso contrário, carrega do backend e armazena.
  • Catálogo completo (fullCatalog): solicita ao backend o catálogo completo do ministério (sem filtro de igreja/requester); armazena em cache próprio e retorna.
  • Adição (addOnly): carrega do backend e mescla o resultado com o cache existente para aquele contexto (novos roleIds são adicionados, sem substituir o cache).
  • Refresh forçado (forceFullRefresh): ignora cache e recarrega do backend, atualizando o cache.
  • Eventuais alterações nos dados do catálogo (ex.: admin atualiza papéis) devem ser persistidas no BD apenas por fluxos que passem por este serviço (ou pelo backend quando for o caso). O cliente não deve gravar no catálogo por vias alternativas.
  • O backend continua sendo a autoridade do catálogo (Firestore/user_roles/catalog); o serviço no cliente apenas centraliza leitura e cache e, no futuro, orquestra escritas se houver fluxos para isso.
  • O cache deve ser limpo ao logout (ou ao trocar de ministério/tenant), para evitar vazamento de contexto entre sessões.

  • Redução de chamadas ao backend/BD para o mesmo contexto de catálogo.
  • Comportamento previsível: um único ponto de acesso e uma única política de cache e persistência.
  • Backend expõe opção de retorno de catálogo completo (payload fullCatalog) para suportar o modo full no cliente.
  • Integração com ADR-0018 (catálogo de roleId) e ADR-0014 (gateway único); a ação USER_ROLES_AVAILABLE_LIST permanece no gateway com suporte a fullCatalog.

  • ADR-0018: catálogo de roleId compartilhado entre backend e frontend; o serviço no cliente consome esse catálogo via gateway.
  • ADR-0014: ação USER_ROLES_AVAILABLE_LIST no gateway único; payload pode incluir fullCatalog para catálogo completo do ministério.