# app/jobs/notificacao_job.rb # # Entrega das notificações fora da requisição web. # # POR QUE JOB: o envio de WhatsApp pausa entre uma mensagem e outra (o canal por # QR bane número que dispara em rajada). Um `sleep` de 5s vezes 30 contatos # dentro do controller pendura o worker Puma por dois minutos e meio. # # ⚠️ O adapter é o :async do Rails (fila em memória, igual ao `deliver_later` que # o app já usa): job pendente se perde se o container reiniciar. Para # notificação isso é aceitável — o log em notificacao_envios mostra o que # ficou 'pendente' e a tela permite reenviar. class NotificacaoJob < ApplicationJob queue_as :default def perform(evento_id, dados = {}, assunto = nil, corpo = nil, envolvido_id = nil) evento = EventoNotificacao.find_by(id: evento_id) return if evento.nil? || !evento.ativo? envolvido = envolvido_id && User.find_by(id: envolvido_id) Notificacao::Despachante.new(evento, dados: dados, assunto: assunto, corpo: corpo, envolvido: envolvido).executar rescue StandardError => e Rails.logger.error("[NotificacaoJob] evento #{evento_id}: #{e.class}: #{e.message}") end end