mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 20:55:44 +02:00
Merge pull request #1752 from internetee/1751-refactor-client-hold
Move ClientHold procedure to interactor
This commit is contained in:
commit
ee6836eb07
9 changed files with 108 additions and 127 deletions
10
app/interactions/domains/client_hold/base.rb
Normal file
10
app/interactions/domains/client_hold/base.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
module Domains
|
||||
module ClientHold
|
||||
class Base < ActiveInteraction::Base
|
||||
def to_stdout(message)
|
||||
time = Time.zone.now.utc
|
||||
STDOUT << "#{time} - #{message}\n" unless Rails.env.test?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
69
app/interactions/domains/client_hold/process_client_hold.rb
Normal file
69
app/interactions/domains/client_hold/process_client_hold.rb
Normal file
|
@ -0,0 +1,69 @@
|
|||
module Domains
|
||||
module ClientHold
|
||||
class ProcessClientHold < Base
|
||||
object :domain,
|
||||
class: Domain,
|
||||
description: 'Domain to set ClientHold on'
|
||||
|
||||
# rubocop:disable Metrics/AbcSize
|
||||
def execute
|
||||
notify_on_grace_period if should_notify_on_soft_force_delete?
|
||||
|
||||
return unless client_holdable?
|
||||
|
||||
domain.statuses << DomainStatus::CLIENT_HOLD
|
||||
to_stdout("DomainCron.start_client_hold: #{domain.id} (#{domain.name}) #{domain.changes}\n")
|
||||
|
||||
domain.save(validate: false)
|
||||
notify_client_hold
|
||||
|
||||
to_stdout("Successfully set client_hold on (#{domain.name})")
|
||||
end
|
||||
|
||||
def notify_on_grace_period
|
||||
domain.registrar.notifications.create!(text: I18n.t('grace_period_started_domain',
|
||||
domain_name: domain.name,
|
||||
date: domain.force_delete_start))
|
||||
send_mail if domain.template_name.present?
|
||||
domain.update(contact_notification_sent_date: Time.zone.today)
|
||||
end
|
||||
|
||||
def notify_client_hold
|
||||
domain.registrar.notifications.create!(text: I18n.t('force_delete_set_on_domain',
|
||||
domain_name: domain.name,
|
||||
outzone_date: domain.outzone_date,
|
||||
purge_date: domain.purge_date))
|
||||
end
|
||||
|
||||
def send_mail
|
||||
DomainDeleteMailer.forced(domain: domain,
|
||||
registrar: domain.registrar,
|
||||
registrant: domain.registrant,
|
||||
template_name: domain.template_name).deliver_now
|
||||
end
|
||||
|
||||
def should_notify_on_soft_force_delete?
|
||||
domain.force_delete_scheduled? && domain.contact_notification_sent_date.blank? &&
|
||||
domain.force_delete_start.to_date <= Time.zone.now.to_date &&
|
||||
domain.force_delete_type.to_sym == :soft &&
|
||||
!domain.statuses.include?(DomainStatus::CLIENT_HOLD)
|
||||
end
|
||||
# rubocop:enable Metrics/AbcSize
|
||||
|
||||
def client_holdable?
|
||||
domain.force_delete_scheduled? &&
|
||||
!domain.statuses.include?(DomainStatus::CLIENT_HOLD) &&
|
||||
domain.force_delete_start.present? &&
|
||||
force_delete_lte_today && force_delete_lte_valid_date
|
||||
end
|
||||
|
||||
def force_delete_lte_today
|
||||
domain.force_delete_start + Setting.expire_warning_period.days <= Time.zone.now
|
||||
end
|
||||
|
||||
def force_delete_lte_valid_date
|
||||
domain.force_delete_start + Setting.expire_warning_period.days <= domain.valid_to
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
17
app/interactions/domains/client_hold/set_client_hold.rb
Normal file
17
app/interactions/domains/client_hold/set_client_hold.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
module Domains
|
||||
module ClientHold
|
||||
class SetClientHold < Base
|
||||
def execute
|
||||
to_stdout('Setting client_hold to domains\n')
|
||||
|
||||
::PaperTrail.request.whodunnit = "cron - #{self.class.name}"
|
||||
|
||||
::Domain.force_delete_scheduled.each do |domain|
|
||||
Domains::ClientHold::ProcessClientHold.run(domain: domain)
|
||||
end
|
||||
|
||||
to_stdout('All client_hold setting are done\n')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -33,25 +33,6 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength
|
|||
statuses.include?(DomainStatus::FORCE_DELETE)
|
||||
end
|
||||
|
||||
def should_notify_on_soft_force_delete?
|
||||
force_delete_scheduled? && contact_notification_sent_date.blank? &&
|
||||
force_delete_start.to_date <= Time.zone.now.to_date && force_delete_type.to_sym == :soft &&
|
||||
!statuses.include?(DomainStatus::CLIENT_HOLD)
|
||||
end
|
||||
|
||||
def client_holdable?
|
||||
force_delete_scheduled? && !statuses.include?(DomainStatus::CLIENT_HOLD) &&
|
||||
force_delete_start.present? && force_delete_lte_today && force_delete_lte_valid_date
|
||||
end
|
||||
|
||||
def force_delete_lte_today
|
||||
force_delete_start + Setting.expire_warning_period.days <= Time.zone.now
|
||||
end
|
||||
|
||||
def force_delete_lte_valid_date
|
||||
force_delete_start + Setting.expire_warning_period.days <= valid_to
|
||||
end
|
||||
|
||||
def schedule_force_delete(type: :fast_track, notify_by_email: false)
|
||||
Domains::ForceDelete::SetForceDelete.run(domain: self,
|
||||
type: type,
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
module Concerns
|
||||
module Job
|
||||
module ForceDelete
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
def start_client_hold
|
||||
log_prepare_client_hold
|
||||
|
||||
::PaperTrail.request.whodunnit = "cron - #{__method__}"
|
||||
|
||||
::Domain.force_delete_scheduled.each do |domain|
|
||||
proceed_client_hold(domain: domain)
|
||||
end
|
||||
|
||||
log_end_end_force_delete_job
|
||||
end
|
||||
|
||||
def proceed_client_hold(domain:)
|
||||
notify_on_grace_period(domain) if domain.should_notify_on_soft_force_delete?
|
||||
return unless domain.client_holdable?
|
||||
|
||||
domain.statuses << DomainStatus::CLIENT_HOLD
|
||||
log_start_client_hold(domain)
|
||||
|
||||
domain.save(validate: false)
|
||||
notify_client_hold(domain)
|
||||
|
||||
log_end_end_client_hold(domain)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,34 +0,0 @@
|
|||
module Concerns
|
||||
module Job
|
||||
module ForceDeleteLogging
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
def log_prepare_client_hold
|
||||
return if Rails.env.test?
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Setting client_hold to domains\n"
|
||||
end
|
||||
|
||||
def log_start_client_hold(domain)
|
||||
return if Rails.env.test?
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} DomainCron.start_client_hold: ##{domain.id} "\
|
||||
"(#{domain.name}) #{domain.changes}\n"
|
||||
end
|
||||
|
||||
def log_end_end_client_hold(domain)
|
||||
return if Rails.env.test?
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully set client_hold on (#{domain.name})"
|
||||
end
|
||||
|
||||
def log_end_end_force_delete_job
|
||||
return if Rails.env.test?
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - All client_hold setting are done\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,31 +0,0 @@
|
|||
module Concerns
|
||||
module Job
|
||||
module ForceDeleteNotify
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
def notify_client_hold(domain)
|
||||
domain.registrar.notifications.create!(text: I18n.t('force_delete_set_on_domain',
|
||||
domain_name: domain.name,
|
||||
outzone_date: domain.outzone_date,
|
||||
purge_date: domain.purge_date))
|
||||
end
|
||||
|
||||
def notify_on_grace_period(domain)
|
||||
domain.registrar.notifications.create!(text: I18n.t('grace_period_started_domain',
|
||||
domain_name: domain.name,
|
||||
date: domain.force_delete_start))
|
||||
send_mail(domain) if domain.template_name.present?
|
||||
domain.update(contact_notification_sent_date: Time.zone.today)
|
||||
end
|
||||
|
||||
def send_mail(domain)
|
||||
DomainDeleteMailer.forced(domain: domain,
|
||||
registrar: domain.registrar,
|
||||
registrant: domain.registrant,
|
||||
template_name: domain.template_name).deliver_now
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,8 +1,4 @@
|
|||
class DomainCron
|
||||
include Concerns::Job::ForceDelete
|
||||
include Concerns::Job::ForceDeleteLogging
|
||||
include Concerns::Job::ForceDeleteNotify
|
||||
|
||||
def self.clean_expired_pendings
|
||||
STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
|
||||
|
||||
|
@ -81,4 +77,8 @@ class DomainCron
|
|||
STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{marked} of #{real} domains\n" unless Rails.env.test?
|
||||
marked
|
||||
end
|
||||
|
||||
def self.start_client_hold
|
||||
Domains::ClientHold::SetClientHold.run!
|
||||
end
|
||||
end
|
||||
|
|
|
@ -206,9 +206,10 @@ class ForceDeleteTest < ActionMailer::TestCase
|
|||
@domain.schedule_force_delete(type: :soft)
|
||||
|
||||
travel_to Time.zone.parse('2010-08-21')
|
||||
DomainCron.start_client_hold
|
||||
Domains::ClientHold::SetClientHold.run!
|
||||
@domain.reload
|
||||
|
||||
assert_emails 1
|
||||
assert_equal(@domain.purge_date.to_date, @domain.force_delete_date.to_date)
|
||||
assert_equal(@domain.outzone_date.to_date, @domain.force_delete_start.to_date +
|
||||
Setting.expire_warning_period.days)
|
||||
|
@ -226,8 +227,10 @@ class ForceDeleteTest < ActionMailer::TestCase
|
|||
@domain.schedule_force_delete(type: :soft)
|
||||
|
||||
travel_to Time.zone.parse('2010-08-21')
|
||||
DomainCron.start_client_hold
|
||||
Domains::ClientHold::SetClientHold.run!
|
||||
@domain.reload
|
||||
|
||||
assert_emails 1
|
||||
assert_includes(@domain.statuses, asserted_status)
|
||||
end
|
||||
|
||||
|
@ -241,7 +244,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
|||
@domain.schedule_force_delete(type: :soft)
|
||||
|
||||
travel_to Time.zone.parse('2010-07-06')
|
||||
DomainCron.start_client_hold
|
||||
Domains::ClientHold::SetClientHold.run!
|
||||
@domain.reload
|
||||
|
||||
assert_not_includes(@domain.statuses, asserted_status)
|
||||
|
@ -256,7 +259,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
|||
|
||||
@domain.schedule_force_delete(type: :fast_track)
|
||||
travel_to Time.zone.parse('2010-07-25')
|
||||
DomainCron.start_client_hold
|
||||
Domains::ClientHold::SetClientHold.run!
|
||||
@domain.reload
|
||||
|
||||
assert_includes(@domain.statuses, asserted_status)
|
||||
|
@ -272,7 +275,7 @@ class ForceDeleteTest < ActionMailer::TestCase
|
|||
|
||||
@domain.schedule_force_delete(type: :fast_track)
|
||||
travel_to Time.zone.parse('2010-07-06')
|
||||
DomainCron.start_client_hold
|
||||
Domains::ClientHold::SetClientHold.run!
|
||||
@domain.reload
|
||||
|
||||
assert_not_includes(@domain.statuses, asserted_status)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue