defmodule Tarakan.Repo.Migrations.CreateInfestationSwarms do
  use Ecto.Migration

  # One row per swarm run. The cooldown reads the newest row for a pattern, and
  # the rows double as a record of who fanned work out across other people's
  # agents - the cost of a swarm lands on them, not on the moderator clicking.
  def change do
    create table(:infestation_swarms) do
      add :pattern_key, :string, null: false
      add :account_id, references(:accounts, on_delete: :nilify_all)
      add :jobs_opened, :integer, null: false, default: 0
      add :candidates_seen, :integer, null: false, default: 0

      timestamps(type: :utc_datetime_usec)
    end

    create index(:infestation_swarms, [:pattern_key, :inserted_at],
             name: :infestation_swarms_pattern_recent_index
           )

    create index(:infestation_swarms, [:account_id])
  end
end
