# frozen_string_literal: true

class TopicViewStat < ActiveRecord::Base
  belongs_to :topic

  def self.add(topic_id:, date:, anonymous_views:, logged_in_views:)
    sql = <<~SQL
          INSERT INTO topic_view_stats (topic_id, viewed_at, anonymous_views, logged_in_views)
          VALUES (:topic_id, :viewed_at, :anon_views, :logged_in_views)
          ON CONFLICT (topic_id, viewed_at)
          DO UPDATE SET
            anonymous_views = topic_view_stats.anonymous_views + :anon_views,
            logged_in_views = topic_view_stats.logged_in_views + :logged_in_views
        SQL

    DB.exec(
      sql,
      topic_id: topic_id,
      viewed_at: date,
      anon_views: anonymous_views,
      logged_in_views: logged_in_views,
    )
  end
end

# == Schema Information
#
# Table name: topic_view_stats
#
#  id              :bigint           not null, primary key
#  topic_id        :integer          not null
#  viewed_at       :date             not null
#  anonymous_views :integer          default(0), not null
#  logged_in_views :integer          default(0), not null
#
# Indexes
#
#  index_topic_view_stats_on_topic_id_and_viewed_at  (topic_id,viewed_at) UNIQUE
#  index_topic_view_stats_on_viewed_at_and_topic_id  (viewed_at,topic_id)
#