discourse/db/migrate/20181031165343_add_flag_sta...

35 lines
1.2 KiB
Ruby

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