diff --git a/app/services/gpo_reminder_sender.rb b/app/services/gpo_reminder_sender.rb index d07a8d2d263..32dcf07a20d 100644 --- a/app/services/gpo_reminder_sender.rb +++ b/app/services/gpo_reminder_sender.rb @@ -1,16 +1,11 @@ class GpoReminderSender + LOCAL_DATABASE_TIMEOUT = 60_000 + def send_emails(for_letters_sent_before) letter_eligible_range = IdentityConfig.store.usps_confirmation_max_days.days.ago..for_letters_sent_before - profiles_due_for_reminder = Profile.joins(:gpo_confirmation_codes). - where( - gpo_verification_pending_at: letter_eligible_range, - gpo_confirmation_codes: { reminder_sent_at: nil }, - deactivation_reason: [nil, :in_person_verification_pending], - ) - - profiles_due_for_reminder.each do |profile| + profiles_due_for_reminder(letter_eligible_range).each do |profile| profile.user.send_email_to_all_addresses(:gpo_reminder) profile.gpo_confirmation_codes.first.update(reminder_sent_at: Time.zone.now) analytics.idv_gpo_reminder_email_sent(user_id: profile.user.uuid) @@ -19,6 +14,21 @@ def send_emails(for_letters_sent_before) private + def profiles_due_for_reminder(letter_eligible_range) + ActiveRecord::Base.transaction do + ActiveRecord::Base.connection.execute( + "SET LOCAL statement_timeout = #{LOCAL_DATABASE_TIMEOUT}", + ) + + Profile.joins(:gpo_confirmation_codes). + where( + gpo_verification_pending_at: letter_eligible_range, + gpo_confirmation_codes: { reminder_sent_at: nil }, + deactivation_reason: [nil, :in_person_verification_pending], + ) + end + end + def analytics Analytics.new(user: AnonymousUser.new, request: nil, session: {}, sp: nil) end diff --git a/config/initializers/job_configurations.rb b/config/initializers/job_configurations.rb index 8d62b722c2b..f027a9ee2d9 100644 --- a/config/initializers/job_configurations.rb +++ b/config/initializers/job_configurations.rb @@ -189,6 +189,12 @@ cron: cron_24h, args: -> { [Time.zone.today] }, }, + # Send reminder letters for old, outstanding GPO verification codes + send_gpo_code_reminders: { + class: 'GpoReminderJob', + cron: cron_24h, + args: -> { [14.days.ago] }, + }, monthly_account_reuse_report: { class: 'Reports::MonthlyAccountReuseReport', cron: cron_1st_of_mo,