Feature: Notificações via Novu
Introdução ao documento
Documenta o mecanismo de notificações push/e-mail via API Novu integrado ao ciclo de vida das submissões.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-04
- Responsável: Time Dhedalos
Referencial teórico
Visão geral
O sistema envia notificações em momentos-chave do ciclo de vida da submissão usando a API do Novu. Quatro workflows distintos são utilizados, cada um mapeado na tabela novu_keys com um app_key identificador.
Atores
- Participante (aluno) — recebe notificações de confirmação e solicitação de reenvio
- Facilitador (professor) — recebe notificação de nova submissão
- Sistema (Novu API) — processa e envia notificações
Pré-condições
NOVU_URLconfigurado no ambiente — Evidência:app/Services/NotificationService.php:19NOVU_SECRET_KEYconfigurado no ambiente — Evidência:app/Services/NotificationService.php:20- Workflows registrados na tabela
novu_keyscomapp_keycorrespondente — Evidência:app/Models/NovuKey.php:13
Fluxo principal
- Ação ocorre no controller (store, update, destroy)
- Controller chama
NotificationService::sendNotification()comapp_keydo workflow- Evidência:
app/Services/NotificationService.php:23
- Evidência:
- Service busca
novu_keyna tabelanovu_keyspeloapp_keyfornecido - Service faz HTTP POST para
NOVU_URLcomnovu_keycomonamee dados do subscriber - Novu API processa e envia notificação (e-mail/push)
Workflows (4 identificados)
app_key | Momento | Destinatário | Trigger |
|---|---|---|---|
send-submission | Após submissão pelo participante | Participante | SubmissionController::store:187 |
submission-received | Após submissão pelo participante | Facilitador | SubmissionController::store:187 |
submission-evaluated | Após avaliação pelo facilitador | Participante | SubmissionController::update:340 |
request-resubmission | Após solicitação de reenvio | Participante | SubmissionController::destroy:413 |
- Evidência:
app/Services/NotificationService.php:23,app/Http/Controllers/Api/SubmissionController.php:187,340,413
Fluxos alternativos
- Workflow não cadastrado: Se
app_keynão existe na tabelanovu_keys, notificação não é enviada. Erro registrado em logs. - Novu API indisponível: Request falha, erro registrado. Operação principal (submissão/avaliação) não é afetada.
- Credenciais inválidas: HTTP 401 do Novu, operação principal prossegue.
Regras de negócio
- Fire-and-forget: Falha na notificação NÃO interrompe a operação principal.
- Evidência:
app/Http/Controllers/Api/SubmissionController.php:187(try/catch implícito)
- Evidência:
- Configuração via banco: Workflows são dinâmicos, gerenciados na tabela
novu_keysvia Backpack.- Evidência:
routes/backpack/custom.php:31,app/Http/Controllers/Admin/NovuKeyCrudController.php
- Evidência:
- Provider singleton:
NotificationServiceé registrado como singleton viaNovuServiceProvider.- Evidência:
app/Providers/NovuServiceProvider.php:14
- Evidência:
Estados possíveis
- Não aplicável (notificação é evento, não tem estado persistido)
Endpoints envolvidos
- Disparadas internamente pelos endpoints de submissão (openapi.yaml)
- CRUD de workflows:
/admin/novu-key(Backpack)- Evidência:
routes/backpack/custom.php:31
- Evidência:
Dados impactados
novu_keys— configuração de workflows (model.md)
Pendências
- ⚠️ PENDÊNCIA:
NOVU_URLeNOVU_SECRET_KEYnão constam no.env.example. Devem ser adicionados. - ⚠️ PENDÊNCIA: Implementar retry/queue para notificações falhas.
- ⚠️ PENDÊNCIA: Documentar payload exato enviado ao Novu (subscriber fields).