Atualização do READ.ME
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user