Add option to be notified when a followed user posts (#13546)
* Add bell button Fix #4890 * Remove duplicate type from post-deployment migration * Fix legacy class type mappings * Improve query performance with better index * Fix validation * Remove redundant index from notifications
This commit is contained in:
parent
75e4bd9413
commit
974b1b79ce
42 changed files with 330 additions and 112 deletions
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
|
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
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2020_09_08_193330) do
|
||||
ActiveRecord::Schema.define(version: 2020_09_17_222734) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -411,6 +411,7 @@ ActiveRecord::Schema.define(version: 2020_09_08_193330) 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
|
||||
|
||||
|
@ -421,6 +422,7 @@ ActiveRecord::Schema.define(version: 2020_09_08_193330) 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
|
||||
|
@ -545,8 +547,8 @@ ActiveRecord::Schema.define(version: 2020_09_08_193330) 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue