Packages

phoenix_kit

1.7.206
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 v87.ex
Raw

lib/phoenix_kit/migrations/postgres/v87.ex

defmodule PhoenixKit.Migrations.Postgres.V87 do
@moduledoc """
V87: Add Catalogue tables.
Creates the six tables needed by the PhoenixKitCatalogue module:
- `phoenix_kit_cat_manufacturers` — manufacturer directory
- `phoenix_kit_cat_suppliers` — supplier directory
- `phoenix_kit_cat_manufacturer_suppliers` — many-to-many join
- `phoenix_kit_cat_catalogues` — top-level catalogue groupings
- `phoenix_kit_cat_categories` — subdivisions within a catalogue
- `phoenix_kit_cat_items` — individual products/materials
"""
use Ecto.Migration
def up(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
# ── Manufacturers ──────────────────────────────────────────────
create_if_not_exists table(:phoenix_kit_cat_manufacturers,
primary_key: false,
prefix: prefix
) do
add(:uuid, :uuid, primary_key: true, default: fragment("#{prefix}.uuid_generate_v7()"))
add(:name, :string, null: false, size: 255)
add(:description, :text)
add(:website, :string, size: 500)
add(:contact_info, :string, size: 500)
add(:logo_url, :string, size: 500)
add(:notes, :text)
add(:status, :string, default: "active", size: 20)
add(:data, :map, default: %{})
timestamps(type: :utc_datetime)
end
create_if_not_exists(index(:phoenix_kit_cat_manufacturers, [:status], prefix: prefix))
# ── Suppliers ──────────────────────────────────────────────────
create_if_not_exists table(:phoenix_kit_cat_suppliers,
primary_key: false,
prefix: prefix
) do
add(:uuid, :uuid, primary_key: true, default: fragment("#{prefix}.uuid_generate_v7()"))
add(:name, :string, null: false, size: 255)
add(:description, :text)
add(:website, :string, size: 500)
add(:contact_info, :string, size: 500)
add(:notes, :text)
add(:status, :string, default: "active", size: 20)
add(:data, :map, default: %{})
timestamps(type: :utc_datetime)
end
create_if_not_exists(index(:phoenix_kit_cat_suppliers, [:status], prefix: prefix))
# ── Manufacturer ↔ Supplier join ──────────────────────────────
create_if_not_exists table(:phoenix_kit_cat_manufacturer_suppliers,
primary_key: false,
prefix: prefix
) do
add(:uuid, :uuid, primary_key: true, default: fragment("#{prefix}.uuid_generate_v7()"))
add(
:manufacturer_uuid,
references(:phoenix_kit_cat_manufacturers,
column: :uuid,
type: :uuid,
on_delete: :delete_all,
prefix: prefix
),
null: false
)
add(
:supplier_uuid,
references(:phoenix_kit_cat_suppliers,
column: :uuid,
type: :uuid,
on_delete: :delete_all,
prefix: prefix
),
null: false
)
timestamps(type: :utc_datetime)
end
create_if_not_exists(
unique_index(
:phoenix_kit_cat_manufacturer_suppliers,
[:manufacturer_uuid, :supplier_uuid],
prefix: prefix
)
)
# ── Catalogues ─────────────────────────────────────────────────
create_if_not_exists table(:phoenix_kit_cat_catalogues,
primary_key: false,
prefix: prefix
) do
add(:uuid, :uuid, primary_key: true, default: fragment("#{prefix}.uuid_generate_v7()"))
add(:name, :string, null: false, size: 255)
add(:description, :text)
add(:status, :string, default: "active", size: 20)
add(:data, :map, default: %{})
timestamps(type: :utc_datetime)
end
create_if_not_exists(index(:phoenix_kit_cat_catalogues, [:status], prefix: prefix))
# ── Categories ─────────────────────────────────────────────────
create_if_not_exists table(:phoenix_kit_cat_categories,
primary_key: false,
prefix: prefix
) do
add(:uuid, :uuid, primary_key: true, default: fragment("#{prefix}.uuid_generate_v7()"))
add(:name, :string, null: false, size: 255)
add(:description, :text)
add(:position, :integer, default: 0)
add(:status, :string, default: "active", size: 20)
add(
:catalogue_uuid,
references(:phoenix_kit_cat_catalogues,
column: :uuid,
type: :uuid,
on_delete: :delete_all,
prefix: prefix
),
null: false
)
add(:data, :map, default: %{})
timestamps(type: :utc_datetime)
end
create_if_not_exists(index(:phoenix_kit_cat_categories, [:catalogue_uuid], prefix: prefix))
create_if_not_exists(
index(:phoenix_kit_cat_categories, [:catalogue_uuid, :position], prefix: prefix)
)
create_if_not_exists(index(:phoenix_kit_cat_categories, [:status], prefix: prefix))
# ── Items ──────────────────────────────────────────────────────
create_if_not_exists table(:phoenix_kit_cat_items,
primary_key: false,
prefix: prefix
) do
add(:uuid, :uuid, primary_key: true, default: fragment("#{prefix}.uuid_generate_v7()"))
add(:name, :string, null: false, size: 255)
add(:description, :text)
add(:sku, :string, size: 100)
add(:price, :decimal, precision: 12, scale: 2)
add(:unit, :string, default: "piece", size: 20)
add(:status, :string, default: "active", size: 20)
add(
:category_uuid,
references(:phoenix_kit_cat_categories,
column: :uuid,
type: :uuid,
on_delete: :nilify_all,
prefix: prefix
)
)
add(
:manufacturer_uuid,
references(:phoenix_kit_cat_manufacturers,
column: :uuid,
type: :uuid,
on_delete: :nilify_all,
prefix: prefix
)
)
add(:data, :map, default: %{})
timestamps(type: :utc_datetime)
end
create_if_not_exists(
unique_index(:phoenix_kit_cat_items, [:sku],
prefix: prefix,
where: "sku IS NOT NULL"
)
)
create_if_not_exists(index(:phoenix_kit_cat_items, [:category_uuid], prefix: prefix))
create_if_not_exists(index(:phoenix_kit_cat_items, [:manufacturer_uuid], prefix: prefix))
create_if_not_exists(index(:phoenix_kit_cat_items, [:status], prefix: prefix))
execute("COMMENT ON TABLE #{p}phoenix_kit IS '87'")
end
def down(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
drop_if_exists(table(:phoenix_kit_cat_items, prefix: prefix))
drop_if_exists(table(:phoenix_kit_cat_categories, prefix: prefix))
drop_if_exists(table(:phoenix_kit_cat_catalogues, prefix: prefix))
drop_if_exists(table(:phoenix_kit_cat_manufacturer_suppliers, prefix: prefix))
drop_if_exists(table(:phoenix_kit_cat_suppliers, prefix: prefix))
drop_if_exists(table(:phoenix_kit_cat_manufacturers, prefix: prefix))
execute("COMMENT ON TABLE #{p}phoenix_kit IS '86'")
end
defp prefix_str("public"), do: "public."
defp prefix_str(prefix), do: "#{prefix}."
end