mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Move reports to concerns for autoloading (#11066)
This commit is contained in:
committed by
GitHub
parent
c5eba3f9ee
commit
c750a02f05
83
app/models/concerns/reports/top_ignored_users.rb
Normal file
83
app/models/concerns/reports/top_ignored_users.rb
Normal file
@@ -0,0 +1,83 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Reports::TopIgnoredUsers
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
def report_top_ignored_users(report)
|
||||
report.modes = [:table]
|
||||
|
||||
report.labels = [
|
||||
{
|
||||
type: :user,
|
||||
properties: {
|
||||
id: :ignored_user_id,
|
||||
username: :ignored_username,
|
||||
avatar: :ignored_user_avatar_template,
|
||||
},
|
||||
title: I18n.t("reports.top_ignored_users.labels.ignored_user")
|
||||
},
|
||||
{
|
||||
type: :number,
|
||||
properties: [
|
||||
:ignores_count,
|
||||
],
|
||||
title: I18n.t("reports.top_ignored_users.labels.ignores_count")
|
||||
},
|
||||
{
|
||||
type: :number,
|
||||
properties: [
|
||||
:mutes_count,
|
||||
],
|
||||
title: I18n.t("reports.top_ignored_users.labels.mutes_count")
|
||||
}
|
||||
]
|
||||
|
||||
report.data = []
|
||||
|
||||
sql = <<~SQL
|
||||
WITH ignored_users AS (
|
||||
SELECT
|
||||
ignored_user_id as user_id,
|
||||
COUNT(*) AS ignores_count
|
||||
FROM ignored_users
|
||||
WHERE created_at >= '#{report.start_date}' AND created_at <= '#{report.end_date}'
|
||||
GROUP BY ignored_user_id
|
||||
ORDER BY COUNT(*) DESC
|
||||
LIMIT :limit
|
||||
),
|
||||
muted_users AS (
|
||||
SELECT
|
||||
muted_user_id as user_id,
|
||||
COUNT(*) AS mutes_count
|
||||
FROM muted_users
|
||||
WHERE created_at >= '#{report.start_date}' AND created_at <= '#{report.end_date}'
|
||||
GROUP BY muted_user_id
|
||||
ORDER BY COUNT(*) DESC
|
||||
LIMIT :limit
|
||||
)
|
||||
|
||||
SELECT u.id as user_id,
|
||||
u.username as username,
|
||||
u.uploaded_avatar_id as uploaded_avatar_id,
|
||||
ig.ignores_count as ignores_count,
|
||||
COALESCE(mu.mutes_count, 0) as mutes_count,
|
||||
ig.ignores_count + COALESCE(mu.mutes_count, 0) as total
|
||||
FROM users as u
|
||||
JOIN ignored_users as ig ON ig.user_id = u.id
|
||||
LEFT OUTER JOIN muted_users as mu ON mu.user_id = u.id
|
||||
ORDER BY total DESC
|
||||
SQL
|
||||
|
||||
DB.query(sql, limit: report.limit || 250).each do |row|
|
||||
report.data << {
|
||||
ignored_user_id: row.user_id,
|
||||
ignored_username: row.username,
|
||||
ignored_user_avatar_template: User.avatar_template(row.username, row.uploaded_avatar_id),
|
||||
ignores_count: row.ignores_count,
|
||||
mutes_count: row.mutes_count,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user