class CreateEvents < ActiveRecord::Migration[6.0]
  def change
    create_table :events, force: :cascade do |t|
      t.string :event_name, default: 'page_view', null: false

      t.string :session_id, null: false
      t.string :client_id, null: false
      t.string :user_id

      t.boolean :session_engagement, default: false
      t.integer :engagement_time
      t.integer :session_count
      t.integer :request_number

      # standard
      t.string :location_url
      t.string :hostname
      t.string :path
      t.string :title
      t.string :user_agent
      t.string :ip
      t.string :referrer
      t.string :referrer_source
      t.string :screen_resolution
      t.string :user_language

      # traffic
      t.string :traffic_campaign
      t.string :traffic_medium
      t.string :traffic_source

      # technology
      t.string :browser
      t.string :os
      t.string :device_type
      
      t.json :request_params
      t.json :user_props
      t.json :event_props

      t.datetime :started_at, null: false
    end
    add_index :events, :started_at
    add_index :events, [:session_id, :started_at]
    add_index :events, [:client_id, :started_at]
  end
end
