discourse/plugins/automation/lib/discourse_automation/stalled_topic_finder.rb
Joffrey JAFFEUX a333d71d4c
FIX: ensures tags/categories are present (#28230)
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.
2024-08-05 22:26:12 +02:00

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