Sha256: e85c27f038397fb518fd245b03354ba99a6ba3b26eabcbf39647882249b487d8

Contents?: true

Size: 1.53 KB

Versions: 27

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

module Decidim
  module Core
    # A GraphQL resolver to handle `count` and `metric` queries
    class MetricResolver
      attr_reader :name

      #
      # - name: name identifier of metric
      # - organization: Decidim::Organization scoping
      # - filters: hash of attr - value to filter results
      #
      def initialize(name, organization, filters = {})
        @name = name
        @organization = organization
        @filters = filters
        @group_by = :day
        @counter_field = :cumulative
      end

      def count
        resolve.max.try(:last) || 0
      end

      def history
        resolve
      end

      private

      def resolve
        return @records if @records

        scope
        filter
        group
        sum
        @records
      end

      def scope
        @records = Decidim::Metric
                   .where(metric_type: name, organization: organization)
      end

      # Only key name attributes in Decidim::Metric will be applied
      def filter
        @filters.each do |key, value|
          next unless Decidim::Metric.column_names.include? key.to_s

          @records = @records.where("#{key}": value)
        end
      end

      def group
        @records = @records
                   .group(group_by)
                   .order("#{group_by} DESC")
      end

      def sum
        @records = @records
                   .limit(60)
                   .sum(counter_field)
      end

      attr_reader :organization, :filters, :group_by, :counter_field
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
decidim-core-0.25.2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.25.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.25.0 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.25.0.rc4 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.25.0.rc3 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.25.0.rc2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.25.0.rc1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.24.3 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.6 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.24.2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.5 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.24.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.24.0 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.24.0.rc2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.4 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.24.0.rc1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.3 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.23.1.rc1 app/resolvers/decidim/core/metric_resolver.rb