From 95a017629eabdf7b19b2787ebc57e411b1a202a5 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Fri, 5 Jun 2020 17:36:37 +0500 Subject: [PATCH] Add email verification job --- app/jobs/verify_emails_job.rb | 43 ++++++++++++++++++++++++ app/models/email_address_verification.rb | 3 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 app/jobs/verify_emails_job.rb diff --git a/app/jobs/verify_emails_job.rb b/app/jobs/verify_emails_job.rb new file mode 100644 index 000000000..4aedddb94 --- /dev/null +++ b/app/jobs/verify_emails_job.rb @@ -0,0 +1,43 @@ +class SendEInvoiceJob < Que::Job + + def run(verification_id) + email_address_verification = run_condition(EmailAddressVerification + .find(run_condition(verification_id))) + + ActiveRecord::Base.transaction do + email_address_verification.verify + log_success(email_address_verification) + destroy + end + rescue StandardError => e + log_error(verification: email_address_verification, error: e) + raise e + end + + private + + def run_condition(email_address_verification) + destroy if email_address_verification.recently_verified? + email_address_verification + end + + def logger + Rails.logger + end + + def log_success(verification) + email = verification.try(:email) || verification + message = "Email address #{email} verified successfully" + logger.info message + end + + def log_error(verification:, error:) + email = verification.try(:email) || verification + message = <<~TEXT.squish + There was an error verifying email #{email}. + The error message was the following: #{error} + This job will retry. + TEXT + logger.error message + end +end diff --git a/app/models/email_address_verification.rb b/app/models/email_address_verification.rb index 4fa523764..8afc74a78 100644 --- a/app/models/email_address_verification.rb +++ b/app/models/email_address_verification.rb @@ -3,7 +3,8 @@ class EmailAddressVerification < ApplicationRecord RECENTLY_VERIFIED_PERIOD = 1.month def recently_verified? - verified_at > Time.zone.now - RECENTLY_VERIFIED_PERIOD + verified_at.present? && + verified_at > Time.zone.now - RECENTLY_VERIFIED_PERIOD end def verify