mirror of
https://github.com/discourse/discourse-rewind.git
synced 2025-07-12 16:13:26 +00:00
93 lines
2.4 KiB
Ruby
93 lines
2.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# For a most user / received reactions cards
|
||
|
module DiscourseRewind
|
||
|
module Action
|
||
|
class Reactions < BaseReport
|
||
|
FakeData = {
|
||
|
data: {
|
||
|
post_received_reactions: {
|
||
|
"open_mouth" => 2,
|
||
|
"cat" => 32,
|
||
|
"dog" => 34,
|
||
|
"heart" => 45,
|
||
|
"grinning" => 82,
|
||
|
},
|
||
|
post_used_reactions: {
|
||
|
"open_mouth" => 2,
|
||
|
"cat" => 32,
|
||
|
"dog" => 34,
|
||
|
"heart" => 45,
|
||
|
"grinning" => 82,
|
||
|
},
|
||
|
chat_used_reactions: {
|
||
|
"open_mouth" => 2,
|
||
|
"cat" => 32,
|
||
|
"dog" => 34,
|
||
|
"heart" => 45,
|
||
|
"grinning" => 82,
|
||
|
},
|
||
|
chat_received_reactions: {
|
||
|
"open_mouth" => 2,
|
||
|
"cat" => 32,
|
||
|
"dog" => 34,
|
||
|
"heart" => 45,
|
||
|
"grinning" => 82,
|
||
|
},
|
||
|
},
|
||
|
identifier: "reactions",
|
||
|
}
|
||
|
|
||
|
def call
|
||
|
return FakeData if Rails.env.development?
|
||
|
|
||
|
data = {}
|
||
|
if defined?(DiscourseReactions::Reaction)
|
||
|
# This is missing heart reactions (default like)
|
||
|
data[:post_used_reactions] = sort_and_limit(
|
||
|
DiscourseReactions::Reaction
|
||
|
.by_user(user)
|
||
|
.where(created_at: date)
|
||
|
.group(:reaction_value)
|
||
|
.count,
|
||
|
)
|
||
|
|
||
|
data[:post_received_reactions] = sort_and_limit(
|
||
|
DiscourseReactions::Reaction
|
||
|
.includes(:post)
|
||
|
.where(posts: { user_id: user.id })
|
||
|
.where(created_at: date)
|
||
|
.group(:reaction_value)
|
||
|
.count,
|
||
|
)
|
||
|
end
|
||
|
|
||
|
if SiteSetting.chat_enabled
|
||
|
data[:chat_used_reactions] = sort_and_limit(
|
||
|
Chat::MessageReaction.where(user: user).where(created_at: date).group(:emoji).count,
|
||
|
)
|
||
|
|
||
|
data[:chat_received_reactions] = sort_and_limit(
|
||
|
Chat::MessageReaction
|
||
|
.includes(:chat_message)
|
||
|
.where(chat_message: { user_id: user.id })
|
||
|
.where(created_at: date)
|
||
|
.group(:emoji)
|
||
|
.count,
|
||
|
)
|
||
|
end
|
||
|
|
||
|
{ data:, identifier: "reactions" }
|
||
|
end
|
||
|
|
||
|
def enabled?
|
||
|
SiteSetting.discourse_reactions_enabled || SiteSetting.chat_enabled
|
||
|
end
|
||
|
|
||
|
def sort_and_limit(reactions)
|
||
|
reactions.sort_by { |_, v| -v }.first(5).reverse.to_h
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|