Implantação da geração de mensagem de forma livre e mudança na engine de mensagem

This commit is contained in:
2026-08-24 17:32:16 -03:00
parent 94bbe7556f
commit 88f19dd8f5
77 changed files with 4650 additions and 25 deletions

View File

@@ -0,0 +1,20 @@
# app/policies/contato_policy.rb
#
# Contatos e grupos são a lista de quem recebe mensagem em nome da empresa —
# admin e gerente administram, operador não.
#
# ⚠️ Cada action nova do controller precisa de um `<action>?` aqui, senão o
# `authorize` estoura.
class ContatoPolicy < ApplicationPolicy
def index? = admin_ou_gerente?
def show? = admin_ou_gerente?
def create? = admin_ou_gerente?
def new? = create?
def update? = admin_ou_gerente?
def edit? = update?
def destroy? = admin?
class Scope < Scope
def resolve = scope.all
end
end

View File

@@ -0,0 +1,23 @@
# app/policies/evento_notificacao_policy.rb
#
# Eventos definem o que a empresa dispara e para quem — inclusive o botão de
# disparo manual, que manda mensagem de verdade. Só ADM.
class EventoNotificacaoPolicy < ApplicationPolicy
def index? = admin?
def show? = admin?
def create? = admin?
def new? = create?
def update? = admin?
def edit? = update?
def disparar? = admin?
# Evento de sistema não se apaga: o código dispara por `chave` e ficaria
# chamando no vazio. A tela oferece desativar.
def destroy?
admin? && record.respond_to?(:apagavel?) && record.apagavel?
end
class Scope < Scope
def resolve = scope.all
end
end

View File

@@ -0,0 +1,3 @@
# app/policies/grupo_contato_policy.rb — ver ContatoPolicy.
class GrupoContatoPolicy < ContatoPolicy
end

View File

@@ -0,0 +1,12 @@
# app/policies/notificacao_envio_policy.rb
#
# Log de envios: o corpo das mensagens passa por aqui, então leitura é de
# admin/gerente. Nada é editável — o log é registro, não cadastro.
class NotificacaoEnvioPolicy < ApplicationPolicy
def index? = admin_ou_gerente?
def show? = admin_ou_gerente?
class Scope < Scope
def resolve = scope.all
end
end

View File

@@ -0,0 +1,13 @@
# app/policies/whatsapp_sessao_policy.rb
#
# Parear o WhatsApp por QR é ligar o número da empresa a este servidor, e
# desconectar derruba o canal para todo mundo. Só ADM.
class WhatsappSessaoPolicy < ApplicationPolicy
def show? = admin?
def desconectar? = admin?
def testar? = admin?
class Scope < Scope
def resolve = scope.all
end
end