unepwcmc/SAPI

View on GitHub
app/services/events_by_type_stats.rb

Summary

Maintainability
A
1 hr
Test Coverage
class EventsByTypeStats

  def initialize(start_date, end_date)
    @start_date = start_date
    @end_date = end_date
  end

  def data
    Ahoy::Event.from(<<-SQL
      (
        WITH weeks_as_timestamps AS (
          SELECT * FROM generate_series(
            '#{@start_date}'::timestamp,
            '#{@end_date}'::timestamp,
            '1 week'
          )
        ), weeks_as_dates AS (
          SELECT
            generate_series::date AS start_date,
            generate_series::date + 7 AS end_date
          FROM weeks_as_timestamps
        )
        SELECT start_date,
        SUM(CASE WHEN name = 'Taxon Concept' THEN 1 ELSE 0 END) AS taxon_concept_cnt,
        SUM(CASE WHEN name = 'Search' THEN 1 ELSE 0 END) AS search_cnt
        FROM weeks_as_dates w
        LEFT JOIN ahoy_events
          ON w.start_date <= ahoy_events.time
          AND w.end_date > ahoy_events.time
        GROUP BY start_date
        ORDER BY start_date
      ) AS q
      SQL
    ).select([:start_date, :taxon_concept_cnt, :search_cnt])
  end
end