Packages

phoenix_kit

1.7.111
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 v81.ex
Raw

lib/phoenix_kit/migrations/postgres/v81.ex

defmodule PhoenixKit.Migrations.Postgres.V81 do
@moduledoc """
V81: Add position column to entity_data for manual reordering support.
Adds an integer `position` column to `phoenix_kit_entity_data` that enables
manual record ordering per entity. Auto-populated for existing records based
on creation date (earliest = 1). New records auto-populate via application code.
The entity's `settings` JSONB stores a `sort_mode` key ("auto" or "manual")
that controls whether queries sort by `date_created` or `position`.
"""
use Ecto.Migration
def up(opts) do
prefix = Map.get(opts, :prefix, "public")
if table_exists?(:phoenix_kit_entity_data, prefix) do
alter table(:phoenix_kit_entity_data, prefix: prefix) do
add_if_not_exists :position, :integer
end
# Backfill positions based on creation order (oldest = 1) per entity
execute """
WITH ranked AS (
SELECT uuid,
ROW_NUMBER() OVER (
PARTITION BY entity_uuid
ORDER BY date_created ASC
) AS rn
FROM #{prefix_str(prefix)}phoenix_kit_entity_data
WHERE position IS NULL
)
UPDATE #{prefix_str(prefix)}phoenix_kit_entity_data ed
SET position = ranked.rn
FROM ranked
WHERE ed.uuid = ranked.uuid
"""
create_if_not_exists index(:phoenix_kit_entity_data, [:entity_uuid, :position],
name: :phoenix_kit_entity_data_entity_position_idx,
prefix: prefix
)
end
execute "COMMENT ON TABLE #{prefix_str(prefix)}phoenix_kit IS '81'"
end
def down(opts) do
prefix = Map.get(opts, :prefix, "public")
if table_exists?(:phoenix_kit_entity_data, prefix) do
drop_if_exists index(:phoenix_kit_entity_data, [:entity_uuid, :position],
name: :phoenix_kit_entity_data_entity_position_idx,
prefix: prefix
)
alter table(:phoenix_kit_entity_data, prefix: prefix) do
remove_if_exists :position, :integer
end
end
execute "COMMENT ON TABLE #{prefix_str(prefix)}phoenix_kit IS '80'"
end
defp table_exists?(table_name, prefix) do
query = """
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_schema = '#{prefix}'
AND table_name = '#{table_name}'
)
"""
%{rows: [[exists]]} = PhoenixKit.RepoHelper.repo().query!(query)
exists
end
defp prefix_str("public"), do: "public."
defp prefix_str(prefix), do: "#{prefix}."
end