Atualização do READ.ME

This commit is contained in:
2026-08-24 19:00:21 -03:00
parent c4d691b202
commit 568f185d8c
7 changed files with 240 additions and 34 deletions

View File

@@ -24,16 +24,37 @@ module Notificacao
class Despachante
# Dispara em background. Nunca levanta: uma notificação não pode derrubar o
# fechamento de um pagamento (mesma regra do NotificacaoService).
# Dispara UM evento específico (disparo manual pelo botão da tela).
def self.disparar(chave:, dados: {}, assunto: nil, corpo: nil, envolvido: nil)
evento = EventoNotificacao.ativos.find_by(chave: chave.to_s)
return if evento.nil?
NotificacaoJob.perform_later(evento.id, (dados || {}).stringify_keys,
assunto.to_s, corpo.to_s, envolvido&.id)
agendar(evento, dados: dados, assunto: assunto, corpo: corpo, envolvido: envolvido)
rescue StandardError => e
Rails.logger.error("[Despachante] falha ao agendar #{chave}: #{e.class}: #{e.message}")
end
# Dispara TODOS os eventos ativos de um gatilho.
#
# É o que o código de negócio usa. Buscar pela `chave` (como era antes) fazia
# só o evento de SISTEMA disparar: um evento criado pelo ADM com o mesmo
# gatilho ficava mudo para sempre, sem erro nenhum — a tela oferecia o
# gatilho e nada acontecia. Com N eventos no mesmo gatilho, cada um tem seus
# próprios grupos e sua própria mensagem, que é o ponto de poder cadastrar.
def self.disparar_gatilho(gatilho:, dados: {}, assunto: nil, corpo: nil, envolvido: nil)
EventoNotificacao.ativos.where(gatilho: gatilho.to_s).find_each do |evento|
agendar(evento, dados: dados, assunto: assunto, corpo: corpo, envolvido: envolvido)
end
rescue StandardError => e
Rails.logger.error("[Despachante] falha ao agendar gatilho #{gatilho}: #{e.class}: #{e.message}")
end
def self.agendar(evento, dados:, assunto:, corpo:, envolvido:)
NotificacaoJob.perform_later(evento.id, (dados || {}).stringify_keys,
assunto.to_s, corpo.to_s, envolvido&.id)
end
private_class_method :agendar
def initialize(evento, dados: {}, assunto: nil, corpo: nil, envolvido: nil)
@evento = evento
@dados = (dados || {}).stringify_keys

View File

@@ -25,8 +25,8 @@ module Notificacao
atual = consolidacao_motorista.valor_total.to_f
return if anterior.to_f == atual
Despachante.disparar(
chave: 'valor_alterado',
Despachante.disparar_gatilho(
gatilho: 'valor_alterado',
dados: Variaveis.comuns_reais.merge(
'motorista' => consolidacao_motorista.motorista_nome,
'consolidacao' => consolidacao.nome,
@@ -54,8 +54,8 @@ module Notificacao
# (DetectarMudancasOperacaoJob) — é por onde chega a maioria, já que o
# espelho sincroniza mudanças feitas fora daqui.
def operacao_alterada(operacao:, o_que_mudou:, nf: nil)
Despachante.disparar(
chave: 'operacao_alterada',
Despachante.disparar_gatilho(
gatilho: 'operacao_alterada',
dados: Variaveis.comuns_reais.merge(
'operacao' => operacao.to_s,
'o_que_mudou' => o_que_mudou.to_s,

View File

@@ -69,8 +69,8 @@ class NotificacaoService
# passa a vir do template configurado pelo ADM.
def avisar_grupos(cm, evento, user)
evt = EVENTOS.fetch(evento)
Notificacao::Despachante.disparar(
chave: evt[:chave],
Notificacao::Despachante.disparar_gatilho(
gatilho: evt[:chave],
dados: variaveis(cm, user),
assunto: "#{evt[:titulo]}#{@consolidacao.nome}",
corpo: mensagem_para_grupos(cm, evento, user)