# Cria os eventos de sistema dos gatilhos ligados na etapa 3. # # Sem isso, `Despachante.disparar(chave: 'valor_alterado')` não acharia evento # nenhum e o gatilho ficaria mudo — e o ADM teria de adivinhar que precisa criar # um evento cujo nome gere exatamente aquela `chave`. # # Nascem ATIVOS e isso é seguro: sem grupo assinante não há destinatário, então # nada é enviado até o ADM marcar um grupo na tela. class SemearEventosDeGatilho < ActiveRecord::Migration[7.1] EVENTOS = [ ['Valor alterado no fechamento', 'valor_alterado', 'valor_alterado', 'Disparado quando o valor de um motorista muda depois da consolidação finalizada.'], ['Dados da operação mudaram', 'operacao_alterada', 'operacao_alterada', 'NF que entrou ou saiu, entrega que trocou de status, lançamento corrigido no SimpliRoute.'] ].freeze def up EVENTOS.each do |nome, chave, gatilho, descricao| # Idempotente: rodar de novo (ou num banco que já tenha o evento criado à # mão) não pode estourar índice único. next if select_value("SELECT 1 FROM eventos_notificacao WHERE chave = #{quote(chave)}") execute(<<~SQL.squish) INSERT INTO eventos_notificacao (nome, chave, gatilho, descricao, ativo, sistema, notificar_envolvido, hora, created_at, updated_at) VALUES (#{quote(nome)}, #{quote(chave)}, #{quote(gatilho)}, #{quote(descricao)}, true, true, true, 8, NOW(), NOW()) SQL end end def down EVENTOS.each { |_, chave, _, _| execute("DELETE FROM eventos_notificacao WHERE chave = #{quote(chave)}") } end end