Notificações - CAKeysama/ReTool GitHub Wiki

Notificações

Avisos exibidos no sino da barra lateral (ou do canto superior, na Home e na tela Sobre). Ficam na coleção notifications do Firestore, com um documento por destinatário.

Tipos

Definidos em src/domain/entities/notificacao.ts.

Tipo Quando é criada Destinatário Ao clicar
reutilizacao_nova Reutilização enviada ao Projetista (1º filtro), similar encontrado ou pedido de dispositivo novo Administração e Projetistas ativos, exceto quem executou Abre /reutilizacoes com o registro destacado
reutilizacao_decidida Aprovada, não aprovada (com motivo), similar encontrado ou liberada para fabricação Solicitante da reutilização, se não for quem executou Abre /reutilizacoes com o registro destacado
conta_nova Novo cadastro público (Convidado pendente) Cada administrador ativo Abre Administração → Cadastros pendentes com o cadastro destacado
conta_decidida Cadastro aprovado ou recusado O próprio usuário Marca como lida
cargo_solicitado Pedido de alteração de cargo Cada administrador ativo Abre Administração → Solicitações de cargo com o pedido destacado
cargo_decidido Pedido de cargo aprovado ou rejeitado O solicitante Marca como lida

Onde são geradas:

  • reutilização: ReToolContext (notificarFilaProjetista, notificarSolicitante);
  • contas e cargos: casos de uso em src/application/usecases/ (função notificarAdministradores).

Documento

Campo Descrição
id Determinístico: tipo_entidadeId_destinatarioUid (idNotificacao())
tipo, titulo, descricao, dataHora Conteúdo
destinatarioUid, remetenteUid Quem recebe e quem gerou
lida, resolvida Estado de leitura; resolvida marca pedidos já tratados por quem os recebeu
entidadeId Reutilização, usuário ou solicitação de cargo referenciados
dispositivoId, perfilSolicitado, decisao Dados de apoio conforme o tipo

Comportamento que decorre desse modelo:

  • Sem duplicatas: o id é determinístico. Um segundo envio do mesmo evento vira uma atualização, que as regras recusam; o erro é ignorado de propósito. Em reutilizacao_decidida, o título entra no id, então decisões diferentes geram avisos diferentes.
  • Status sempre atual: o selo exibido (Pendente, Aprovada, Recusada, Rejeitada, o status da reutilização ou Removida) é calculado em tempo real a partir da entidade referenciada, sem novas escritas.
  • Falhas não bloqueiam o fluxo: se uma notificação não puder ser criada, a operação principal continua e o erro vai para o console.

No sino

  • Contador de não lidas.
  • Para a Administração, o selo "N aguardando ação" conta cadastros e pedidos de cargo ainda pendentes, e esses itens têm o botão Analisar.
  • Marcar todas como lidas e o ícone ✓✓, que marca um item como lido.
  • Clicar em um item marca como lido e navega conforme a tabela acima.

Regras de acesso

Definidas em firestore.rules, bloco match /notifications/{notifId}:

  • leitura: somente o destinatário;
  • criação: o remetente é sempre quem está autenticado, e cada tipo tem sua validação:
    • conta_nova só por um Convidado pendente e só para administradores;
    • cargo_solicitado só pelo autor da solicitação e só para administradores;
    • conta_decidida e cargo_decidido só pela Administração;
    • os tipos de reutilização só por contas operacionais, e reutilizacao_nova só para Administração ou Projetista;
  • atualização: somente o destinatário, e somente lida e resolvida;
  • exclusão: ninguém.

Adicionar um novo tipo

Siga os passos em Guia do Desenvolvedor → Notificações.