diff --git a/app/interactions/cancel_force_delete_interaction/base.rb b/app/interactions/cancel_force_delete_interaction/base.rb new file mode 100644 index 000000000..595279d87 --- /dev/null +++ b/app/interactions/cancel_force_delete_interaction/base.rb @@ -0,0 +1,7 @@ +module CancelForceDeleteInteraction + class Base < ActiveInteraction::Base + object :domain, + class: Domain, + description: 'Domain to cancel ForceDelete on' + end +end diff --git a/app/interactions/cancel_force_delete_interaction/cancel_force_delete.rb b/app/interactions/cancel_force_delete_interaction/cancel_force_delete.rb new file mode 100644 index 000000000..2f45bf0e4 --- /dev/null +++ b/app/interactions/cancel_force_delete_interaction/cancel_force_delete.rb @@ -0,0 +1,10 @@ +module CancelForceDeleteInteraction + class CancelForceDelete < Base + def execute + compose(RemoveForceDeleteStatuses, inputs) + compose(RestoreStatusesBeforeForceDelete, inputs) + compose(ClearForceDeleteData, inputs) + compose(NotifyRegistrar, inputs) + end + end +end diff --git a/app/interactions/cancel_force_delete_interaction/clear_force_delete_data.rb b/app/interactions/cancel_force_delete_interaction/clear_force_delete_data.rb new file mode 100644 index 000000000..ccc0714f7 --- /dev/null +++ b/app/interactions/cancel_force_delete_interaction/clear_force_delete_data.rb @@ -0,0 +1,10 @@ +module CancelForceDeleteInteraction + class ClearForceDeleteData < Base + def execute + domain.force_delete_data = nil + domain.force_delete_date = nil + domain.force_delete_start = nil + domain.save(validate: false) + end + end +end diff --git a/app/interactions/cancel_force_delete_interaction/notify_registrar.rb b/app/interactions/cancel_force_delete_interaction/notify_registrar.rb new file mode 100644 index 000000000..3ded4c489 --- /dev/null +++ b/app/interactions/cancel_force_delete_interaction/notify_registrar.rb @@ -0,0 +1,8 @@ +module CancelForceDeleteInteraction + class NotifyRegistrar < Base + def execute + domain.registrar.notifications.create!(text: I18n.t('force_delete_cancelled', + domain_name: domain.name)) + end + end +end diff --git a/app/interactions/cancel_force_delete_interaction/remove_force_delete_statuses.rb b/app/interactions/cancel_force_delete_interaction/remove_force_delete_statuses.rb new file mode 100644 index 000000000..1cc4989e5 --- /dev/null +++ b/app/interactions/cancel_force_delete_interaction/remove_force_delete_statuses.rb @@ -0,0 +1,11 @@ +module CancelForceDeleteInteraction + class RemoveForceDeleteStatuses < Base + def execute + domain.statuses.delete(DomainStatus::FORCE_DELETE) + domain.statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) + domain.statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) + domain.statuses.delete(DomainStatus::CLIENT_HOLD) + domain.save(validate: false) + end + end +end diff --git a/app/interactions/cancel_force_delete_interaction/restore_statuses_before_force_delete.rb b/app/interactions/cancel_force_delete_interaction/restore_statuses_before_force_delete.rb new file mode 100644 index 000000000..06b6bbd18 --- /dev/null +++ b/app/interactions/cancel_force_delete_interaction/restore_statuses_before_force_delete.rb @@ -0,0 +1,9 @@ +module CancelForceDeleteInteraction + class RestoreStatusesBeforeForceDelete < Base + def execute + domain.statuses = domain.statuses_before_force_delete + domain.statuses_before_force_delete = nil + domain.save(validate: false) + end + end +end diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index b119b0ce0..ff869fc0a 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -58,18 +58,8 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength notify_by_email: notify_by_email) end - def clear_force_delete_data - self.force_delete_data = nil - end - def cancel_force_delete - remove_force_delete_statuses - restore_statuses_before_force_delete - clear_force_delete_data - self.force_delete_date = nil - self.force_delete_start = nil - save(validate: false) - registrar.notifications.create!(text: I18n.t('force_delete_cancelled', domain_name: name)) + CancelForceDeleteInteraction::CancelForceDelete.run(domain: self) end def outzone_date @@ -80,18 +70,4 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength (force_delete_date&.beginning_of_day || valid_to + Setting.expire_warning_period.days + Setting.redemption_grace_period.days) end - - private - - def restore_statuses_before_force_delete - self.statuses = statuses_before_force_delete - self.statuses_before_force_delete = nil - end - - def remove_force_delete_statuses - statuses.delete(DomainStatus::FORCE_DELETE) - statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) - statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) - statuses.delete(DomainStatus::CLIENT_HOLD) - end end