From ff1dded49f16ec57ab761d45c359ff073cdf64c2 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Sun, 14 Aug 2022 13:16:47 -0300 Subject: [PATCH] Fix check force delete lift bug --- app/jobs/check_force_delete_job.rb | 36 ++---------------------------- app/models/validation_event.rb | 33 +++++++++++++++++++++++++++ lib/tasks/check_force_delete.rake | 3 +-- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/app/jobs/check_force_delete_job.rb b/app/jobs/check_force_delete_job.rb index 5fb3408f1..f8997416d 100644 --- a/app/jobs/check_force_delete_job.rb +++ b/app/jobs/check_force_delete_job.rb @@ -3,41 +3,9 @@ class CheckForceDeleteJob < ApplicationJob contacts = Contact.find(contact_ids) contacts.each do |contact| - email = contact.email + next unless contact.need_to_start_force_delete? - if contact.need_to_start_force_delete? - Domains::ForceDeleteEmail::Base.run(email: email) - elsif contact.need_to_lift_force_delete? - domain_list(email).each { |domain| refresh_status_notes(contact, domain) } - end + Domains::ForceDeleteEmail::Base.run(email: contact.email) end end - - private - - def refresh_status_notes(contact, domain) - force_delete_emails = domain.status_notes[DomainStatus::FORCE_DELETE] - return unless force_delete_emails - - force_delete_emails.slice!(contact.email_history) - force_delete_emails.lstrip! - domain.save(validate: false) - - notify_registrar(domain) unless force_delete_emails.empty? - end - - def domain_list(email) - domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten - registrant_ids = Registrant.where(email: email).pluck(:id) - - (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq - end - - def notify_registrar(domain) - domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', - domain_name: domain.name, - outzone_date: domain.outzone_date, - purge_date: domain.purge_date, - email: domain.status_notes[DomainStatus::FORCE_DELETE])) - end end diff --git a/app/models/validation_event.rb b/app/models/validation_event.rb index 3e7670fac..c1b413ed0 100644 --- a/app/models/validation_event.rb +++ b/app/models/validation_event.rb @@ -35,6 +35,8 @@ class ValidationEvent < ApplicationRecord scope :smtp, -> { where('event_data @> ?', { 'check_level': 'smtp' }.to_json) } scope :by_object, ->(object) { where(validation_eventable: object) } + after_create :check_force_delete_lift + def self.validated_ids_by(klass) old_records .successful @@ -57,4 +59,35 @@ class ValidationEvent < ApplicationRecord def object validation_eventable end + + private + + def check_force_delete_lift + return unless object.need_to_lift_force_delete? + + domain_list.each do |domain| + next unless domain.status_notes[DomainStatus::FORCE_DELETE] + + domain.status_notes[DomainStatus::FORCE_DELETE].slice!(object.email_history) + domain.status_notes[DomainStatus::FORCE_DELETE].lstrip! + domain.save(validate: false) + + notify_registrar(domain) unless domain.status_notes[DomainStatus::FORCE_DELETE].empty? + end + end + + def domain_list + domain_contacts = Contact.where(email: email).map(&:domain_contacts).flatten + registrant_ids = Registrant.where(email: email).pluck(:id) + + (domain_contacts.map(&:domain).flatten + Domain.where(registrant_id: registrant_ids)).uniq + end + + def notify_registrar(domain) + domain.registrar.notifications.create!(text: I18n.t('force_delete_auto_email', + domain_name: domain.name, + outzone_date: domain.outzone_date, + purge_date: domain.purge_date, + email: domain.status_notes[DomainStatus::FORCE_DELETE])) + end end diff --git a/lib/tasks/check_force_delete.rake b/lib/tasks/check_force_delete.rake index dcaf2c72c..8c764a930 100644 --- a/lib/tasks/check_force_delete.rake +++ b/lib/tasks/check_force_delete.rake @@ -3,8 +3,7 @@ task check_force_delete: :environment do validations = ValidationEvent.failed.where(validation_eventable_type: 'Contact').uniq(&:validation_eventable_id) invalid_contact_ids = validations.select do |validation| - contact = validation.validation_eventable - contact.need_to_start_force_delete? || contact.need_to_lift_force_delete? + validation.validation_eventable.need_to_start_force_delete? end.pluck(:validation_eventable_id) CheckForceDeleteJob.perform_later(invalid_contact_ids) if invalid_contact_ids.present?