You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
# 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
|
|
|