Packages

phoenix_kit

1.7.193
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit migrations postgres v65.ex
Raw

lib/phoenix_kit/migrations/postgres/v65.ex

defmodule PhoenixKit.Migrations.Postgres.V65 do
@moduledoc """
V65: Rename SubscriptionPlan → SubscriptionType
Renames the subscription plans table and related FK columns in subscriptions
to reflect the correct "subscription type" naming convention.
## Changes
1. `phoenix_kit_subscription_plans` table → `phoenix_kit_subscription_types`
2. `phoenix_kit_subscription_plans_slug_uidx` index →
`phoenix_kit_subscription_types_slug_uidx`
3. `phoenix_kit_subscriptions.plan_id``subscription_type_id`
4. `phoenix_kit_subscriptions.plan_uuid``subscription_type_uuid`
All operations are idempotent — safe to run on any installation.
"""
use Ecto.Migration
def up(%{prefix: prefix} = opts) do
escaped_prefix = Map.get(opts, :escaped_prefix, prefix)
# Flush any pending migration commands from earlier versions
flush()
# 1. Rename phoenix_kit_subscription_plans → phoenix_kit_subscription_types
rename_subscription_plans_table(prefix, escaped_prefix)
# Flush so the renamed table is visible for subsequent operations
flush()
# 2. Rename plan_id / plan_uuid columns in phoenix_kit_subscriptions
rename_plan_columns_in_subscriptions(prefix, escaped_prefix)
execute("COMMENT ON TABLE #{prefix_table("phoenix_kit", prefix)} IS '65'")
end
def down(%{prefix: prefix} = opts) do
escaped_prefix = Map.get(opts, :escaped_prefix, prefix)
# Reverse column renames first
reverse_plan_columns_in_subscriptions(prefix, escaped_prefix)
# Then reverse table rename
reverse_subscription_plans_table(prefix, escaped_prefix)
execute("COMMENT ON TABLE #{prefix_table("phoenix_kit", prefix)} IS '64'")
end
# ---------------------------------------------------------------------------
# Up helpers
# ---------------------------------------------------------------------------
defp rename_subscription_plans_table(prefix, escaped_prefix) do
if table_exists?(:phoenix_kit_subscription_plans, escaped_prefix) do
old_table = prefix_table("phoenix_kit_subscription_plans", prefix)
execute("ALTER TABLE #{old_table} RENAME TO phoenix_kit_subscription_types")
execute("""
ALTER INDEX IF EXISTS phoenix_kit_subscription_plans_slug_uidx
RENAME TO phoenix_kit_subscription_types_slug_uidx
""")
end
end
defp rename_plan_columns_in_subscriptions(prefix, escaped_prefix) do
if table_exists?(:phoenix_kit_subscriptions, escaped_prefix) do
table = prefix_table("phoenix_kit_subscriptions", prefix)
if column_exists?(:phoenix_kit_subscriptions, :plan_id, escaped_prefix) do
execute("ALTER TABLE #{table} RENAME COLUMN plan_id TO subscription_type_id")
end
if column_exists?(:phoenix_kit_subscriptions, :plan_uuid, escaped_prefix) do
execute("ALTER TABLE #{table} RENAME COLUMN plan_uuid TO subscription_type_uuid")
end
end
end
# ---------------------------------------------------------------------------
# Down helpers
# ---------------------------------------------------------------------------
defp reverse_subscription_plans_table(prefix, escaped_prefix) do
if table_exists?(:phoenix_kit_subscription_types, escaped_prefix) do
new_table = prefix_table("phoenix_kit_subscription_types", prefix)
execute("ALTER TABLE #{new_table} RENAME TO phoenix_kit_subscription_plans")
execute("""
ALTER INDEX IF EXISTS phoenix_kit_subscription_types_slug_uidx
RENAME TO phoenix_kit_subscription_plans_slug_uidx
""")
end
end
defp reverse_plan_columns_in_subscriptions(prefix, escaped_prefix) do
if table_exists?(:phoenix_kit_subscriptions, escaped_prefix) do
table = prefix_table("phoenix_kit_subscriptions", prefix)
if column_exists?(:phoenix_kit_subscriptions, :subscription_type_id, escaped_prefix) do
execute("ALTER TABLE #{table} RENAME COLUMN subscription_type_id TO plan_id")
end
if column_exists?(:phoenix_kit_subscriptions, :subscription_type_uuid, escaped_prefix) do
execute("ALTER TABLE #{table} RENAME COLUMN subscription_type_uuid TO plan_uuid")
end
end
end
# ---------------------------------------------------------------------------
# Helpers (same pattern as V63)
# ---------------------------------------------------------------------------
defp table_exists?(table, escaped_prefix) do
table_name = Atom.to_string(table)
case repo().query(
"""
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_name = '#{table_name}'
AND table_schema = '#{escaped_prefix}'
)
""",
[],
log: false
) do
{:ok, %{rows: [[true]]}} -> true
_ -> false
end
end
defp column_exists?(table, column, escaped_prefix) do
table_name = Atom.to_string(table)
column_name = Atom.to_string(column)
case repo().query(
"""
SELECT EXISTS (
SELECT FROM information_schema.columns
WHERE table_name = '#{table_name}'
AND column_name = '#{column_name}'
AND table_schema = '#{escaped_prefix}'
)
""",
[],
log: false
) do
{:ok, %{rows: [[true]]}} -> true
_ -> false
end
end
defp prefix_table(table_name, nil), do: table_name
defp prefix_table(table_name, "public"), do: "public.#{table_name}"
defp prefix_table(table_name, prefix), do: "#{prefix}.#{table_name}"
end