PRD — Diálogo de perfil do usuário (ProfileDialog)
Status
Implementado
Contexto
O produto oferece uma tela de perfil do usuário na forma de um diálogo modal (ProfileDialog), aberto ao clicar no avatar no header da Home quando o usuário está autenticado. Essa tela concentra a visualização e edição dos dados do perfil, o gerenciamento de cargos na EBD, mensagens e preferências de aparência.
A autoridade dos dados é o backend; decisões de ciclo de vida e armazenamento constam no ADR-0013 — Perfil de usuário e ciclo de vida.
Comportamento do produto
Acesso
- Gatilho: clique/toque no avatar do usuário no header da página Home (quando logado).
- Resultado: abre o ProfileDialog em modal, com o perfil já carregado (dados vindos do último carregamento do perfil na Home).
Estrutura da tela
- Título: "Perfil".
- Navegação: três abas — Dados Pessoais, Perfil na EBD, Mensagens e Preferências.
- Rodapé: botão Salvar perfil (aplica à aba Dados Pessoais), botão Sair, e botão de fechar (X).
- Regra de reflexo em tela: conforme ADR-0021, toda ação que altere o perfil ou realize chamada ao backend deve refletir imediatamente na tela, sem fechar o diálogo.
Abas e funcionalidades
1. Dados Pessoais
- Objetivo: exibir e editar dados cadastrais e avatar.
- Conteúdo: avatar (preview circular, iniciais ou foto), nome completo, apelido, e-mail (somente leitura), telefone, dropdown de igreja.
- Avatar: alteração por URL (colar e salvar), galeria ou câmera; ao tocar no avatar abre visualizador para zoom/posição e confirmar; indicação quando há alteração não salva.
- Igreja: lista carregada do backend (publicChurchesHttp); troca de igreja pode exigir confirmação (impacto no perfil na EBD).
- Ação principal: Salvar perfil — persiste nome, apelido, telefone, igreja e avatar no backend (USER_PROFILE_UPDATE).
- Detalhe técnico: TDD — Tab Dados Pessoais.
2. Perfil na EBD
- Objetivo: gerenciar cargo ativo, solicitar novos cargos e (quando aplicável) aprovar/rejeitar solicitações pendentes.
- Conteúdo:
- Cargo atual de operação: texto + ChoiceChips com os cargos elegíveis; seleção única; ao mudar, pode exigir confirmação.
- Cargo desejado: dropdown com papéis que o usuário ainda não possui e ainda não solicitou (excluindo aprovados e pendentes); loading enquanto carrega.
- Solicitar aprovação de cargo: quando o cargo desejado exige aprovação — motivo (se obrigatório) e botão "Solicitar aprovação de cargo"; quando não exige — botão "Confirma o novo cargo".
- Minhas solicitações e Aprovações pendentes exibidas em sub-abas (uma por vez): na sub-aba "Minhas solicitações" aparece a lista das próprias solicitações (com opção excluir); na sub-aba "Aprovações pendentes" aparece a lista de solicitações pendentes para o usuário aprovar (quando tem cargo com permissão), com botões Aprovar, Rejeitar, Excluir e confirmação quando aplicável.
- Quem aprova: usuários cujo papel (conforme backend) está no nível hierárquico superior ao cargo solicitado e com permissão de aprovar no catálogo (can_approve_roles). Detalhes e validações: TDD Perfil na EBD — Definições de aprovação.
- Ações: trocar cargo ativo (ChoiceChip ou "Confirma o novo cargo"), solicitar cargo, aprovar/rejeitar/excluir solicitações.
- Detalhe técnico: TDD — Tab Perfil na EBD, TDD API Gateway.
3. Mensagens e Preferências
- Objetivo: exibir mensagens do perfil e editar preferências de aparência.
- Sub-abas:
- Mensagens: lista de mensagens do perfil (destaques e demais agrupadas); sem ação de marcar como lida na UI atual.
- Preferências: skin do app (Default, Light, Dark, Sepia), botão Salvar preferências (USER_PREFERENCES_UPDATE).
- Detalhe técnico: TDD — Tab Mensagens e Preferências.
Ações globais do diálogo
- Salvar perfil: aplica alterações da aba Dados Pessoais.
- Sair: encerra a sessão (clear do perfil em memória + Firebase Auth signOut) e fecha o diálogo.
- Fechar (X): fecha o diálogo sem deslogar.
Critérios de aceite (resumo)
- Usuário logado consegue abrir o perfil pelo avatar na Home e ver suas informações em três abas.
- Dados pessoais e avatar podem ser editados e salvos; a tela reflete o resultado da operação sem fechar o diálogo.
- Cargo ativo pode ser alterado; cargo desejado pode ser solicitado ou confirmado conforme regras do catálogo; solicitações pendentes podem ser aprovadas/rejeitadas por quem tem permissão.
- Preferências de skin podem ser alteradas e salvas; mensagens do perfil são exibidas.
- Botão Sair encerra a sessão e fecha o diálogo; botão Fechar apenas fecha o diálogo.
Referências
| Tipo | Documento |
|---|---|
| BRD | (a criar se houver requisito de negócio explícito para "perfil único") |
| ADR | ADR-0013 — Perfil de usuário e ciclo de vida, ADR-0021 — Reflexo em tela após ações, ADR-0009 — Princípios de interface |
| TDD | ProfileDialog README, TDD Dados Pessoais, TDD Perfil na EBD, TDD Mensagens e Preferências, TDD API Perfil |
| Código | frontend/lib/presentation/modules/profile_dialog/ |