Sha256: 913b412131b3a857390137b7f758edd8e88919203339f70556a7a0250af2a314
Contents?: true
Size: 1.31 KB
Versions: 6
Compression:
Stored size: 1.31 KB
Contents
class UserStats < ApplicationRecord belongs_to :organization belongs_to :user def self.stats_for(user) UserStats.find_or_initialize_by(user: user, organization: Organization.current) end def self.exp_for(user) self.stats_for(user).exp end def activity(date_range = nil) date_filter = { submitted_at: date_range }.compact { exercises: { solved_count: organization_exercises .joins(:assignments) .where(assignments: { top_submission_status: [:passed, :skipped], submitter: user }.merge(date_filter)) .count, count: organization_exercises.count}, messages: messages_in_discussions_count(date_range) } end def add_exp!(points) self.exp += points end private def messages_in_discussions_count(date_range = nil) date_filter = { date: date_range }.compact result = Message.joins(:discussion) .where({sender: user.uid, discussions: { organization: organization }}.merge(date_filter)) .group(:approved) .count unapproved = result[false] || 0 approved = result[true] || 0 { count: unapproved + approved, approved: approved } end def organization_exercises @organization_exercises ||= organization.exercises end end
Version data entries
6 entries across 6 versions & 1 rubygems