Merge branch 'master' into feature-circles
This commit is contained in:
commit
824d1b8893
906 changed files with 37100 additions and 11600 deletions
23
db/migrate/20181127165847_add_show_replies_to_lists.rb
Normal file
23
db/migrate/20181127165847_add_show_replies_to_lists.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
|
||||
|
||||
class AddShowRepliesToLists < ActiveRecord::Migration[5.2]
|
||||
include Mastodon::MigrationHelpers
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
safety_assured do
|
||||
add_column_with_default(
|
||||
:lists,
|
||||
:replies_policy,
|
||||
:integer,
|
||||
allow_null: false,
|
||||
default: 0
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
remove_column :lists, :replies_policy
|
||||
end
|
||||
end
|
5
db/migrate/20200309150742_add_forwarded_to_reports.rb
Normal file
5
db/migrate/20200309150742_add_forwarded_to_reports.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddForwardedToReports < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :reports, :forwarded, :boolean
|
||||
end
|
||||
end
|
5
db/migrate/20200317021758_add_expires_at_to_mutes.rb
Normal file
5
db/migrate/20200317021758_add_expires_at_to_mutes.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddExpiresAtToMutes < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :mutes, :expires_at, :datetime
|
||||
end
|
||||
end
|
5
db/migrate/20200614002136_add_sensitized_to_accounts.rb
Normal file
5
db/migrate/20200614002136_add_sensitized_to_accounts.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddSensitizedToAccounts < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :accounts, :sensitized_at, :datetime
|
||||
end
|
||||
end
|
|
@ -1,10 +1,30 @@
|
|||
class AddFixedLowercaseIndexToAccounts < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
class CorruptionError < StandardError
|
||||
def cause
|
||||
nil
|
||||
end
|
||||
|
||||
def backtrace
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def up
|
||||
rename_index :accounts, 'index_accounts_on_username_and_domain_lower', 'old_index_accounts_on_username_and_domain_lower' unless index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower')
|
||||
add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true, algorithm: :concurrently
|
||||
remove_index :accounts, name: 'old_index_accounts_on_username_and_domain_lower'
|
||||
if index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower') && index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower')
|
||||
remove_index :accounts, name: 'index_accounts_on_username_and_domain_lower'
|
||||
elsif index_name_exists?(:accounts, 'index_accounts_on_username_and_domain_lower')
|
||||
rename_index :accounts, 'index_accounts_on_username_and_domain_lower', 'old_index_accounts_on_username_and_domain_lower'
|
||||
end
|
||||
|
||||
begin
|
||||
add_index :accounts, "lower (username), COALESCE(lower(domain), '')", name: 'index_accounts_on_username_and_domain_lower', unique: true, algorithm: :concurrently
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
raise CorruptionError, 'Migration failed because of index corruption, see https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/#fixing'
|
||||
end
|
||||
|
||||
remove_index :accounts, name: 'old_index_accounts_on_username_and_domain_lower' if index_name_exists?(:accounts, 'old_index_accounts_on_username_and_domain_lower')
|
||||
end
|
||||
|
||||
def down
|
||||
|
|
16
db/migrate/20200630190240_create_webauthn_credentials.rb
Normal file
16
db/migrate/20200630190240_create_webauthn_credentials.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
class CreateWebauthnCredentials < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :webauthn_credentials do |t|
|
||||
t.string :external_id, null: false
|
||||
t.string :public_key, null: false
|
||||
t.string :nickname, null: false
|
||||
t.bigint :sign_count, null: false, default: 0
|
||||
|
||||
t.index :external_id, unique: true
|
||||
|
||||
t.references :user, foreign_key: true
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
5
db/migrate/20200630190544_add_webauthn_id_to_users.rb
Normal file
5
db/migrate/20200630190544_add_webauthn_id_to_users.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddWebauthnIdToUsers < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :users, :webauthn_id, :string
|
||||
end
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
class CreateAccountDeletionRequests < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :account_deletion_requests do |t|
|
||||
t.references :account, foreign_key: { on_delete: :cascade }
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
19
db/migrate/20200917192924_add_notify_to_follows.rb
Normal file
19
db/migrate/20200917192924_add_notify_to_follows.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
|
||||
|
||||
class AddNotifyToFollows < ActiveRecord::Migration[5.1]
|
||||
include Mastodon::MigrationHelpers
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
safety_assured do
|
||||
add_column_with_default :follows, :notify, :boolean, default: false, allow_null: false
|
||||
add_column_with_default :follow_requests, :notify, :boolean, default: false, allow_null: false
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
remove_column :follows, :notify
|
||||
remove_column :follow_requests, :notify
|
||||
end
|
||||
end
|
5
db/migrate/20200917193034_add_type_to_notifications.rb
Normal file
5
db/migrate/20200917193034_add_type_to_notifications.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddTypeToNotifications < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :notifications, :type, :string
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
class AddIndexNotificationsOnType < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
def change
|
||||
add_index :notifications, [:account_id, :id, :type], order: { id: :desc }, algorithm: :concurrently
|
||||
end
|
||||
end
|
12
db/migrate/20201008202037_create_ip_blocks.rb
Normal file
12
db/migrate/20201008202037_create_ip_blocks.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
class CreateIpBlocks < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :ip_blocks do |t|
|
||||
t.inet :ip, null: false, default: '0.0.0.0'
|
||||
t.integer :severity, null: false, default: 0
|
||||
t.datetime :expires_at
|
||||
t.text :comment, null: false, default: ''
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
5
db/migrate/20201008220312_add_sign_up_ip_to_users.rb
Normal file
5
db/migrate/20201008220312_add_sign_up_ip_to_users.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddSignUpIpToUsers < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :users, :sign_up_ip, :inet
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
class AddSuspensionOriginToAccounts < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :accounts, :suspension_origin, :integer
|
||||
end
|
||||
end
|
9
db/migrate/20201206004238_create_instances.rb
Normal file
9
db/migrate/20201206004238_create_instances.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
class CreateInstances < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_view :instances, materialized: true
|
||||
|
||||
# To be able to refresh the view concurrently,
|
||||
# at least one unique index is required
|
||||
safety_assured { add_index :instances, :domain, unique: true }
|
||||
end
|
||||
end
|
15
db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb
Normal file
15
db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
|
||||
|
||||
class AddObfuscateToDomainBlocks < ActiveRecord::Migration[5.2]
|
||||
include Mastodon::MigrationHelpers
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
safety_assured { add_column_with_default :domain_blocks, :obfuscate, :boolean, default: false, allow_null: false }
|
||||
end
|
||||
|
||||
def down
|
||||
remove_column :domain_blocks, :obfuscate
|
||||
end
|
||||
end
|
22
db/post_migrate/20200917193528_migrate_notifications_type.rb
Normal file
22
db/post_migrate/20200917193528_migrate_notifications_type.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MigrateNotificationsType < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
TYPES_TO_MIGRATE = {
|
||||
'Mention' => :mention,
|
||||
'Status' => :reblog,
|
||||
'Follow' => :follow,
|
||||
'FollowRequest' => :follow_request,
|
||||
'Favourite' => :favourite,
|
||||
'Poll' => :poll,
|
||||
}.freeze
|
||||
|
||||
def up
|
||||
TYPES_TO_MIGRATE.each_pair do |activity_type, type|
|
||||
Notification.where(activity_type: activity_type, type: nil).in_batches.update_all(type: type)
|
||||
end
|
||||
end
|
||||
|
||||
def down; end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RemoveIndexNotificationsOnAccountActivity < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
remove_index :notifications, name: :account_activity
|
||||
remove_index :notifications, name: :index_notifications_on_account_id_and_id
|
||||
end
|
||||
|
||||
def down
|
||||
add_index :notifications, [:account_id, :activity_id, :activity_type], unique: true, name: 'account_activity', algorithm: :concurrently
|
||||
add_index :notifications, [:account_id, :id], order: { id: :desc }, algorithm: :concurrently
|
||||
end
|
||||
end
|
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
Account.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local)
|
||||
end
|
||||
|
||||
def down; end
|
||||
end
|
71
db/schema.rb
71
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: 2020_07_18_225817) do
|
||||
ActiveRecord::Schema.define(version: 2020_12_18_054746) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -36,6 +36,13 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.index ["conversation_id"], name: "index_account_conversations_on_conversation_id"
|
||||
end
|
||||
|
||||
create_table "account_deletion_requests", force: :cascade do |t|
|
||||
t.bigint "account_id"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["account_id"], name: "index_account_deletion_requests_on_account_id"
|
||||
end
|
||||
|
||||
create_table "account_domain_blocks", force: :cascade do |t|
|
||||
t.string "domain"
|
||||
t.datetime "created_at", null: false
|
||||
|
@ -182,6 +189,8 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.integer "avatar_storage_schema_version"
|
||||
t.integer "header_storage_schema_version"
|
||||
t.string "devices_url"
|
||||
t.integer "suspension_origin"
|
||||
t.datetime "sensitized_at"
|
||||
t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin
|
||||
t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true
|
||||
t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id"
|
||||
|
@ -372,6 +381,7 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.boolean "reject_reports", default: false, null: false
|
||||
t.text "private_comment"
|
||||
t.text "public_comment"
|
||||
t.boolean "obfuscate", default: false, null: false
|
||||
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
|
||||
end
|
||||
|
||||
|
@ -425,6 +435,7 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.bigint "target_account_id", null: false
|
||||
t.boolean "show_reblogs", default: true, null: false
|
||||
t.string "uri"
|
||||
t.boolean "notify", default: false, null: false
|
||||
t.index ["account_id", "target_account_id"], name: "index_follow_requests_on_account_id_and_target_account_id", unique: true
|
||||
end
|
||||
|
||||
|
@ -435,6 +446,7 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.bigint "target_account_id", null: false
|
||||
t.boolean "show_reblogs", default: true, null: false
|
||||
t.string "uri"
|
||||
t.boolean "notify", default: false, null: false
|
||||
t.index ["account_id", "target_account_id"], name: "index_follows_on_account_id_and_target_account_id", unique: true
|
||||
t.index ["target_account_id"], name: "index_follows_on_target_account_id"
|
||||
end
|
||||
|
@ -475,6 +487,15 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.index ["user_id"], name: "index_invites_on_user_id"
|
||||
end
|
||||
|
||||
create_table "ip_blocks", force: :cascade do |t|
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "expires_at"
|
||||
t.inet "ip", default: "0.0.0.0", null: false
|
||||
t.integer "severity", default: 0, null: false
|
||||
t.text "comment", default: "", null: false
|
||||
end
|
||||
|
||||
create_table "list_accounts", force: :cascade do |t|
|
||||
t.bigint "list_id", null: false
|
||||
t.bigint "account_id", null: false
|
||||
|
@ -489,6 +510,7 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.string "title", default: "", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.integer "replies_policy", default: 0, null: false
|
||||
t.index ["account_id"], name: "index_lists_on_account_id"
|
||||
end
|
||||
|
||||
|
@ -547,6 +569,7 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.boolean "hide_notifications", default: true, null: false
|
||||
t.bigint "account_id", null: false
|
||||
t.bigint "target_account_id", null: false
|
||||
t.datetime "expires_at"
|
||||
t.index ["account_id", "target_account_id"], name: "index_mutes_on_account_id_and_target_account_id", unique: true
|
||||
t.index ["target_account_id"], name: "index_mutes_on_target_account_id"
|
||||
end
|
||||
|
@ -558,8 +581,8 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.datetime "updated_at", null: false
|
||||
t.bigint "account_id", null: false
|
||||
t.bigint "from_account_id", null: false
|
||||
t.index ["account_id", "activity_id", "activity_type"], name: "account_activity", unique: true
|
||||
t.index ["account_id", "id"], name: "index_notifications_on_account_id_and_id", order: { id: :desc }
|
||||
t.string "type"
|
||||
t.index ["account_id", "id", "type"], name: "index_notifications_on_account_id_and_id_and_type", order: { id: :desc }
|
||||
t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type"
|
||||
t.index ["from_account_id"], name: "index_notifications_on_from_account_id"
|
||||
end
|
||||
|
@ -716,6 +739,7 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.bigint "target_account_id", null: false
|
||||
t.bigint "assigned_account_id"
|
||||
t.string "uri"
|
||||
t.boolean "forwarded"
|
||||
t.index ["account_id"], name: "index_reports_on_account_id"
|
||||
t.index ["target_account_id"], name: "index_reports_on_target_account_id"
|
||||
end
|
||||
|
@ -901,6 +925,8 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.boolean "approved", default: true, null: false
|
||||
t.string "sign_in_token"
|
||||
t.datetime "sign_in_token_sent_at"
|
||||
t.string "webauthn_id"
|
||||
t.inet "sign_up_ip"
|
||||
t.index ["account_id"], name: "index_users_on_account_id"
|
||||
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
|
||||
t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id"
|
||||
|
@ -930,9 +956,22 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
t.index ["user_id"], name: "index_web_settings_on_user_id", unique: true
|
||||
end
|
||||
|
||||
create_table "webauthn_credentials", force: :cascade do |t|
|
||||
t.string "external_id", null: false
|
||||
t.string "public_key", null: false
|
||||
t.string "nickname", null: false
|
||||
t.bigint "sign_count", default: 0, null: false
|
||||
t.bigint "user_id"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["external_id"], name: "index_webauthn_credentials_on_external_id", unique: true
|
||||
t.index ["user_id"], name: "index_webauthn_credentials_on_user_id"
|
||||
end
|
||||
|
||||
add_foreign_key "account_aliases", "accounts", on_delete: :cascade
|
||||
add_foreign_key "account_conversations", "accounts", on_delete: :cascade
|
||||
add_foreign_key "account_conversations", "conversations", on_delete: :cascade
|
||||
add_foreign_key "account_deletion_requests", "accounts", on_delete: :cascade
|
||||
add_foreign_key "account_domain_blocks", "accounts", name: "fk_206c6029bd", on_delete: :cascade
|
||||
add_foreign_key "account_identity_proofs", "accounts", on_delete: :cascade
|
||||
add_foreign_key "account_migrations", "accounts", column: "target_account_id", on_delete: :nullify
|
||||
|
@ -1032,4 +1071,30 @@ ActiveRecord::Schema.define(version: 2020_07_18_225817) do
|
|||
add_foreign_key "web_push_subscriptions", "oauth_access_tokens", column: "access_token_id", on_delete: :cascade
|
||||
add_foreign_key "web_push_subscriptions", "users", on_delete: :cascade
|
||||
add_foreign_key "web_settings", "users", name: "fk_11910667b2", on_delete: :cascade
|
||||
add_foreign_key "webauthn_credentials", "users"
|
||||
|
||||
create_view "instances", materialized: true, sql_definition: <<-SQL
|
||||
WITH domain_counts(domain, accounts_count) AS (
|
||||
SELECT accounts.domain,
|
||||
count(*) AS accounts_count
|
||||
FROM accounts
|
||||
WHERE (accounts.domain IS NOT NULL)
|
||||
GROUP BY accounts.domain
|
||||
)
|
||||
SELECT domain_counts.domain,
|
||||
domain_counts.accounts_count
|
||||
FROM domain_counts
|
||||
UNION
|
||||
SELECT domain_blocks.domain,
|
||||
COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
|
||||
FROM (domain_blocks
|
||||
LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_blocks.domain)::text)))
|
||||
UNION
|
||||
SELECT domain_allows.domain,
|
||||
COALESCE(domain_counts.accounts_count, (0)::bigint) AS accounts_count
|
||||
FROM (domain_allows
|
||||
LEFT JOIN domain_counts ON (((domain_counts.domain)::text = (domain_allows.domain)::text)));
|
||||
SQL
|
||||
add_index "instances", ["domain"], name: "index_instances_on_domain", unique: true
|
||||
|
||||
end
|
||||
|
|
17
db/views/instances_v01.sql
Normal file
17
db/views/instances_v01.sql
Normal file
|
@ -0,0 +1,17 @@
|
|||
WITH domain_counts(domain, accounts_count)
|
||||
AS (
|
||||
SELECT domain, COUNT(*) as accounts_count
|
||||
FROM accounts
|
||||
WHERE domain IS NOT NULL
|
||||
GROUP BY domain
|
||||
)
|
||||
SELECT domain, accounts_count
|
||||
FROM domain_counts
|
||||
UNION
|
||||
SELECT domain_blocks.domain, COALESCE(domain_counts.accounts_count, 0)
|
||||
FROM domain_blocks
|
||||
LEFT OUTER JOIN domain_counts ON domain_counts.domain = domain_blocks.domain
|
||||
UNION
|
||||
SELECT domain_allows.domain, COALESCE(domain_counts.accounts_count, 0)
|
||||
FROM domain_allows
|
||||
LEFT OUTER JOIN domain_counts ON domain_counts.domain = domain_allows.domain
|
Loading…
Add table
Add a link
Reference in a new issue