about summary refs log tree commit diff
path: root/db
diff options
context:
space:
mode:
Diffstat (limited to 'db')
-rw-r--r--db/migrate/20170914032032_default_existing_mutes_to_hiding_notifications.rb13
-rw-r--r--db/migrate/20171009222537_create_keyword_mutes.rb14
-rw-r--r--db/migrate/20171021191900_move_keyword_mutes_into_glitch_namespace.rb9
-rw-r--r--db/migrate/20171210213213_add_local_only_flag_to_statuses.rb7
-rw-r--r--db/migrate/20180410220657_create_bookmarks.rb22
-rw-r--r--db/migrate/20180604000556_add_apply_to_mentions_flag_to_keyword_mutes.rb19
-rw-r--r--db/migrate/20180707193142_migrate_filters.rb58
-rw-r--r--db/migrate/20180831171112_create_bookmarks.rb3
-rw-r--r--db/migrate/20190512200918_add_content_type_to_statuses.rb7
-rw-r--r--db/migrate/20220209175231_add_content_type_to_status_edits.rb7
-rw-r--r--db/migrate/20230215074424_move_glitch_user_settings.rb57
-rw-r--r--db/post_migrate/20180813160548_post_migrate_filters.rb11
-rw-r--r--db/schema.rb5
13 files changed, 231 insertions, 1 deletions
diff --git a/db/migrate/20170914032032_default_existing_mutes_to_hiding_notifications.rb b/db/migrate/20170914032032_default_existing_mutes_to_hiding_notifications.rb
new file mode 100644
index 000000000..d9866dfde
--- /dev/null
+++ b/db/migrate/20170914032032_default_existing_mutes_to_hiding_notifications.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+# This migration is glitch-soc-only because mutes were originally developed in
+# glitch-soc and the default value changed when submitting the code upstream.
+
+# This migration originally changed existing values to `true`, but this has
+# been dropped as to not cause issues when migrating from upstream.
+
+class DefaultExistingMutesToHidingNotifications < ActiveRecord::Migration[5.1]
+  def up
+    change_column_default :mutes, :hide_notifications, from: false, to: true
+  end
+end
diff --git a/db/migrate/20171009222537_create_keyword_mutes.rb b/db/migrate/20171009222537_create_keyword_mutes.rb
new file mode 100644
index 000000000..77c88b0a5
--- /dev/null
+++ b/db/migrate/20171009222537_create_keyword_mutes.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class CreateKeywordMutes < ActiveRecord::Migration[5.1]
+  def change
+    create_table :keyword_mutes do |t|
+      t.references :account, null: false
+      t.string :keyword, null: false
+      t.boolean :whole_word, null: false, default: true
+      t.timestamps
+    end
+
+    safety_assured { add_foreign_key :keyword_mutes, :accounts, on_delete: :cascade }
+  end
+end
diff --git a/db/migrate/20171021191900_move_keyword_mutes_into_glitch_namespace.rb b/db/migrate/20171021191900_move_keyword_mutes_into_glitch_namespace.rb
new file mode 100644
index 000000000..b6ea537c2
--- /dev/null
+++ b/db/migrate/20171021191900_move_keyword_mutes_into_glitch_namespace.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class MoveKeywordMutesIntoGlitchNamespace < ActiveRecord::Migration[5.1]
+  def change
+    safety_assured do
+      rename_table :keyword_mutes, :glitch_keyword_mutes
+    end
+  end
+end
diff --git a/db/migrate/20171210213213_add_local_only_flag_to_statuses.rb b/db/migrate/20171210213213_add_local_only_flag_to_statuses.rb
new file mode 100644
index 000000000..010503b10
--- /dev/null
+++ b/db/migrate/20171210213213_add_local_only_flag_to_statuses.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddLocalOnlyFlagToStatuses < ActiveRecord::Migration[5.1]
+  def change
+    add_column :statuses, :local_only, :boolean
+  end
+end
diff --git a/db/migrate/20180410220657_create_bookmarks.rb b/db/migrate/20180410220657_create_bookmarks.rb
new file mode 100644
index 000000000..aba21f5ea
--- /dev/null
+++ b/db/migrate/20180410220657_create_bookmarks.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+# This migration is a duplicate of 20180831171112 and may get ignored, see
+# config/initializers/0_duplicate_migrations.rb
+
+class CreateBookmarks < ActiveRecord::Migration[5.1]
+  def change
+    create_table :bookmarks do |t|
+      t.references :account, null: false
+      t.references :status, null: false
+
+      t.timestamps
+    end
+
+    safety_assured do
+      add_foreign_key :bookmarks, :accounts, column: :account_id, on_delete: :cascade
+      add_foreign_key :bookmarks, :statuses, column: :status_id, on_delete: :cascade
+    end
+
+    add_index :bookmarks, [:account_id, :status_id], unique: true
+  end
+end
diff --git a/db/migrate/20180604000556_add_apply_to_mentions_flag_to_keyword_mutes.rb b/db/migrate/20180604000556_add_apply_to_mentions_flag_to_keyword_mutes.rb
new file mode 100644
index 000000000..8078a07bf
--- /dev/null
+++ b/db/migrate/20180604000556_add_apply_to_mentions_flag_to_keyword_mutes.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'mastodon/migration_helpers'
+
+class AddApplyToMentionsFlagToKeywordMutes < ActiveRecord::Migration[5.2]
+  include Mastodon::MigrationHelpers
+
+  disable_ddl_transaction!
+
+  def up
+    safety_assured do
+      add_column_with_default :glitch_keyword_mutes, :apply_to_mentions, :boolean, allow_null: false, default: true
+    end
+  end
+
+  def down
+    remove_column :glitch_keyword_mutes, :apply_to_mentions
+  end
+end
diff --git a/db/migrate/20180707193142_migrate_filters.rb b/db/migrate/20180707193142_migrate_filters.rb
new file mode 100644
index 000000000..8f6b3e1bb
--- /dev/null
+++ b/db/migrate/20180707193142_migrate_filters.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+class MigrateFilters < ActiveRecord::Migration[5.2]
+  class GlitchKeywordMute < ApplicationRecord
+    # Dummy class, as we removed Glitch::KeywordMute
+    belongs_to :account, optional: false
+    validates_presence_of :keyword
+  end
+
+  class CustomFilter < ApplicationRecord
+    # Dummy class, in case CustomFilter gets altered in the future
+    belongs_to :account
+    validates :phrase, :context, presence: true
+
+    before_validation :clean_up_contexts
+
+    private
+
+    def clean_up_contexts
+      self.context = Array(context).map(&:strip).filter_map(&:presence)
+    end
+  end
+
+  disable_ddl_transaction!
+
+  def up
+    GlitchKeywordMute.find_each do |filter|
+      filter.account.custom_filters.create!(
+        phrase: filter.keyword,
+        context: filter.apply_to_mentions ? %w(home public notifications) : %w(home public),
+        whole_word: filter.whole_word,
+        irreversible: true
+      )
+    end
+  end
+
+  def down
+    unless table_exists? :glitch_keyword_mutes
+      create_table :glitch_keyword_mutes do |t|
+        t.references :account, null: false
+        t.string :keyword, null: false
+        t.boolean :whole_word, default: true, null: false
+        t.boolean :apply_to_mentions, default: true, null: false
+        t.timestamps
+      end
+
+      safety_assured { add_foreign_key :glitch_keyword_mutes, :accounts, on_delete: :cascade }
+    end
+
+    CustomFilter.where(irreversible: true).find_each do |filter|
+      GlitchKeywordMute.where(account: filter.account).create!(
+        keyword: filter.phrase,
+        whole_word: filter.whole_word,
+        apply_to_mentions: filter.context.include?('notifications')
+      )
+    end
+  end
+end
diff --git a/db/migrate/20180831171112_create_bookmarks.rb b/db/migrate/20180831171112_create_bookmarks.rb
index a08e60739..9f6bfae57 100644
--- a/db/migrate/20180831171112_create_bookmarks.rb
+++ b/db/migrate/20180831171112_create_bookmarks.rb
@@ -1,3 +1,6 @@
+# This migration is a duplicate of 20180410220657 and may get ignored, see
+# config/initializers/0_duplicate_migrations.rb
+
 class CreateBookmarks < ActiveRecord::Migration[5.2]
   def change
     create_table :bookmarks do |t|
diff --git a/db/migrate/20190512200918_add_content_type_to_statuses.rb b/db/migrate/20190512200918_add_content_type_to_statuses.rb
new file mode 100644
index 000000000..31c1a4f17
--- /dev/null
+++ b/db/migrate/20190512200918_add_content_type_to_statuses.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddContentTypeToStatuses < ActiveRecord::Migration[5.2]
+  def change
+    add_column :statuses, :content_type, :string
+  end
+end
diff --git a/db/migrate/20220209175231_add_content_type_to_status_edits.rb b/db/migrate/20220209175231_add_content_type_to_status_edits.rb
new file mode 100644
index 000000000..bb414535d
--- /dev/null
+++ b/db/migrate/20220209175231_add_content_type_to_status_edits.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddContentTypeToStatusEdits < ActiveRecord::Migration[6.1]
+  def change
+    add_column :status_edits, :content_type, :string
+  end
+end
diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb
new file mode 100644
index 000000000..6b5a25925
--- /dev/null
+++ b/db/migrate/20230215074424_move_glitch_user_settings.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+class MoveGlitchUserSettings < ActiveRecord::Migration[6.1]
+  class User < ApplicationRecord; end
+
+  MAPPING = {
+    favourite_modal: 'web.favourite_modal',
+    system_emoji_font: 'web.use_system_emoji_font',
+    hide_followers_count: 'hide_followers_count',
+    default_content_type: 'default_content_type',
+    flavour: 'flavour',
+    skin: 'skin',
+    notification_emails: {
+      trending_link: 'notification_emails.link_trends',
+      trending_status: 'notification_emails.status_trends',
+    }.freeze,
+  }.freeze
+
+  class LegacySetting < ApplicationRecord
+    self.table_name = 'settings'
+
+    def var
+      self[:var]&.to_sym
+    end
+
+    def value
+      YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) if self[:value].present?
+    end
+  end
+
+  def up
+    User.find_each do |user|
+      previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var)
+
+      user_settings = Oj.load(user.settings || '{}')
+      user_settings.delete('theme')
+
+      MAPPING.each do |legacy_key, new_key|
+        value = previous_settings[legacy_key]&.value
+
+        next if value.blank?
+
+        if value.is_a?(Hash)
+          value.each do |nested_key, nested_value|
+            user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value
+          end
+        else
+          user_settings[new_key] = value
+        end
+      end
+
+      user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations
+    end
+  end
+
+  def down; end
+end
diff --git a/db/post_migrate/20180813160548_post_migrate_filters.rb b/db/post_migrate/20180813160548_post_migrate_filters.rb
new file mode 100644
index 000000000..82acf13d5
--- /dev/null
+++ b/db/post_migrate/20180813160548_post_migrate_filters.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class PostMigrateFilters < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    drop_table :glitch_keyword_mutes if table_exists? :glitch_keyword_mutes
+  end
+
+  def down; end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 620bed2bc..7d894b1aa 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2023_02_15_074423) do
+ActiveRecord::Schema.define(version: 2023_02_15_074424) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -879,6 +879,7 @@ ActiveRecord::Schema.define(version: 2023_02_15_074423) do
     t.text "spoiler_text", default: "", null: false
     t.datetime "created_at", precision: 6, null: false
     t.datetime "updated_at", precision: 6, null: false
+    t.string "content_type"
     t.bigint "ordered_media_attachment_ids", array: true
     t.text "media_descriptions", array: true
     t.string "poll_options", array: true
@@ -935,7 +936,9 @@ ActiveRecord::Schema.define(version: 2023_02_15_074423) do
     t.bigint "account_id", null: false
     t.bigint "application_id"
     t.bigint "in_reply_to_account_id"
+    t.boolean "local_only"
     t.bigint "poll_id"
+    t.string "content_type"
     t.datetime "deleted_at"
     t.datetime "edited_at"
     t.boolean "trendable"