mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 03:34:17 +08:00
30990006a9
This reduces chances of errors where consumers of strings mutate inputs and reduces memory usage of the app. Test suite passes now, but there may be some stuff left, so we will run a few sites on a branch prior to merging
37 lines
1.3 KiB
Ruby
37 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class AddFlagStatsToUser < ActiveRecord::Migration[5.2]
|
|
def up
|
|
add_column :user_stats, :flags_agreed, :integer, default: 0, null: false
|
|
add_column :user_stats, :flags_disagreed, :integer, default: 0, null: false
|
|
add_column :user_stats, :flags_ignored, :integer, default: 0, null: false
|
|
|
|
sql = <<~SQL
|
|
UPDATE user_stats
|
|
SET flags_agreed = x.flags_agreed,
|
|
flags_disagreed = x.flags_disagreed,
|
|
flags_ignored = x.flags_ignored
|
|
FROM (
|
|
SELECT u.id AS user_id,
|
|
SUM(CASE WHEN pa.disagreed_at IS NOT NULL THEN 1 ELSE 0 END) as flags_disagreed,
|
|
SUM(CASE WHEN pa.agreed_at IS NOT NULL THEN 1 ELSE 0 END) as flags_agreed,
|
|
SUM(CASE WHEN pa.deferred_at IS NOT NULL THEN 1 ELSE 0 END) as flags_ignored
|
|
FROM post_actions AS pa
|
|
INNER JOIN users AS u ON u.id = pa.user_id
|
|
WHERE pa.post_action_type_id IN (#{PostActionType.notify_flag_types.values.join(', ')})
|
|
AND pa.user_id > 0
|
|
GROUP BY u.id
|
|
) AS x
|
|
WHERE x.user_id = user_stats.user_id
|
|
SQL
|
|
|
|
execute sql
|
|
end
|
|
|
|
def down
|
|
remove_column :user_stats, :flags_agreed
|
|
remove_column :user_stats, :flags_disagreed
|
|
remove_column :user_stats, :flags_ignored
|
|
end
|
|
end
|