internetee/registry

View on GitHub
app/interactions/domains/delete_confirm/process_delete_confirmed.rb

Summary

Maintainability
A
0 mins
Test Coverage
F
41%
module Domains
  module DeleteConfirm
    class ProcessDeleteConfirmed < Base
      def execute
        notify_registrar(:poll_pending_delete_confirmed_by_registrant)
        domain.apply_pending_delete!
        raise_errors!(domain)
      end

      def apply_pending_delete!
        preclean_pendings
        clean_pendings!
        DomainDeleteMailer.accepted(domain).deliver_now
        domain.set_pending_delete!
      end

      def set_pending_delete!
        unless domain.pending_deletable?
          add_epp_error
          return
        end

        domain.delete_date = delete_date
        domain.statuses << DomainStatus::PENDING_DELETE
        set_server_hold if server_holdable?
        domain.save(validate: false)
      end

      def set_server_hold
        domain.statuses << DomainStatus::SERVER_HOLD
        domain.outzone_at = Time.current
      end

      def server_holdable?
        return false if domain.statuses.include?(DomainStatus::SERVER_HOLD)
        return false if domain.statuses.include?(DomainStatus::SERVER_MANUAL_INZONE)

        true
      end

      def delete_date
        Time.zone.today + Setting.redemption_grace_period.days + 1.day
      end

      def add_epp_error
        domain.add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
      end
    end
  end
end