diff --git a/app/jobs/contact_job.rb b/app/jobs/contact_job.rb index 9425b51..849c507 100644 --- a/app/jobs/contact_job.rb +++ b/app/jobs/contact_job.rb @@ -3,6 +3,32 @@ # Envía los mensajes de contacto class ContactJob < ApplicationJob def perform(**args) - ContactMailer.with(**args).notify_usuaries.deliver_now + @params = args + + # Enviar de a 10 usuaries para minimizar el riesgo que nos + # consideren spammers. + # + # TODO: #i18n. Agrupar usuaries por su idioma + + usuaries.each_slice(10) do |u| + ContactMailer.with(**args.merge(usuaries: u, title: site.title)) + .notify_usuaries.deliver_now + end + end + + private + + def site + @site ||= Site.find @params[:site_id] + end + + # Trae solo les usuaries definitives para eliminar un vector de ataque + # donde alguien crea un sitio, agrega a muches usuaries y les envía + # correos. + # + # TODO: Mover a Site#usuaries + def usuaries + site.roles.where(rol: 'usuarie', temporal: false).includes(:usuarie) + .pluck(:email) end end diff --git a/app/mailers/contact_mailer.rb b/app/mailers/contact_mailer.rb index b372c53..058608e 100644 --- a/app/mailers/contact_mailer.rb +++ b/app/mailers/contact_mailer.rb @@ -2,32 +2,10 @@ # Formulario de contacto class ContactMailer < ApplicationMailer - # Enviar el formulario de contacto a todes les usuaries + # Enviar el formulario de contacto a les usuaries def notify_usuaries - # Enviar de a 10 usuaries para minimizar el riesgo que nos - # consideren spammers. - # - # TODO: #i18n. Agrupar usuaries por su idioma - usuaries.each_slice(10) do |u| - mail to: u, - reply_to: params[:from], - subject: I18n.t('contact_mailer.subject', site: site.title) - end - end - - private - - def site - @site ||= Site.find params[:site_id] - end - - # Trae solo les usuaries definitives para eliminar un vector de ataque - # donde alguien crea un sitio, agrega a muches usuaries y les envía - # correos. - # - # TODO: Mover a Site#usuaries - def usuaries - site.roles.where(rol: 'usuarie', temporal: false).includes(:usuarie) - .pluck(:email) + mail to: params[:usuaries], + reply_to: params[:from], + subject: I18n.t('contact_mailer.subject', site: params[:title]) end end