added possebility to recheck invalid contacts and also remove old records

This commit is contained in:
olegphenomenon 2021-12-17 16:00:08 +02:00
parent 1ec79afb11
commit 761ce9bd6d
3 changed files with 44 additions and 10 deletions

View file

@ -16,6 +16,7 @@ module Actions
maybe_update_ident if ident.present? maybe_update_ident if ident.present?
maybe_attach_legal_doc maybe_attach_legal_doc
maybe_change_email maybe_change_email
maybe_filtering_old_failed_records
commit commit
end end
@ -35,6 +36,15 @@ module Actions
true true
end end
def maybe_filtering_old_failed_records
if contact.validation_events.count > 1
contact.validation_events.order!(created_at: :asc)
while contact.validation_events.count >= 1
contact.validation_events.first.destroy
end
end
end
def maybe_remove_address def maybe_remove_address
return if Contact.address_processing? return if Contact.address_processing?

View file

@ -11,6 +11,7 @@ module Actions
def call def call
result = check_email(email) result = check_email(email)
save_result(result) save_result(result)
filtering_old_failed_records(result)
result.success ? log_success : log_failure(result) result.success ? log_success : log_failure(result)
result.success result.success
end end
@ -25,6 +26,29 @@ module Actions
Rails.env.test? && check_level == 'smtp' ? :mx : check_level.to_sym Rails.env.test? && check_level == 'smtp' ? :mx : check_level.to_sym
end end
def filtering_old_failed_records(result)
if @check_level == "mx" && !result.success && validation_eventable.validation_events.count > 3
validation_eventable.validation_events.order!(created_at: :asc)
while validation_eventable.validation_events.count > 3
validation_eventable.validation_events.first.destroy
end
end
if @check_level == "mx" && result.success && validation_eventable.validation_events.count > 1
validation_eventable.validation_events.order!(created_at: :asc)
while validation_eventable.validation_events.count > 1
validation_eventable.validation_events.first.destroy
end
end
if @check_level == "smtp" && validation_eventable.validation_events.count > 1
validation_eventable.validation_events.order!(created_at: :asc)
while validation_eventable.validation_events.count > 1
validation_eventable.validation_events.first.destroy
end
end
end
def save_result(result) def save_result(result)
validation_eventable.validation_events.create(validation_event_attrs(result)) validation_eventable.validation_events.create(validation_event_attrs(result))
rescue ActiveRecord::RecordNotSaved rescue ActiveRecord::RecordNotSaved

View file

@ -71,9 +71,9 @@ def filter_check_level(contact)
if data.failed? if data.failed?
return false if data.event_data['check_level'] == 'regex' return false if data.event_data['check_level'] == 'regex'
return false if data.event_data['check_level'] == 'smtp' # return false if data.event_data['check_level'] == 'smtp'
#
return false if check_mx_contact_validation(contact) # return false if check_mx_contact_validation(contact)
return true return true
end end
@ -92,13 +92,13 @@ def failed_contacts
failed_contacts.uniq failed_contacts.uniq
end end
def check_mx_contact_validation(contact) # def check_mx_contact_validation(contact)
data = contact.validation_events.mx.order(created_at: :asc).last(ValidationEvent::MX_CHECK) # data = contact.validation_events.mx.order(created_at: :asc).last(ValidationEvent::MX_CHECK)
#
return false if data.size < ValidationEvent::MX_CHECK # return false if data.size < ValidationEvent::MX_CHECK
#
data.all? { |d| d.failed? } # data.all? { |d| d.failed? }
end # end
def contacts_by_domain(domain_name) def contacts_by_domain(domain_name)
domain = ::Domain.find_by(name: domain_name) domain = ::Domain.find_by(name: domain_name)