Stop displaying admin analytics for current day, as the data is incomplete. Instead, show analytics for any given period up to yesterday
34 lines
1.5 KiB
Ruby
34 lines
1.5 KiB
Ruby
module Admin
|
|
class ChartsData
|
|
def initialize(length = 7)
|
|
@length = length
|
|
end
|
|
|
|
def call
|
|
period = (@length + 1).days.ago..1.day.ago
|
|
previous_period = (@length * 2).days.ago..@length.days.ago
|
|
|
|
grouped_posts = Article.where(published_at: period).group("DATE(published_at)").size
|
|
grouped_comments = Comment.where(created_at: period).group("DATE(created_at)").size
|
|
grouped_reactions = Reaction.where(created_at: period).group("DATE(created_at)").size
|
|
grouped_users = User.where(registered_at: period).group("DATE(registered_at)").size
|
|
|
|
days_range = @length.downto(1)
|
|
posts_values = days_range.map { |n| grouped_posts[n.days.ago.to_date] || 0 }
|
|
comments_values = days_range.map { |n| grouped_comments[n.days.ago.to_date] || 0 }
|
|
reactions_values = days_range.map { |n| grouped_reactions[n.days.ago.to_date] || 0 }
|
|
new_members_values = days_range.map { |n| grouped_users[n.days.ago.to_date] || 0 }
|
|
|
|
[
|
|
["Posts", posts_values.sum, Article.where(published_at: previous_period).size,
|
|
posts_values],
|
|
["Comments", comments_values.sum, Comment.where(created_at: previous_period).size,
|
|
comments_values],
|
|
["Reactions", reactions_values.sum, Reaction.where(created_at: previous_period).size,
|
|
reactions_values],
|
|
["New members", new_members_values.sum, User.where(registered_at: previous_period).size,
|
|
new_members_values],
|
|
]
|
|
end
|
|
end
|
|
end
|