Sha256: e8242d721004284a0336345bff15025f30bb2e797ed09a025d362e7b6e9c80ce

Contents?: true

Size: 1.53 KB

Versions: 17

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:)
      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(Arel.sql("#{group_by} DESC").to_s)
      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

17 entries across 17 versions & 1 rubygems

Version Path
decidim-core-0.30.0.rc2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.30.0.rc1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.5 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.4 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.0 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.3 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.0.rc4 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.0.rc3 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.0.rc2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.29.0.rc1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.2 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.1 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.0 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.0.rc5 app/resolvers/decidim/core/metric_resolver.rb
decidim-core-0.28.0.rc4 app/resolvers/decidim/core/metric_resolver.rb