Reattribute notification-related records if possible when merging accounts (#29694)

This commit is contained in:
Claire 2024-03-22 17:21:53 +01:00 committed by GitHub
parent de6c9e0fcd
commit d71d26a3c9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 0 deletions

View file

@ -27,6 +27,16 @@ module Account::Merging
end end
end end
[
Notification, NotificationPermission, NotificationRequest
].each do |klass|
klass.where(from_account_id: other_account.id).reorder(nil).find_each do |record|
record.update_attribute(:from_account_id, id)
rescue ActiveRecord::RecordNotUnique
next
end
end
target_classes = [ target_classes = [
Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin, Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin,
AccountNote AccountNote

View file

@ -26,6 +26,9 @@ module Mastodon::CLI
class ListAccount < ApplicationRecord; end class ListAccount < ApplicationRecord; end
class PollVote < ApplicationRecord; end class PollVote < ApplicationRecord; end
class Mention < ApplicationRecord; end class Mention < ApplicationRecord; end
class Notification < ApplicationRecord; end
class NotificationPermission < ApplicationRecord; end
class NotificationRequest < ApplicationRecord; end
class AccountDomainBlock < ApplicationRecord; end class AccountDomainBlock < ApplicationRecord; end
class AnnouncementReaction < ApplicationRecord; end class AnnouncementReaction < ApplicationRecord; end
class FeaturedTag < ApplicationRecord; end class FeaturedTag < ApplicationRecord; end
@ -108,6 +111,18 @@ module Mastodon::CLI
end end
end end
from_classes = [Notification]
from_classes << NotificationPermission if db_table_exists?(:notification_permissions)
from_classes << NotificationRequest if db_table_exists?(:notification_requests)
from_classes.each do |klass|
klass.where(from_account_id: other_account.id).find_each do |record|
record.update_attribute(:from_account_id, id)
rescue ActiveRecord::RecordNotUnique
next
end
end
target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin] target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin]
target_classes << AccountNote if db_table_exists?(:account_notes) target_classes << AccountNote if db_table_exists?(:account_notes)