# Log de cada mensagem disparada — quem recebeu, por qual canal, com que texto e # se deu certo. # # Hoje uma falha de envio só vira linha no log do Rails (NotificacaoService # engole a exceção de propósito, para um SMTP fora do ar não travar o # fechamento). Isso é certo, mas deixa o operador sem resposta para "o motorista # recebeu?". Com o WhatsApp por sessão QR — que cai sozinho e precisa # repareamento — essa pergunta passa a ser rotina. class CreateNotificacaoEnvios < ActiveRecord::Migration[7.1] def change create_table :notificacao_envios do |t| # ⚠️ `to_table:` é OBRIGATÓRIO aqui. Com `foreign_key: true` o Rails # PLURALIZA o nome da referência para achar a tabela alvo, e o Inflector # não fala português: `grupo_contato` → "grupo_contatos" e # `evento_notificacao` → "evento_notificacaos". As tabelas reais são # `grupos_contato` e `eventos_notificacao` (plural no primeiro termo). t.references :evento_notificacao, foreign_key: { to_table: :eventos_notificacao }, index: true t.references :contato, foreign_key: true, index: true t.references :user, foreign_key: true, index: true t.string :canal, null: false # whatsapp | email t.string :destino, null: false # telefone E.164 ou e-mail t.string :assunto t.text :corpo t.string :status, null: false, default: 'pendente' # pendente|enviado|falhou t.text :erro t.integer :tentativas, null: false, default: 0 t.datetime :enviado_em t.timestamps end add_index :notificacao_envios, %i[status created_at] add_index :notificacao_envios, :created_at end end