From 0e51aa4934e144525077d8a7b0b0a7415fc90db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Delmaire?= Date: Wed, 31 Jul 2024 13:13:44 +0200 Subject: [PATCH] API Particulier reporters: group emails instead of 1 email per group Better this way, less spammy --- .../api_particulier/notify_reporters.rb | 17 ++++++++++------- app/mailers/api_particulier/reporters_mailer.rb | 12 ++++++++---- .../reporters_mailer/approve.text.erb | 4 ++-- .../reporters_mailer/submit.text.erb | 4 ++-- .../api_particulier/reporters_mailer_spec.rb | 6 ++++-- .../api_particulier/reporters_mailer_preview.rb | 6 +++--- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/app/interactors/datapass_webhook/api_particulier/notify_reporters.rb b/app/interactors/datapass_webhook/api_particulier/notify_reporters.rb index fe3ce18bb..052f237f2 100644 --- a/app/interactors/datapass_webhook/api_particulier/notify_reporters.rb +++ b/app/interactors/datapass_webhook/api_particulier/notify_reporters.rb @@ -1,18 +1,21 @@ class DatapassWebhook::APIParticulier::NotifyReporters < ApplicationInteractor def call return if %w[submit approve].exclude?(context.event) + return if groups_to_notify.empty? - reporters_config.each_key do |group_name| - next unless scopes.any? { |scope| scope.start_with?("#{group_name}_") } - - APIParticulier::ReportersMailer.with(group: group_name).send(context.event).deliver_later - end + APIParticulier::ReportersMailer.with(groups: groups_to_notify).send(context.event).deliver_later end private - def reporters_config - Rails.application.credentials.api_particulier_reporters + def groups_to_notify + reporters_groups_config.select do |group_name| + scopes.any? { |scope| scope.start_with?(group_name.to_s) } + end + end + + def reporters_groups_config + Rails.application.credentials.api_particulier_reporters.keys end def scopes diff --git a/app/mailers/api_particulier/reporters_mailer.rb b/app/mailers/api_particulier/reporters_mailer.rb index 9a275a1d7..032974b63 100644 --- a/app/mailers/api_particulier/reporters_mailer.rb +++ b/app/mailers/api_particulier/reporters_mailer.rb @@ -6,19 +6,23 @@ class APIParticulier::ReportersMailer < APIParticulierMailer approve ].each do |event| define_method(event) do - group = params[:group] + groups = params[:groups].map(&:to_sym) - return if reporters_config[group].blank? + return if reporter_emails(groups).empty? mail( - bcc: reporters_config[group], - subject: t('.subject', group:) + bcc: reporter_emails(groups), + subject: t('.subject') ) end end private + def reporter_emails(groups) + reporters_config.values_at(*groups).flatten + end + def reporters_config Rails.application.credentials.api_particulier_reporters end diff --git a/app/views/api_particulier/reporters_mailer/approve.text.erb b/app/views/api_particulier/reporters_mailer/approve.text.erb index 013c5a108..ed3d119b8 100644 --- a/app/views/api_particulier/reporters_mailer/approve.text.erb +++ b/app/views/api_particulier/reporters_mailer/approve.text.erb @@ -1,8 +1,8 @@ Bonjour, -Une nouvelle demande vient d'être validée pour l'ensemble de données associé au groupe '<%= params[:group] %>'. +Une nouvelle demande vient d'être validée pour un ensemble de données associé au groupe auquel vous êtes bonné. -Vous pouvez consulter la liste des demandes relatives aux données associé au groupe '<%= params[:group] %>' sur le lien suivant : <%= api_particulier_dashboard_reporter_url %> +Vous pouvez consulter la liste des demandes relatives aux données associé aux groupes où vous êtes abonnés sur le lien suivant : <%= api_particulier_dashboard_reporter_url %> Cordialement, L'équipe API Particulier diff --git a/app/views/api_particulier/reporters_mailer/submit.text.erb b/app/views/api_particulier/reporters_mailer/submit.text.erb index 9b0cb32ba..b47203490 100644 --- a/app/views/api_particulier/reporters_mailer/submit.text.erb +++ b/app/views/api_particulier/reporters_mailer/submit.text.erb @@ -1,8 +1,8 @@ Bonjour, -Une nouvelle demande vient d'être déposée pour l'ensemble de données associé au groupe '<%= params[:group] %>'. +Une nouvelle demande vient d'être déposée pour un ensemble de données associé à un groupe auquel vous êtes abonné. -Vous pouvez consulter la liste des demandes relatives aux données associé au groupe '<%= params[:group] %>' sur le lien suivant : <%= api_particulier_dashboard_reporter_url %> +Vous pouvez consulter la liste des demandes relatives aux données associé aux groupes où vous êtes abonnés sur le lien suivant : <%= api_particulier_dashboard_reporter_url %> Cordialement, L'équipe API Particulier diff --git a/spec/mailers/api_particulier/reporters_mailer_spec.rb b/spec/mailers/api_particulier/reporters_mailer_spec.rb index 54bde96a9..6287c3136 100644 --- a/spec/mailers/api_particulier/reporters_mailer_spec.rb +++ b/spec/mailers/api_particulier/reporters_mailer_spec.rb @@ -5,11 +5,13 @@ describe '#submit' do subject(:mail) do - described_class.with(group: 'cnaf').submit + described_class.with(groups: %w[cnaf men]).submit end - it 'sends an email to reporters associated to this group' do + it 'sends an email to reporters associated to these groups' do expect(mail.bcc).to include('user@yopmail.com') + expect(mail.bcc).to include('api-particulier@yopmail.com') + expect(mail.bcc).not_to include('datapass@yopmail.com') end end end diff --git a/spec/mailers/previews/api_particulier/reporters_mailer_preview.rb b/spec/mailers/previews/api_particulier/reporters_mailer_preview.rb index fa7086695..be036caec 100644 --- a/spec/mailers/previews/api_particulier/reporters_mailer_preview.rb +++ b/spec/mailers/previews/api_particulier/reporters_mailer_preview.rb @@ -4,13 +4,13 @@ class APIParticulier::ReportersMailerPreview < ActionMailer::Preview approve ].each do |event| define_method(event) do - APIParticulier::ReportersMailer.with(group:).send(event) + APIParticulier::ReportersMailer.with(groups:).send(event) end end private - def group - 'cnaf' + def groups + %w[cnaf men] end end