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çãonotificarAdministradores).
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. Emreutilizacao_decidida, o título entra noid, 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_novasó por um Convidado pendente e só para administradores;cargo_solicitadosó pelo autor da solicitação e só para administradores;conta_decididaecargo_decididosó pela Administração;- os tipos de reutilização só por contas operacionais, e
reutilizacao_novasó para Administração ou Projetista;
- atualização: somente o destinatário, e somente
lidaeresolvida; - exclusão: ninguém.
Adicionar um novo tipo
Siga os passos em Guia do Desenvolvedor → Notificações.