Packages
phoenix_kit
1.7.145
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
Current section
Files
lib/phoenix_kit/migrations/postgres/v62.ex
defmodule PhoenixKit.Migrations.Postgres.V62 do
@moduledoc """
V62 — Rename UUID-type columns from `_id` suffix to `_uuid` suffix.
Enforces the naming convention: `_id` = integer (legacy), `_uuid` = UUID.
All 35 operations are idempotent (guarded by column existence checks).
## Groups
- A: Posts module (11 tables, 15 renames)
- B: Comments module (3 tables, 4 renames)
- C: Tickets module (3 tables, 6 renames)
- D: Storage module (2 tables, 3 renames)
- E: Publishing module (3 tables, 3 renames)
- F: Shop module (2 tables, 3 renames)
- G: Scheduled Jobs (1 table, 1 rename)
"""
use Ecto.Migration
@tables_and_columns [
# Group A: Posts
{"phoenix_kit_post_comments", "post_id", "post_uuid"},
{"phoenix_kit_post_comments", "parent_id", "parent_uuid"},
{"phoenix_kit_post_likes", "post_id", "post_uuid"},
{"phoenix_kit_post_dislikes", "post_id", "post_uuid"},
{"phoenix_kit_post_mentions", "post_id", "post_uuid"},
{"phoenix_kit_post_media", "post_id", "post_uuid"},
{"phoenix_kit_post_media", "file_id", "file_uuid"},
{"phoenix_kit_post_views", "post_id", "post_uuid"},
{"phoenix_kit_post_tag_assignments", "post_id", "post_uuid"},
{"phoenix_kit_post_tag_assignments", "tag_id", "tag_uuid"},
{"phoenix_kit_post_group_assignments", "post_id", "post_uuid"},
{"phoenix_kit_post_group_assignments", "group_id", "group_uuid"},
{"phoenix_kit_post_groups", "cover_image_id", "cover_image_uuid"},
{"phoenix_kit_comment_likes", "comment_id", "comment_uuid"},
{"phoenix_kit_comment_dislikes", "comment_id", "comment_uuid"},
# Group B: Comments (may not exist if module not enabled)
{"phoenix_kit_comments", "resource_id", "resource_uuid"},
{"phoenix_kit_comments", "parent_id", "parent_uuid"},
{"phoenix_kit_comments_likes", "comment_id", "comment_uuid"},
{"phoenix_kit_comments_dislikes", "comment_id", "comment_uuid"},
# Group C: Tickets
{"phoenix_kit_ticket_comments", "ticket_id", "ticket_uuid"},
{"phoenix_kit_ticket_comments", "parent_id", "parent_uuid"},
{"phoenix_kit_ticket_attachments", "ticket_id", "ticket_uuid"},
{"phoenix_kit_ticket_attachments", "comment_id", "comment_uuid"},
{"phoenix_kit_ticket_attachments", "file_id", "file_uuid"},
{"phoenix_kit_ticket_status_history", "ticket_id", "ticket_uuid"},
# Group D: Storage
{"phoenix_kit_file_instances", "file_id", "file_uuid"},
{"phoenix_kit_file_locations", "bucket_id", "bucket_uuid"},
{"phoenix_kit_file_locations", "file_instance_id", "file_instance_uuid"},
# Group E: Publishing (may not exist if module not enabled)
{"phoenix_kit_publishing_posts", "group_id", "group_uuid"},
{"phoenix_kit_publishing_versions", "post_id", "post_uuid"},
{"phoenix_kit_publishing_contents", "version_id", "version_uuid"},
# Group F: Shop
{"phoenix_kit_shop_categories", "image_id", "image_uuid"},
{"phoenix_kit_shop_products", "featured_image_id", "featured_image_uuid"},
{"phoenix_kit_shop_products", "file_id", "file_uuid"},
# Group G: Scheduled Jobs
{"phoenix_kit_scheduled_jobs", "resource_id", "resource_uuid"}
]
def up(%{prefix: prefix} = _opts) do
escaped_prefix = if prefix && prefix != "public", do: prefix, else: "public"
prefix_str = if prefix && prefix != "public", do: "#{prefix}.", else: ""
# CRITICAL: flush pending migration commands before using repo().query()
flush()
for {table, old_col, new_col} <- @tables_and_columns do
execute("""
DO $$ BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = '#{escaped_prefix}'
AND table_name = '#{table}'
AND column_name = '#{old_col}'
) THEN
ALTER TABLE #{prefix_str}#{table} RENAME COLUMN #{old_col} TO #{new_col};
END IF;
END $$;
""")
end
execute("COMMENT ON TABLE #{prefix_str}phoenix_kit IS '62'")
end
def down(%{prefix: prefix} = _opts) do
escaped_prefix = if prefix && prefix != "public", do: prefix, else: "public"
prefix_str = if prefix && prefix != "public", do: "#{prefix}.", else: ""
for {table, old_col, new_col} <- Enum.reverse(@tables_and_columns) do
execute("""
DO $$ BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = '#{escaped_prefix}'
AND table_name = '#{table}'
AND column_name = '#{new_col}'
) THEN
ALTER TABLE #{prefix_str}#{table} RENAME COLUMN #{new_col} TO #{old_col};
END IF;
END $$;
""")
end
execute("COMMENT ON TABLE #{prefix_str}phoenix_kit IS '61'")
end
end