37 lines
1.7 KiB
Ruby
37 lines
1.7 KiB
Ruby
# 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
|