Packages
phoenix_kit
1.7.75
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/v77.ex
defmodule PhoenixKit.Migrations.Postgres.V77 do
@moduledoc """
V77: Rename Tickets module settings keys and permission module_key to customer_service.
The `tickets` module has been renamed to `customer_service`. This migration
renames all associated settings keys and role permission module_key values
to match the new module identity.
## Changes
- Rename 6 settings keys from `tickets_*` → `customer_service_*`
- Rename auto-granted permission key from `auto_granted_perm:tickets` → `auto_granted_perm:customer_service`
- Rename role permission module_key from `tickets` → `customer_service`
All operations are idempotent.
"""
use Ecto.Migration
def up(%{prefix: prefix} = _opts) do
table = "#{prefix_str(prefix)}phoenix_kit_settings"
perms_table = "#{prefix_str(prefix)}phoenix_kit_role_permissions"
rename_setting(table, "tickets_enabled", "customer_service_enabled")
rename_setting(table, "tickets_per_page", "customer_service_per_page")
rename_setting(table, "tickets_comments_enabled", "customer_service_comments_enabled")
rename_setting(
table,
"tickets_internal_notes_enabled",
"customer_service_internal_notes_enabled"
)
rename_setting(table, "tickets_attachments_enabled", "customer_service_attachments_enabled")
rename_setting(table, "tickets_allow_reopen", "customer_service_allow_reopen")
rename_setting(table, "auto_granted_perm:tickets", "auto_granted_perm:customer_service")
rename_role_permission(perms_table, "tickets", "customer_service", prefix)
execute("COMMENT ON TABLE #{prefix_str(prefix)}phoenix_kit IS '77'")
end
# Renames a settings key. If the target already exists, deletes the source to avoid
# unique constraint violations (handles the case where new keys were pre-seeded).
defp rename_setting(table, from_key, to_key) do
execute("""
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM #{table} WHERE key = '#{to_key}') THEN
DELETE FROM #{table} WHERE key = '#{from_key}';
ELSE
UPDATE #{table} SET key = '#{to_key}' WHERE key = '#{from_key}';
END IF;
END $$;
""")
end
# Renames role permission module_key. If target already exists for the same role,
# deletes the source row to avoid unique constraint violations.
defp rename_role_permission(table, from_key, to_key, _prefix) do
execute("""
DO $$
BEGIN
-- Delete source rows where target already exists for the same role
DELETE FROM #{table} src
WHERE src.module_key = '#{from_key}'
AND EXISTS (
SELECT 1 FROM #{table} tgt
WHERE tgt.module_key = '#{to_key}' AND tgt.role_uuid = src.role_uuid
);
-- Rename remaining rows
UPDATE #{table} SET module_key = '#{to_key}' WHERE module_key = '#{from_key}';
END $$;
""")
end
def down(%{prefix: prefix} = _opts) do
table = "#{prefix_str(prefix)}phoenix_kit_settings"
perms_table = "#{prefix_str(prefix)}phoenix_kit_role_permissions"
rename_role_permission(perms_table, "customer_service", "tickets", prefix)
rename_setting(table, "auto_granted_perm:customer_service", "auto_granted_perm:tickets")
rename_setting(table, "customer_service_allow_reopen", "tickets_allow_reopen")
rename_setting(table, "customer_service_attachments_enabled", "tickets_attachments_enabled")
rename_setting(
table,
"customer_service_internal_notes_enabled",
"tickets_internal_notes_enabled"
)
rename_setting(table, "customer_service_comments_enabled", "tickets_comments_enabled")
rename_setting(table, "customer_service_per_page", "tickets_per_page")
rename_setting(table, "customer_service_enabled", "tickets_enabled")
execute("COMMENT ON TABLE #{prefix_str(prefix)}phoenix_kit IS '76'")
end
defp prefix_str(nil), do: ""
defp prefix_str("public"), do: "public."
defp prefix_str(prefix), do: "#{prefix}."
end