discourse/plugins/automation/lib/discourse_automation/stalled_topic_finder.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

45 lines
1.0 KiB
Ruby
Raw Normal View History

# 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