add URL redirects with ETS-cached plug, broken URL tracking, and admin UI
All checks were successful
deploy / deploy (push) Successful in 3m30s
All checks were successful
deploy / deploy (push) Successful in 3m30s
Redirects context with redirect/broken_url schemas, chain flattening, ETS cache for fast lookups in the request pipeline. BrokenUrlTracker plug logs 404s. Auto-redirect on product slug change via upsert_product hook. Admin redirects page with active/broken tabs, manual create form. RedirectPrunerWorker cleans up old broken URLs. 1227 tests passing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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
|
||||
Reference in New Issue
Block a user