FIX: Skip whisper posts when updating topic like count (#10157)
This commit is contained in:
parent
54d002f7db
commit
4492718864
|
@ -1071,7 +1071,13 @@ class Topic < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_action_counts
|
def update_action_counts
|
||||||
update_column(:like_count, Post.where(topic_id: id).sum(:like_count))
|
update_column(
|
||||||
|
:like_count,
|
||||||
|
Post
|
||||||
|
.where.not(post_type: Post.types[:whisper])
|
||||||
|
.where(topic_id: id)
|
||||||
|
.sum(:like_count)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def posters_summary(options = {}) # avatar lookup in options
|
def posters_summary(options = {}) # avatar lookup in options
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class FixTopicLikeCount < ActiveRecord::Migration[6.0]
|
||||||
|
def up
|
||||||
|
return if DB.query_single("SELECT * FROM site_settings WHERE name = 'enable_whispers' AND value = 't'").empty?
|
||||||
|
|
||||||
|
DB.exec(<<~SQL, whisper: Post.types[:whisper])
|
||||||
|
UPDATE topics SET like_count = tbl.like_count
|
||||||
|
FROM (
|
||||||
|
SELECT topic_id, SUM(like_count) like_count
|
||||||
|
FROM posts
|
||||||
|
WHERE deleted_at IS NULL AND post_type <> :whisper
|
||||||
|
GROUP BY topic_id
|
||||||
|
) AS tbl
|
||||||
|
WHERE topics.id = tbl.topic_id
|
||||||
|
AND topics.like_count <> tbl.like_count
|
||||||
|
SQL
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
raise ActiveRecord::IrreversibleMigration
|
||||||
|
end
|
||||||
|
end
|
|
@ -2634,4 +2634,26 @@ describe Topic do
|
||||||
expect(@topic.auto_close_threshold_reached?).to eq(true)
|
expect(@topic.auto_close_threshold_reached?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#update_action_counts' do
|
||||||
|
let(:topic) { Fabricate(:topic) }
|
||||||
|
|
||||||
|
it 'updates like count without including whisper posts' do
|
||||||
|
post = Fabricate(:post, topic: topic)
|
||||||
|
whisper_post = Fabricate(:post, topic: topic, post_type: Post.types[:whisper])
|
||||||
|
|
||||||
|
topic.update_action_counts
|
||||||
|
expect(topic.like_count).to eq(0)
|
||||||
|
|
||||||
|
PostAction.create!(post: post, user: user, post_action_type_id: PostActionType.types[:like])
|
||||||
|
|
||||||
|
topic.update_action_counts
|
||||||
|
expect(topic.like_count).to eq(1)
|
||||||
|
|
||||||
|
PostAction.create!(post: whisper_post, user: user, post_action_type_id: PostActionType.types[:like])
|
||||||
|
|
||||||
|
topic.update_action_counts
|
||||||
|
expect(topic.like_count).to eq(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue