Add prototype of FD lifting interaction

This commit is contained in:
Alex Sherman 2021-04-06 09:20:43 +05:00
parent 90cb154d15
commit 6383dede4b
2 changed files with 36 additions and 3 deletions

View file

@ -0,0 +1,31 @@
module Domains
module ForceDeleteLift
class Base < ActiveInteraction::Base
string :email,
description: 'Email to check if ForceDelete needs to be lifted'
def execute
domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten
registrant_ids = Registrant.where(email: email).pluck(:id)
domains = domain_contacts.map(&:domain).flatten +
Domain.where(registrant_id: registrant_ids)
domains.each { |domain| lift_force_delete(domain) if force_delete_condition(domain) }
end
private
def lift_force_delete(domain)
domain.cancel_force_delete
end
def force_delete_condition(domain)
domain.force_delete_scheduled? &&
domain.template_name == 'invalid_email' &&
domain.contacts.all? { |contact| contact.email_verification.verified? } &&
domain.registrant.email_verification.verified?
end
end
end
end

View file

@ -42,9 +42,11 @@ class EmailAddressVerification < ApplicationRecord
end
def check_force_delete
return unless failed?
Domains::ForceDeleteEmail::Base.run(email: email)
if failed?
Domains::ForceDeleteEmail::Base.run(email: email)
else
Domains::ForceDeleteLift::Base.run(email: email)
end
end
def verify