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.
44 lines
1.4 KiB
44 lines
1.4 KiB
4 years ago
|
# frozen_string_literal: true
|
||
|
|
||
|
module AccountMerging
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
def merge_with!(other_account)
|
||
|
# Since it's the same remote resource, the remote resource likely
|
||
|
# already believes we are following/blocking, so it's safe to
|
||
|
# re-attribute the relationships too. However, during the presence
|
||
|
# of the index bug users could have *also* followed the reference
|
||
|
# account already, therefore mass update will not work and we need
|
||
|
# to check for (and skip past) uniqueness errors
|
||
|
|
||
|
owned_classes = [
|
||
|
Status, StatusPin, MediaAttachment, Poll, Report, Tombstone, Favourite,
|
||
|
Follow, FollowRequest, Block, Mute, AccountIdentityProof,
|
||
|
AccountModerationNote, AccountPin, AccountStat, ListAccount,
|
||
|
PollVote, Mention
|
||
|
]
|
||
|
|
||
|
owned_classes.each do |klass|
|
||
|
klass.where(account_id: other_account.id).find_each do |record|
|
||
|
begin
|
||
|
record.update_attribute(:account_id, id)
|
||
|
rescue ActiveRecord::RecordNotUnique
|
||
|
next
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin]
|
||
|
|
||
|
target_classes.each do |klass|
|
||
|
klass.where(target_account_id: other_account.id).find_each do |record|
|
||
|
begin
|
||
|
record.update_attribute(:target_account_id, id)
|
||
|
rescue ActiveRecord::RecordNotUnique
|
||
|
next
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|