Packages

phoenix_kit

1.7.108
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 v108.ex
Raw

lib/phoenix_kit/migrations/postgres/v108.ex

defmodule PhoenixKit.Migrations.Postgres.V108 do
@moduledoc """
V108: Add `position` columns for drag-and-drop reordering on three
list surfaces.
Three independent admin lists previously sat in insertion order
(latest first or alphabetical) with no user-driven order:
- `phoenix_kit_entities` — the entity-definitions list at
`/admin/entities`
- `phoenix_kit_cat_catalogues` — the catalogues index at
`/admin/catalogue`
- `phoenix_kit_cat_items` — items shown on a catalogue's detail page
and inside categories
Categories and smart-catalogue rules already carry their own
`position` columns (V87 and V102 respectively), so they're untouched
here. The `phoenix_kit_entity_data` table got its `position` column
in V81 along with a `(entity_uuid, position)` composite index for
the manual-sort query, so it's also already covered.
## Up
Adds a nullable `position integer` to each of the three tables with a
default of `0`. New rows get `0`; the LV reorder handlers re-index
the visible group to `1..N` on the first user drag, so the default is
only ever observed transiently.
No indexes on the three new `position` columns themselves — entity /
catalogue / item-per-catalogue lists are small (≤ a few hundred
rows) and have other indexed scope filters; a position-only btree
would burn write amplification for no real read win.
## Down
Drops the three columns. Lossy — any user-set ordering is discarded.
"""
use Ecto.Migration
def up(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
execute("""
ALTER TABLE #{p}phoenix_kit_entities
ADD COLUMN IF NOT EXISTS position integer DEFAULT 0
""")
execute("""
ALTER TABLE #{p}phoenix_kit_cat_catalogues
ADD COLUMN IF NOT EXISTS position integer DEFAULT 0
""")
execute("""
ALTER TABLE #{p}phoenix_kit_cat_items
ADD COLUMN IF NOT EXISTS position integer DEFAULT 0
""")
execute("COMMENT ON TABLE #{p}phoenix_kit IS '108'")
end
def down(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
execute("""
ALTER TABLE #{p}phoenix_kit_cat_items
DROP COLUMN IF EXISTS position
""")
execute("""
ALTER TABLE #{p}phoenix_kit_cat_catalogues
DROP COLUMN IF EXISTS position
""")
execute("""
ALTER TABLE #{p}phoenix_kit_entities
DROP COLUMN IF EXISTS position
""")
execute("COMMENT ON TABLE #{p}phoenix_kit IS '107'")
end
defp prefix_str("public"), do: "public."
defp prefix_str(prefix), do: "#{prefix}."
end