defmodule Berrypod.Repo.Migrations.CreateRedirectsAndBrokenUrls do
  use Ecto.Migration

  def change do
    create table(:redirects, primary_key: false) do
      add :id, :binary_id, primary_key: true
      add :from_path, :string, null: false
      add :to_path, :string, null: false
      add :status_code, :integer, default: 301
      add :source, :string, null: false
      add :confidence, :float
      add :hit_count, :integer, default: 0

      timestamps()
    end

    create unique_index(:redirects, [:from_path])
    create index(:redirects, [:source])

    create table(:broken_urls, primary_key: false) do
      add :id, :binary_id, primary_key: true
      add :path, :string, null: false
      add :prior_analytics_hits, :integer, default: 0
      add :recent_404_count, :integer, default: 1
      add :first_seen_at, :utc_datetime, null: false
      add :last_seen_at, :utc_datetime, null: false
      add :status, :string, default: "pending"
      add :resolved_redirect_id, references(:redirects, type: :binary_id, on_delete: :nilify_all)

      timestamps()
    end

    create unique_index(:broken_urls, [:path])
    create index(:broken_urls, [:status])
    create index(:broken_urls, [:prior_analytics_hits])
  end
end
