diff --git a/app/controllers/repp/v1/registrar/accreditation_results_controller.rb b/app/controllers/repp/v1/registrar/accreditation_results_controller.rb index b33ed58ee..2efe345bf 100644 --- a/app/controllers/repp/v1/registrar/accreditation_results_controller.rb +++ b/app/controllers/repp/v1/registrar/accreditation_results_controller.rb @@ -5,6 +5,7 @@ module Repp before_action :authenticate_shared_key TEMPORARY_SECRET_KEY = ENV['accreditation_secret'].freeze + EXPIRE_DEADLINE = 15.minutes.freeze api :POST, 'repp/v1/registrar/accreditation/push_results' desc 'added datetime results' @@ -26,12 +27,31 @@ module Repp raise ActiveRecord::RecordNotFound if user.nil? user.accreditation_date = DateTime.current + user.accreditation_expire_date = user.accreditation_date + EXPIRE_DEADLINE - return unless user.save + if user.save + notify_registrar(user) + notify_admins + render_success(data: { user: user, + result: result, + message: 'Accreditation info successfully added' }) + else + render_failed + end + end - render_success(data: { user: user, - result: result, - message: 'Accreditation info successfully added' }) + def notify_registrar(user) + AccreditationCenterMailer.test_was_successfully_passed_registrar(user.registrar.email).deliver_now + end + + def notify_admins + admin_users_emails = User.all.reject { |u| u.roles.nil? }.select { |u| u.roles.include? "admin" }.pluck(:email) + + return if admin_users_emails.empty? + + admin_users_emails.each do |email| + AccreditationCenterMailer.test_was_successfully_passed_admin(email).deliver_now + end end def authenticate_shared_key diff --git a/app/jobs/notify_accreditation_admins_and_registrars_job.rb b/app/jobs/notify_accreditation_admins_and_registrars_job.rb new file mode 100644 index 000000000..ce1aa62b3 --- /dev/null +++ b/app/jobs/notify_accreditation_admins_and_registrars_job.rb @@ -0,0 +1,29 @@ +class NotifyAccreditationAdminsAndRegistrarsJob < ApplicationJob + MONTH_BEFORE = 5.minute.freeze + + def perform + prepare_data_month_before.each do |user| + next if user.registrar.email.nil? + + AccreditationCenterMailer.test_results_will_expired_in_one_month(user.registrar.email).deliver_now + end + + prepare_data_expired_data.each do |user| + next if user.registrar.email.nil? + + AccreditationCenterMailer.test_results_are_expired(user.registrar.email).deliver_now + end + end + + private + + def prepare_data_month_before + ApiUser.where("accreditation_expire_date > ? AND accreditation_expire_date < ?", + Time.now.beginning_of_day + MONTH_BEFORE, + Time.now.end_of_day + MONTH_BEFORE).includes(:registrar) + end + + def prepare_data_expired_data + ApiUser.where("accreditation_expire_date < ?", Time.now.beginning_of_day).includes(:registrar) + end +end diff --git a/app/mailers/accreditation_center_mailer.rb b/app/mailers/accreditation_center_mailer.rb new file mode 100644 index 000000000..9bfea14e0 --- /dev/null +++ b/app/mailers/accreditation_center_mailer.rb @@ -0,0 +1,21 @@ +class AccreditationCenterMailer < ApplicationMailer + def test_was_successfully_passed_admin(email) + subject = 'Test passed admin' + mail(to: email, subject: subject) + end + + def test_was_successfully_passed_registrar(email) + subject = 'Test passed registrar' + mail(to: email, subject: subject) + end + + def test_results_will_expired_in_one_month(email) + subject = 'Test will expired in one month' + mail(to: email, subject: subject) + end + + def test_results_are_expired(email) + subject = 'Test are expired' + mail(to: email, subject: subject) + end +end diff --git a/app/views/mailers/accreditation_center_mailer/test_results_are_expired.html.erb b/app/views/mailers/accreditation_center_mailer/test_results_are_expired.html.erb new file mode 100644 index 000000000..9b67376d4 --- /dev/null +++ b/app/views/mailers/accreditation_center_mailer/test_results_are_expired.html.erb @@ -0,0 +1 @@ +