prey/gdpr_rails

View on GitHub
app/models/policy_manager/portability_request.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "aasm"

module PolicyManager
  class PortabilityRequest < ApplicationRecord

    belongs_to :user, class_name: Config.user_resource.to_s, foreign_key:  :user_id

    if PolicyManager::Config.paperclip
      include PolicyManager::Concerns::PaperclipBehavior 
    else
      include PolicyManager::Concerns::ActiveStorageBehavior
    end

    include AASM

    aasm column: :state do
      state :pending, :initial => true, :after_enter => :notify_progress_to_admin
      state :progress, :after_enter => :handle_progress
      state :completed, :after_enter => :notify_completeness

      event :confirm do
        transitions from: :pending, to: :progress
      end

      event :complete do
        transitions from: :progress, to: :completed
      end
    end

    def user_email
      self.user.email
    end

    def handle_progress
      notify_progress
      perform_job
    end

    def perform_job
      ExporterJob.set(queue: :default).perform_later(self.user.id)
    end

    def notify_progress
      PortabilityMailer.progress_notification(self.id).deliver_now
    end

    def notify_progress_to_admin
      PortabilityMailer.admin_notification(self.user.id).deliver_now
    end

    def notify_completeness
      PortabilityMailer.completed_notification(self.id).deliver_now
    end

  end
end