From 03754b542b917fb6f10209f40a20ee038b610f5b Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Tue, 10 Nov 2020 13:50:38 +0500 Subject: [PATCH] Complete creation of interactors --- .../admin/domains/force_delete_controller.rb | 18 ++++++----- .../domain/force_delete/check_discarded.rb | 4 +-- .../domain/force_delete/notify_by_email.rb | 31 +++++++++++++++++++ .../domain/force_delete/notify_registrar.rb | 16 ++++++++++ .../domain/force_delete/prepare_domain.rb | 6 +++- .../domain/force_delete/set_status.rb | 5 ++- app/models/concerns/domain/force_delete.rb | 15 +++++---- 7 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 app/interactors/domain/force_delete/notify_by_email.rb create mode 100644 app/interactors/domain/force_delete/notify_registrar.rb diff --git a/app/controllers/admin/domains/force_delete_controller.rb b/app/controllers/admin/domains/force_delete_controller.rb index 6a111926f..ca5588964 100644 --- a/app/controllers/admin/domains/force_delete_controller.rb +++ b/app/controllers/admin/domains/force_delete_controller.rb @@ -5,19 +5,21 @@ module Admin authorize! :manage, domain domain.transaction do - domain.schedule_force_delete(type: force_delete_type) - domain.registrar.notifications.create!(text: t('force_delete_set_on_domain', - domain_name: domain.name, - outzone_date: domain.outzone_date, - purge_date: domain.purge_date)) - - notify_by_email if notify_by_email? + # domain.schedule_force_delete(type: force_delete_type) + # domain.registrar.notifications.create!(text: t('force_delete_set_on_domain', + # domain_name: domain.name, + # outzone_date: domain.outzone_date, + # purge_date: domain.purge_date)) # added to interactor + # + # notify_by_email if notify_by_email? # added to interactor + Domain::ForceDelete::Base.call(domain: domain, type: force_delete_type) end redirect_to edit_admin_domain_url(domain), notice: t('.scheduled') end def notify_by_email + # added to interactor if force_delete_type == :fast_track send_email domain.update(contact_notification_sent_date: Time.zone.today) @@ -39,10 +41,12 @@ module Admin end def notify_by_email? + # added to interactor ActiveRecord::Type::Boolean.new.cast(params[:notify_by_email]) end def send_email + # added to interactor DomainDeleteMailer.forced(domain: domain, registrar: domain.registrar, registrant: domain.registrant, diff --git a/app/interactors/domain/force_delete/check_discarded.rb b/app/interactors/domain/force_delete/check_discarded.rb index a13c16778..ac2cd31b6 100644 --- a/app/interactors/domain/force_delete/check_discarded.rb +++ b/app/interactors/domain/force_delete/check_discarded.rb @@ -6,8 +6,8 @@ class Domain def call return unless context.domain.discarded? - raise StandardError, - 'Force delete procedure cannot be scheduled while a domain is discarded' + message = 'Force delete procedure cannot be scheduled while a domain is discarded' + context.fail!( message: message ) end end end diff --git a/app/interactors/domain/force_delete/notify_by_email.rb b/app/interactors/domain/force_delete/notify_by_email.rb new file mode 100644 index 000000000..949dd5838 --- /dev/null +++ b/app/interactors/domain/force_delete/notify_by_email.rb @@ -0,0 +1,31 @@ +class Domain + module ForceDelete + class NotifyByEmail + include Interactor + + def call + return unless notify_by_email? + + if context.type == :fast_track + send_email + context.domain.update(contact_notification_sent_date: Time.zone.today) + else + context.domain.update(template_name: context.domain.notification_template) + end + end + + private + + def notify_by_email? + ActiveRecord::Type::Boolean.new.cast(params[:notify_by_email]) + end + + def send_email + DomainDeleteMailer.forced(domain: context.domain, + registrar: context.domain.registrar, + registrant: context.domain.registrant, + template_name: context.domain.notification_template).deliver_now + end + end + end +end diff --git a/app/interactors/domain/force_delete/notify_registrar.rb b/app/interactors/domain/force_delete/notify_registrar.rb new file mode 100644 index 000000000..345f4d7eb --- /dev/null +++ b/app/interactors/domain/force_delete/notify_registrar.rb @@ -0,0 +1,16 @@ +class Domain + module ForceDelete + class NotifyRegistrar + include Interactor + + def call + domain = context.domain + + domain.registrar.notifications.create!(text: t('force_delete_set_on_domain', + domain_name: domain.name, + outzone_date: domain.outzone_date, + purge_date: domain.purge_date)) + end + end + end +end diff --git a/app/interactors/domain/force_delete/prepare_domain.rb b/app/interactors/domain/force_delete/prepare_domain.rb index 4b3b83064..3bc764dc8 100644 --- a/app/interactors/domain/force_delete/prepare_domain.rb +++ b/app/interactors/domain/force_delete/prepare_domain.rb @@ -3,10 +3,14 @@ class Domain class PrepareDomain include Interactor + STATUSES_TO_SET = [DomainStatus::FORCE_DELETE, + DomainStatus::SERVER_RENEW_PROHIBITED, + DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze + def call domain = context.domain domain.statuses_before_force_delete = domain.statuses - domain.statuses |= domain.class.STATUSES_TO_SET + domain.statuses |= STATUSES_TO_SET domain.save(validate: false) end end diff --git a/app/interactors/domain/force_delete/set_status.rb b/app/interactors/domain/force_delete/set_status.rb index 7ce481623..2a6c49daa 100644 --- a/app/interactors/domain/force_delete/set_status.rb +++ b/app/interactors/domain/force_delete/set_status.rb @@ -16,7 +16,10 @@ class Domain end def force_delete_fast_track - domain.force_delete_date = force_delete_fast_track_start_date + 1.day + domain.force_delete_date = Time.zone.today + + Setting.expire_warning_period.days + + Setting.redemption_grace_period.days + + 1.day domain.force_delete_start = Time.zone.today + 1.day end diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index c6f9b598f..768b1d11b 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -7,10 +7,6 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength :contact_notification_sent_date, :template_name - STATUSES_TO_SET = [DomainStatus::FORCE_DELETE, - DomainStatus::SERVER_RENEW_PROHIBITED, - DomainStatus::SERVER_TRANSFER_PROHIBITED].freeze - scope :notification_not_sent, lambda { where("(force_delete_data->>'contact_notification_sent_date') is null") @@ -57,6 +53,7 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength end def schedule_force_delete(type: :fast_track) + # added to interactor if discarded? raise StandardError, 'Force delete procedure cannot be scheduled while a domain is discarded' end @@ -72,8 +69,8 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength preserve_current_statuses_for_force_delete add_force_delete_statuses add_force_delete_type(:fast) - self.force_delete_date = force_delete_fast_track_start_date + 1.day - self.force_delete_start = Time.zone.today + 1.day + self.force_delete_date = force_delete_fast_track_start_date + 1.day # added to interactor + self.force_delete_start = Time.zone.today + 1.day # added to interactor stop_all_pending_actions allow_deletion save(validate: false) @@ -120,12 +117,14 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength end def soft_delete_dates(years) + # added to interactor self.force_delete_start = valid_to - years.years self.force_delete_date = force_delete_start + Setting.expire_warning_period.days + Setting.redemption_grace_period.days end def stop_all_pending_actions + # added to interactor statuses.delete(DomainStatus::PENDING_UPDATE) statuses.delete(DomainStatus::PENDING_TRANSFER) statuses.delete(DomainStatus::PENDING_RENEW) @@ -133,6 +132,7 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength end def preserve_current_statuses_for_force_delete + # added to interactor update(statuses_before_force_delete: statuses) end @@ -142,6 +142,7 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength end def add_force_delete_statuses + # added to interactor self.statuses |= [DomainStatus::FORCE_DELETE, DomainStatus::SERVER_RENEW_PROHIBITED, DomainStatus::SERVER_TRANSFER_PROHIBITED] @@ -155,11 +156,13 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength end def allow_deletion + # added to interactor statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) end def force_delete_fast_track_start_date + # added to interactor Time.zone.today + Setting.expire_warning_period.days + Setting.redemption_grace_period.days end end