57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
# == Schema Information
 | 
						|
#
 | 
						|
# Table name: relationship_severance_events
 | 
						|
#
 | 
						|
#  id          :bigint(8)        not null, primary key
 | 
						|
#  type        :integer          not null
 | 
						|
#  target_name :string           not null
 | 
						|
#  purged      :boolean          default(FALSE), not null
 | 
						|
#  created_at  :datetime         not null
 | 
						|
#  updated_at  :datetime         not null
 | 
						|
#
 | 
						|
class RelationshipSeveranceEvent < ApplicationRecord
 | 
						|
  self.inheritance_column = nil
 | 
						|
 | 
						|
  has_many :severed_relationships, inverse_of: :relationship_severance_event, dependent: :delete_all
 | 
						|
 | 
						|
  enum :type, {
 | 
						|
    domain_block: 0,
 | 
						|
    user_domain_block: 1,
 | 
						|
    account_suspension: 2,
 | 
						|
  }
 | 
						|
 | 
						|
  scope :about_local_account, ->(account) { where(id: SeveredRelationship.about_local_account(account).select(:relationship_severance_event_id)) }
 | 
						|
 | 
						|
  def import_from_active_follows!(follows)
 | 
						|
    import_from_follows!(follows, true)
 | 
						|
  end
 | 
						|
 | 
						|
  def import_from_passive_follows!(follows)
 | 
						|
    import_from_follows!(follows, false)
 | 
						|
  end
 | 
						|
 | 
						|
  def affected_local_accounts
 | 
						|
    Account.where(id: severed_relationships.select(:local_account_id))
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def import_from_follows!(follows, active)
 | 
						|
    SeveredRelationship.insert_all(
 | 
						|
      follows.pluck(:account_id, :target_account_id, :show_reblogs, :notify, :languages).map do |account_id, target_account_id, show_reblogs, notify, languages|
 | 
						|
        {
 | 
						|
          local_account_id: active ? account_id : target_account_id,
 | 
						|
          remote_account_id: active ? target_account_id : account_id,
 | 
						|
          show_reblogs: show_reblogs,
 | 
						|
          notify: notify,
 | 
						|
          languages: languages,
 | 
						|
          relationship_severance_event_id: id,
 | 
						|
          direction: active ? :active : :passive,
 | 
						|
        }
 | 
						|
      end
 | 
						|
    )
 | 
						|
  end
 | 
						|
end
 |