mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 13:29:42 +08:00
a333d71d4c
Prior to this fix the query in stalled_topic_finder would assume that tags/categories would be nil or an array of ids. However it can be an empty array, in this case the query will not return results.
45 lines
1.0 KiB
Ruby
45 lines
1.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class DiscourseAutomation::StalledTopicFinder
|
|
def self.call(stalled_date, tags: nil, categories: nil)
|
|
sql = <<~SQL
|
|
SELECT t.id
|
|
FROM topics t
|
|
SQL
|
|
|
|
sql += <<~SQL if tags.present?
|
|
JOIN topic_tags ON topic_tags.topic_id = t.id
|
|
JOIN tags
|
|
ON tags.name IN (:tags)
|
|
AND tags.id = topic_tags.tag_id
|
|
SQL
|
|
|
|
sql += <<~SQL
|
|
WHERE t.deleted_at IS NULL
|
|
AND t.posts_count > 0
|
|
AND t.archetype != 'private_message'
|
|
AND NOT t.closed
|
|
AND NOT t.archived
|
|
AND NOT EXISTS (
|
|
SELECT p.id
|
|
FROM posts p
|
|
WHERE t.id = p.topic_id
|
|
AND p.deleted_at IS NULL
|
|
AND t.user_id = p.user_id
|
|
AND p.created_at > :stalled_date
|
|
LIMIT 1
|
|
)
|
|
SQL
|
|
|
|
sql += <<~SQL if categories.present?
|
|
AND t.category_id IN (:categories)
|
|
SQL
|
|
|
|
sql += <<~SQL
|
|
LIMIT 250
|
|
SQL
|
|
|
|
DB.query(sql, categories: categories, tags: tags, stalled_date: stalled_date)
|
|
end
|
|
end
|