Improve performances of deleting favourites when deleting accounts (#15412)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
		
							parent
							
								
									62e42bd15b
								
							
						
					
					
						commit
						814b7775fb
					
				
					 1 changed files with 20 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -9,13 +9,11 @@ class DeleteAccountService < BaseService
 | 
			
		|||
    aliases
 | 
			
		||||
    block_relationships
 | 
			
		||||
    blocked_by_relationships
 | 
			
		||||
    bookmarks
 | 
			
		||||
    conversation_mutes
 | 
			
		||||
    conversations
 | 
			
		||||
    custom_filters
 | 
			
		||||
    devices
 | 
			
		||||
    domain_blocks
 | 
			
		||||
    favourites
 | 
			
		||||
    featured_tags
 | 
			
		||||
    follow_requests
 | 
			
		||||
    identity_proofs
 | 
			
		||||
| 
						 | 
				
			
			@ -147,6 +145,8 @@ class DeleteAccountService < BaseService
 | 
			
		|||
    purge_media_attachments!
 | 
			
		||||
    purge_polls!
 | 
			
		||||
    purge_generated_notifications!
 | 
			
		||||
    purge_favourites!
 | 
			
		||||
    purge_bookmarks!
 | 
			
		||||
    purge_feeds!
 | 
			
		||||
    purge_other_associations!
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,6 +178,24 @@ class DeleteAccountService < BaseService
 | 
			
		|||
    Notification.where(from_account: @account).in_batches.delete_all
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def purge_favourites!
 | 
			
		||||
    @account.favourites.in_batches do |favourites|
 | 
			
		||||
      ids = favourites.pluck(:status_id)
 | 
			
		||||
      StatusStat.where(status_id: ids).update_all('favourites_count = GREATEST(0, favourites_count - 1)')
 | 
			
		||||
      Chewy.strategy.current.update(StatusesIndex, ids) if Chewy.enabled?
 | 
			
		||||
      # Rails.cache.delete_multi would be better, but we don't have it yet
 | 
			
		||||
      ids.each { |id| Rails.cache.delete("statuses/#{id}") }
 | 
			
		||||
      favourites.delete_all
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def purge_bookmarks!
 | 
			
		||||
    @account.bookmarks.in_batches do |bookmarks|
 | 
			
		||||
      Chewy.strategy.current.update(StatusesIndex, bookmarks.pluck(:status_id)) if Chewy.enabled?
 | 
			
		||||
      bookmarks.delete_all
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def purge_other_associations!
 | 
			
		||||
    associations_for_destruction.each do |association_name|
 | 
			
		||||
      purge_association(association_name)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue