mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 23:06:19 +08:00
FIX: If posts are deleted they should be updated in consistency jobs
This commit is contained in:
parent
5d125b02d9
commit
94a4af6af7
|
@ -25,6 +25,7 @@ class TopicFeaturedUsers
|
||||||
def self.ensure_consistency!(topic_id=nil)
|
def self.ensure_consistency!(topic_id=nil)
|
||||||
|
|
||||||
filter = "#{"AND t.id = #{topic_id.to_i}" if topic_id}"
|
filter = "#{"AND t.id = #{topic_id.to_i}" if topic_id}"
|
||||||
|
filter2 = "#{"AND tt.id = #{topic_id.to_i}" if topic_id}"
|
||||||
|
|
||||||
sql = <<SQL
|
sql = <<SQL
|
||||||
|
|
||||||
|
@ -53,11 +54,12 @@ cte2 as (
|
||||||
|
|
||||||
UPDATE topics tt
|
UPDATE topics tt
|
||||||
SET
|
SET
|
||||||
featured_user1_id = featured_user1,
|
featured_user1_id = x.featured_user1,
|
||||||
featured_user2_id = featured_user2,
|
featured_user2_id = x.featured_user2,
|
||||||
featured_user3_id = featured_user3,
|
featured_user3_id = x.featured_user3,
|
||||||
featured_user4_id = featured_user4
|
featured_user4_id = x.featured_user4
|
||||||
FROM (
|
FROM topics AS tt2
|
||||||
|
LEFT OUTER JOIN (
|
||||||
SELECT
|
SELECT
|
||||||
c.id,
|
c.id,
|
||||||
MAX(case when c.rank = 1 then c.user_id end) featured_user1,
|
MAX(case when c.rank = 1 then c.user_id end) featured_user1,
|
||||||
|
@ -66,14 +68,15 @@ FROM (
|
||||||
MAX(case when c.rank = 4 then c.user_id end) featured_user4
|
MAX(case when c.rank = 4 then c.user_id end) featured_user4
|
||||||
FROM cte2 as c
|
FROM cte2 as c
|
||||||
GROUP BY c.id
|
GROUP BY c.id
|
||||||
) x
|
) x ON x.id = tt2.id
|
||||||
WHERE x.id = tt.id AND
|
WHERE tt.id = tt2.id AND
|
||||||
(
|
(
|
||||||
COALESCE(featured_user1_id,-99) <> COALESCE(featured_user1,-99) OR
|
COALESCE(tt.featured_user1_id,-99) <> COALESCE(x.featured_user1,-99) OR
|
||||||
COALESCE(featured_user2_id,-99) <> COALESCE(featured_user2,-99) OR
|
COALESCE(tt.featured_user2_id,-99) <> COALESCE(x.featured_user2,-99) OR
|
||||||
COALESCE(featured_user3_id,-99) <> COALESCE(featured_user3,-99) OR
|
COALESCE(tt.featured_user3_id,-99) <> COALESCE(x.featured_user3,-99) OR
|
||||||
COALESCE(featured_user4_id,-99) <> COALESCE(featured_user4,-99)
|
COALESCE(tt.featured_user4_id,-99) <> COALESCE(x.featured_user4,-99)
|
||||||
)
|
)
|
||||||
|
#{filter2}
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
Topic.exec_sql(sql)
|
Topic.exec_sql(sql)
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe TopicFeaturedUsers do
|
describe TopicFeaturedUsers do
|
||||||
it 'ensures consistenct' do
|
it 'ensures consistency' do
|
||||||
|
|
||||||
t = Fabricate(:topic)
|
t = Fabricate(:topic)
|
||||||
Fabricate(:post, topic_id: t.id, user_id: t.user_id)
|
Fabricate(:post, topic_id: t.id, user_id: t.user_id)
|
||||||
p2 = Fabricate(:post, topic_id: t.id)
|
p2 = Fabricate(:post, topic_id: t.id)
|
||||||
Fabricate(:post, topic_id: t.id, user_id: p2.user_id)
|
p3 = Fabricate(:post, topic_id: t.id, user_id: p2.user_id)
|
||||||
p4 = Fabricate(:post, topic_id: t.id)
|
p4 = Fabricate(:post, topic_id: t.id)
|
||||||
p5 = Fabricate(:post, topic_id: t.id)
|
p5 = Fabricate(:post, topic_id: t.id)
|
||||||
|
|
||||||
|
@ -14,11 +14,9 @@ describe TopicFeaturedUsers do
|
||||||
featured_user2_id: 70,
|
featured_user2_id: 70,
|
||||||
featured_user3_id: 12,
|
featured_user3_id: 12,
|
||||||
featured_user4_id: 7,
|
featured_user4_id: 7,
|
||||||
last_post_user_id: p5.user_id
|
last_post_user_id: p5.user_id)
|
||||||
)
|
|
||||||
|
|
||||||
TopicFeaturedUsers.ensure_consistency!
|
TopicFeaturedUsers.ensure_consistency!
|
||||||
|
|
||||||
t.reload
|
t.reload
|
||||||
|
|
||||||
expect(t.featured_user1_id).to eq(p2.user_id)
|
expect(t.featured_user1_id).to eq(p2.user_id)
|
||||||
|
@ -26,6 +24,16 @@ describe TopicFeaturedUsers do
|
||||||
expect(t.featured_user3_id).to eq(nil)
|
expect(t.featured_user3_id).to eq(nil)
|
||||||
expect(t.featured_user4_id).to eq(nil)
|
expect(t.featured_user4_id).to eq(nil)
|
||||||
|
|
||||||
|
# after removing a post
|
||||||
|
p2.update_column(:deleted_at, Time.now)
|
||||||
|
p3.update_column(:hidden, true)
|
||||||
|
|
||||||
|
TopicFeaturedUsers.ensure_consistency!
|
||||||
|
t.reload
|
||||||
|
|
||||||
|
expect(t.featured_user1_id).to eq(p4.user_id)
|
||||||
|
expect(t.featured_user2_id).to eq(nil)
|
||||||
|
expect(t.featured_user3_id).to eq(nil)
|
||||||
|
expect(t.featured_user4_id).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user