Implantação da geração de mensagem de forma livre e mudança na engine de mensagem
This commit is contained in:
41
app/models/notificacao_envio.rb
Normal file
41
app/models/notificacao_envio.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
# app/models/notificacao_envio.rb
|
||||
#
|
||||
# Registro de UMA mensagem disparada. Existe para responder "o motorista
|
||||
# recebeu?" — pergunta que hoje só tem resposta no log do Rails, porque o
|
||||
# NotificacaoService engole a exceção de propósito (um SMTP fora do ar não pode
|
||||
# travar o fechamento de um pagamento).
|
||||
#
|
||||
# Com o WhatsApp por sessão QR, que cai sozinha e exige repareamento, essa
|
||||
# pergunta vira rotina — daí o log ser tabela, não linha de arquivo.
|
||||
class NotificacaoEnvio < ApplicationRecord
|
||||
STATUS = %w[pendente enviado falhou].freeze
|
||||
CANAIS = %w[whatsapp email].freeze
|
||||
|
||||
belongs_to :evento_notificacao, optional: true
|
||||
belongs_to :contato, optional: true
|
||||
belongs_to :user, optional: true
|
||||
|
||||
validates :canal, inclusion: { in: CANAIS }
|
||||
validates :status, inclusion: { in: STATUS }
|
||||
validates :destino, presence: true
|
||||
|
||||
scope :recentes, -> { order(created_at: :desc) }
|
||||
scope :falhados, -> { where(status: 'falhou') }
|
||||
scope :enviados, -> { where(status: 'enviado') }
|
||||
scope :no_periodo, ->(inicio, fim) {
|
||||
where(created_at: inicio.to_date.beginning_of_day..fim.to_date.end_of_day)
|
||||
}
|
||||
|
||||
def marcar_enviado!
|
||||
update!(status: 'enviado', enviado_em: Time.current, erro: nil,
|
||||
tentativas: tentativas + 1)
|
||||
end
|
||||
|
||||
def marcar_falha!(erro)
|
||||
update!(status: 'falhou', erro: erro.to_s.truncate(2000),
|
||||
tentativas: tentativas + 1)
|
||||
end
|
||||
|
||||
def enviado? = status == 'enviado'
|
||||
def falhou? = status == 'falhou'
|
||||
end
|
||||
Reference in New Issue
Block a user