zammad/zammad

View on GitHub
lib/sequencer/unit/import/freshdesk/agent/mapping.rb

Summary

Maintainability
A
0 mins
Test Coverage
# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/

class Sequencer::Unit::Import::Freshdesk::Agent::Mapping < Sequencer::Unit::Base
  include ::Sequencer::Unit::Import::Common::Mapping::Mixin::ProvideMapped
  extend ::Sequencer::Unit::Import::Freshdesk::Requester

  uses :resource, :id_map

  def process
    contact = resource['contact']

    provide_mapped do
      {
        login:      contact['email'],
        firstname:  contact['name'],
        lastname:   '', # makes sure name guessing is triggered for updating existing users.
        email:      contact['email'],
        phone:      contact['phone'],
        active:     !contact['deleted'],
        group_ids:  group_ids,
        password:   password,
        last_login: contact['last_login_at'],
        role_ids:   ::Role.where(name: role_names).pluck(:id),
      }
    end
  end

  def self.admin_id
    @admin_id ||= begin
      token_user = self.token_user
      token_user.try(:[], 'id')
    end
  end

  def self.token_user
    response = request(
      api_path: 'agents/me',
    )

    JSON.parse(response.body)
  rescue => e
    logger.error e
    nil
  end

  private

  def group_ids
    Array(resource['group_ids']).map do |group_id|
      id_map['Group'][group_id]
    end
  end

  def role_names
    return %w[Agent Admin] if token_user?

    'Agent'
  end

  def password
    return Setting.get('import_freshdesk_endpoint_key') if token_user?

    nil
  end

  def token_user?
    self.class.admin_id == resource['id']
  end
end