47 lines
1.1 KiB
Elixir
47 lines
1.1 KiB
Elixir
defmodule Mv.Repo.Migrations.AddSlugToCustomFields do
|
|
@moduledoc """
|
|
Updates resources based on their most recent snapshots.
|
|
|
|
This file was autogenerated with `mix ash_postgres.generate_migrations`
|
|
"""
|
|
|
|
use Ecto.Migration
|
|
|
|
def up do
|
|
# Step 1: Add slug column as nullable first
|
|
alter table(:custom_fields) do
|
|
add :slug, :text, null: true
|
|
end
|
|
|
|
# Step 2: Generate slugs for existing custom fields
|
|
execute("""
|
|
UPDATE custom_fields
|
|
SET slug = lower(
|
|
regexp_replace(
|
|
regexp_replace(
|
|
regexp_replace(name, '[^a-zA-Z0-9\\s-]', '', 'g'),
|
|
'\\s+', '-', 'g'
|
|
),
|
|
'-+', '-', 'g'
|
|
)
|
|
)
|
|
WHERE slug IS NULL
|
|
""")
|
|
|
|
# Step 3: Make slug NOT NULL
|
|
alter table(:custom_fields) do
|
|
modify :slug, :text, null: false
|
|
end
|
|
|
|
# Step 4: Create unique index
|
|
create unique_index(:custom_fields, [:slug], name: "custom_fields_unique_slug_index")
|
|
end
|
|
|
|
def down do
|
|
drop_if_exists unique_index(:custom_fields, [:slug], name: "custom_fields_unique_slug_index")
|
|
|
|
alter table(:custom_fields) do
|
|
remove :slug
|
|
end
|
|
end
|
|
end
|