46 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class RemoveLegacyUserSettingsColumns < ActiveRecord::Migration[7.2]
 | |
|   disable_ddl_transaction!
 | |
| 
 | |
|   def up
 | |
|     # In normal usage this should not find anything to delete
 | |
|     # Deletion here is already done in RemoveLegacyUserSettingsData migration
 | |
|     # and no data like this should be created from app at this point
 | |
|     # Deleting again out of caution
 | |
|     connection.execute(<<~SQL.squish)
 | |
|       DELETE FROM settings
 | |
|       WHERE
 | |
|         thing_type IS NOT NULL
 | |
|         AND thing_id IS NOT NULL
 | |
|     SQL
 | |
| 
 | |
|     # When running these migrations on mastodon.social, we saw 'notification_emails'
 | |
|     # and 'interactions' records that were not associated to a user and caused a
 | |
|     # migration issue.
 | |
|     # While I have not been able to pinpoint the exact cause of the issue, it is likely
 | |
|     # related to the settings system changes made in b11fdc3ae3f90731c01149a5a36dc64e065d4ea2.
 | |
|     # So, delete a few user settings that should already have been deleted.
 | |
|     connection.execute(<<~SQL.squish)
 | |
|       DELETE FROM settings
 | |
|       WHERE var IN (
 | |
|         'notification_emails', 'interactions', 'boost_modal', 'auto_play_gif',
 | |
|         'delete_modal', 'system_font_ui', 'default_sensitive', 'unfollow_modal',
 | |
|         'reduce_motion', 'display_sensitive_media', 'hide_network', 'expand_spoilers',
 | |
|         'display_media', 'aggregate_reblogs', 'show_application', 'advanced_layout',
 | |
|         'use_blurhash', 'use_pending_items')
 | |
|     SQL
 | |
| 
 | |
|     add_index :settings, :var, unique: true, algorithm: :concurrently
 | |
|     remove_index :settings, [:thing_type, :thing_id, :var], name: :index_settings_on_thing_type_and_thing_id_and_var, unique: true
 | |
| 
 | |
|     safety_assured do
 | |
|       remove_column :settings, :thing_type, :string
 | |
|       remove_column :settings, :thing_id, :bigint
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def down
 | |
|     raise ActiveRecord::IrreversibleMigration
 | |
|   end
 | |
| end
 |