notify_activity_to_profiles_job.rb 1.18 KB
class NotifyActivityToProfilesJob < Struct.new(:tracked_action_id)
  NOTIFY_ONLY_COMMUNITY = [
    'add_member_in_community',
    'remove_member_in_community',
  ]

  NOT_NOTIFY_COMMUNITY = [
    'join_community',
    'leave_community',
  ]
  def perform
    tracked_action = ActionTracker::Record.find(tracked_action_id)
    target = tracked_action.target
    if target.is_a?(Community) && NOTIFY_ONLY_COMMUNITY.include?(tracked_action.verb)
      ActionTrackerNotification.create(:action_tracker => tracked_action, :profile => target)
      return
    end

    ActionTrackerNotification.create(:action_tracker => tracked_action, :profile => tracked_action.user)
    tracked_action.user.each_friend do |friend|
      ActionTrackerNotification.create(:action_tracker => tracked_action, :profile => friend)
    end

    if target.is_a?(Community)
      target.each_member do |member|
        next if member == tracked_action.user
        ActionTrackerNotification.create(:action_tracker => tracked_action, :profile => member)
      end
      ActionTrackerNotification.create(:action_tracker => tracked_action, :profile => target) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb)
    end
  end
end