47 lines
		
	
	
		
			962 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			962 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class MergeWorker
 | 
						|
  include Sidekiq::Worker
 | 
						|
  include Redisable
 | 
						|
  include DatabaseHelper
 | 
						|
 | 
						|
  def perform(from_account_id, into_id, type = 'home')
 | 
						|
    with_primary do
 | 
						|
      @from_account = Account.find(from_account_id)
 | 
						|
    end
 | 
						|
 | 
						|
    case type
 | 
						|
    when 'home'
 | 
						|
      merge_into_home!(into_id)
 | 
						|
    when 'list'
 | 
						|
      merge_into_list!(into_id)
 | 
						|
    end
 | 
						|
  rescue ActiveRecord::RecordNotFound
 | 
						|
    true
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def merge_into_home!(into_account_id)
 | 
						|
    with_primary do
 | 
						|
      @into_account = Account.find(into_account_id)
 | 
						|
    end
 | 
						|
 | 
						|
    with_read_replica do
 | 
						|
      FeedManager.instance.merge_into_home(@from_account, @into_account)
 | 
						|
    end
 | 
						|
  ensure
 | 
						|
    redis.del("account:#{into_account_id}:regeneration")
 | 
						|
  end
 | 
						|
 | 
						|
  def merge_into_list!(into_list_id)
 | 
						|
    with_primary do
 | 
						|
      @into_list = List.find(into_list_id)
 | 
						|
    end
 | 
						|
 | 
						|
    with_read_replica do
 | 
						|
      FeedManager.instance.merge_into_list(@from_account, @into_list)
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |