Packages

phoenix_kit

1.7.176
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 v118.ex
Raw

lib/phoenix_kit/migrations/postgres/v118.ex

defmodule PhoenixKit.Migrations.Postgres.V118 do
@moduledoc """
V118: Widen `phoenix_kit_annotations_kind_check` for the new
`"callout"` and `"text"` kinds + add a `title` column to
`phoenix_kit_annotations`.
Etcher 0.2 ships three related additions on the annotations table;
they're folded into one migration because they all hang off the
same row schema (kind CHECK + a single new column) — splitting
would have meant two trips over the same constraint.
1. **Callout** — leader-line annotation: a small anchor point
with a line connecting to a labeled text bbox that displays
inline on the image. Needs `kind = "callout"` to pass the
V115 CHECK.
2. **Text** — freestanding text label drawn as a click-drag bbox
whose content lives in the V118 `title` column. Needs
`kind = "text"` to pass the CHECK.
3. **`title varchar(200)`** — optional short label that every
kind can carry. Renders inline on the shape (above the
bounding box for rect/circle/polygon, at the leader endpoint
for callout, inside the bbox for text). Its own column so
it stays queryable outside the JSONB blob.
Both operations are idempotent (`IF NOT EXISTS` / `DO $$` guards)
so re-running on a partially-applied schema is a no-op.
"""
use Ecto.Migration
def up(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
# Widen the kind CHECK constraint to include callout + text.
execute(
"ALTER TABLE #{p}phoenix_kit_annotations DROP CONSTRAINT IF EXISTS phoenix_kit_annotations_kind_check"
)
execute("""
DO $$ BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'phoenix_kit_annotations_kind_check'
) THEN
ALTER TABLE #{p}phoenix_kit_annotations
ADD CONSTRAINT phoenix_kit_annotations_kind_check
CHECK (kind IN ('rectangle', 'circle', 'polygon', 'freehand', 'callout', 'text'));
END IF;
END $$
""")
# Optional inline title.
execute("ALTER TABLE #{p}phoenix_kit_annotations ADD COLUMN IF NOT EXISTS title VARCHAR(200)")
execute("COMMENT ON TABLE #{p}phoenix_kit IS '118'")
end
def down(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
execute("ALTER TABLE #{p}phoenix_kit_annotations DROP COLUMN IF EXISTS title")
execute(
"ALTER TABLE #{p}phoenix_kit_annotations DROP CONSTRAINT IF EXISTS phoenix_kit_annotations_kind_check"
)
execute("""
DO $$ BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'phoenix_kit_annotations_kind_check'
) THEN
ALTER TABLE #{p}phoenix_kit_annotations
ADD CONSTRAINT phoenix_kit_annotations_kind_check
CHECK (kind IN ('rectangle', 'circle', 'polygon', 'freehand'));
END IF;
END $$
""")
execute("COMMENT ON TABLE #{p}phoenix_kit IS '117'")
end
defp prefix_str("public"), do: "public."
defp prefix_str(prefix), do: "#{prefix}."
end