Sha256: 35e6372060017cb2ffcd35971375a5e0ef52567aa1e1f26cc32ec7eb415fd5af

Contents?: true

Size: 1.53 KB

Versions: 7

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

7 entries across 7 versions & 1 rubygems

Version Path
decidim-core-0.18.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.17.2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.18.0 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.17.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.16.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.17.0 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.16.0 app/resolvers/decidim/core/metric_resolver.rb