# Lista de destinatários das notificações, cadastrada à mão pelo ADM. # # Antes, "quem recebe" era implícito: o NotificacaoService procurava o User # motorista pelo NOME da consolidação. Quem não é usuário do sistema (diretoria, # cliente, terceiro) não tinha como ser avisado, e não havia tela nenhuma para # controlar isso. # # O contato pertence a UM grupo, e é o GRUPO que assina os eventos (ver # 20260824000002) — assim cadastrar alguém novo é escolher o grupo, não repetir # a configuração pessoa por pessoa. class CreateNotificacaoContatos < ActiveRecord::Migration[7.1] def change create_table :grupos_contato do |t| t.string :nome, null: false t.string :descricao t.boolean :ativo, null: false, default: true t.timestamps end add_index :grupos_contato, 'LOWER(nome)', unique: true, name: 'index_grupos_contato_nome_unico' create_table :contatos 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 :grupo_contato, foreign_key: { to_table: :grupos_contato }, index: true t.string :nome, null: false # E.164 normalizado (+5511920051157). Vazio = contato só de e-mail. t.string :telefone t.string :email t.boolean :ativo, null: false, default: true t.string :observacao # Quando o contato É um usuário do sistema (motorista), guardar o vínculo # permite o disparo "avisar o envolvido" achar a pessoa certa sem depender # de casar nome por string, que é o que se faz hoje. t.references :user, foreign_key: true, index: true t.timestamps end add_index :contatos, :telefone add_index :contatos, :email end end