API: Notificacoes
Sistema de notificacoes internas do portal com integracao push via Web Push API. Cada notificacao e vinculada a um usuario e um nucleo.
Endpoints
| Metodo | Rota | Descricao |
|---|---|---|
| GET | /api/notificacoes | Listar notificacoes do usuario (paginado) |
| GET | /api/notificacoes/count | Contador de notificacoes nao lidas |
| PATCH | /api/notificacoes/:id/ler | Marcar uma notificacao como lida |
| PATCH | /api/notificacoes/ler-todas | Marcar todas as notificacoes como lidas |
Service Methods Internos (NotificacoesService)
Metodos expostos para uso por outros modulos do backend:
| Metodo | Parametros | Descricao |
|---|---|---|
criarParaUsuario(usuarioId, texto, linkAcao?) | usuarioId: string, texto: string, linkAcao?: string | Cria uma notificacao para um usuario especifico. O campo linkAcao e opcional e direciona o usuario ao clicar na notificacao. |
criarParaTodos(nucleoId, texto, linkAcao?) | nucleoId: string, texto: string, linkAcao?: string | Cria notificacao para todos os membros ativos do nucleo. Insere em lotes de 500 registros para evitar timeout em nucleos grandes. |
Modulos que Disparam Notificacoes
- Enquetes: Ao criar uma enquete, notifica todos os membros do nucleo via
criarParaTodos. - Comunicados: Ao publicar comunicado segmentado, notifica os usuarios alvo via
criarParaUsuario. - Porta-Vozes: Ao sincronizar novas postagens (RSS automatico ou sync manual), notifica todos os membros sobre os novos posts via
criarParaTodos. - Conquistas: Ao desbloquear um badge, notifica o usuario via
criarParaUsuario.
Interface no Frontend
- Icone de sino no header, visivel em todas as paginas.
- Ao clicar, abre um dropdown com as 10 notificacoes mais recentes.
- Polling a cada 30 segundos para atualizar o contador sem recarregar a pagina.
- Badge vermelho sobre o icone exibindo a quantidade de notificacoes nao lidas. Desaparece quando todas sao marcadas como lidas.
- Cada notificacao no dropdown mostra o texto e, se houver
linkAcao, redireciona o usuario ao clicar.
Push via PushService (Integrado)
O sistema de notificacoes e integrado com o PushService para enviar push notifications alem das notificacoes in-app:
criarParaUsuarioecriarParaTodosagora tambem enviam push viaPushService, alem de inserir na tabela de notificacoes- O push e enviado para todas as subscriptions ativas do usuario (multiplos dispositivos/browsers)
- Se a subscription for invalida (browser removeu permissao), e removida automaticamente da tabela
Push Opcional em Comunicados e Enquetes
Em modulos como Comunicados e Enquetes, o envio de push e opcional — controlado pelo parametro enviarPush:
- Quando
enviarPush=true(padrao): cria notificacao in-app + envia push viaPushService - Quando
enviarPush=false: apenas notificacoes in-app sao criadas (insert direto no banco, sem chamar oPushService) - Checkbox "Enviar push" no formulario de criacao de comunicados e enquetes controla esse parametro