# Corpo das mensagens montado pelo ADM, um template por EVENTO e por CANAL. # # Antes, o texto era string interpolada dentro do NotificacaoService: mudar uma # palavra exigia deploy. Agora o ADM empilha blocos (cabeçalho, texto, tabela de # valores, aviso, botão, rodapé) na tela. # # `blocos` é jsonb e não tabela filha de propósito: a ordem faz parte do dado # (é uma lista, não um conjunto), o conteúdo de cada tipo de bloco é diferente, e # salvar o template inteiro numa transação evita estado meio-salvo. A validação # da forma acontece no model (MensagemTemplate#normalizar_blocos), não no banco. class CreateMensagemTemplates < ActiveRecord::Migration[7.1] def change create_table :mensagem_templates do |t| t.references :evento_notificacao, null: false, foreign_key: true t.string :canal, null: false # whatsapp | email t.string :assunto # só e-mail t.jsonb :blocos, null: false, default: [] t.boolean :ativo, null: false, default: true t.timestamps end # Um template por evento+canal: dois templates ativos para o mesmo par # deixariam o envio escolhendo em silêncio. add_index :mensagem_templates, %i[evento_notificacao_id canal], unique: true, name: 'index_template_evento_canal_unico' end end