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

Version Path
mumuki-domain-9.0.5 app/models/user_stats.rb
mumuki-domain-9.0.4 app/models/user_stats.rb
mumuki-domain-9.0.3 app/models/user_stats.rb
mumuki-domain-9.0.2 app/models/user_stats.rb
mumuki-domain-9.0.0 app/models/user_stats.rb
mumuki-domain-8.6.1 app/models/user_stats.rb