Packages

phoenix_kit

1.7.194
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

221 Versions

Jump to

Compare versions

6 files changed
+116 additions
-5 deletions
unknownCHANGELOG.md
File is too large to be displayed (100 KB limit).
  @@ -1,6 +1,6 @@
1 1 {<<"links">>,[{<<"GitHub">>,<<"https://github.com/BeamLabEU/phoenix_kit">>}]}.
2 2 {<<"name">>,<<"phoenix_kit">>}.
3 - {<<"version">>,<<"1.7.193">>}.
3 + {<<"version">>,<<"1.7.194">>}.
4 4 {<<"description">>,
5 5 <<65,32,102,111,117,110,100,97,116,105,111,110,32,102,111,114,32,98,117,105,
6 6 108,100,105,110,103,32,69,108,105,120,105,114,32,80,104,111,101,110,105,
  @@ -533,6 +533,7 @@
533 533 <<"lib/phoenix_kit/migrations/postgres/v56.ex">>,
534 534 <<"lib/phoenix_kit/migrations/postgres/v09.ex">>,
535 535 <<"lib/phoenix_kit/migrations/postgres/v116.ex">>,
536 + <<"lib/phoenix_kit/migrations/postgres/v149.ex">>,
536 537 <<"lib/phoenix_kit/migrations/postgres/v139.ex">>,
537 538 <<"lib/phoenix_kit/migrations/postgres/v26.ex">>,
538 539 <<"lib/phoenix_kit/migrations/postgres/v79.ex">>,
  @@ -526,7 +526,10 @@ defmodule PhoenixKit.Integrations.Providers do
526 526 options: nil
527 527 }
528 528 ],
529 - capabilities: [:ai_completions],
529 + # `:realtime_voice` gates the xAI-only streaming TTS panel in
530 + # phoenix_kit_ai's Playground (Xai.Realtime, WebSocket-based — not
531 + # reachable through the shared REST completions path).
532 + capabilities: [:ai_completions, :realtime_voice],
530 533 instructions: [
531 534 %{
532 535 title: gettext("Create an xAI account"),
  @@ -529,7 +529,14 @@ defmodule PhoenixKit.Migrations.Postgres do
529 529 - Replaces unique index with partial index (slug-mode only, WHERE slug IS NOT NULL)
530 530 - Adds unique index on `(group_uuid, post_date, post_time)` for timestamp-mode posts
531 531
532 - ### V148 - CRM party roles (suppliers, clients) ⚡ LATEST
532 + ### V149 - Catalogue item-supplier sourcing info + CRM xref ⚡ LATEST
533 + - Adds `phoenix_kit_cat_item_supplier_info` (per-item, per-supplier SKU /
534 + unit cost / currency / lead time / MOQ; `supplier_uuid` soft ref to a
535 + CRM party or local `cat_supplier`) and a soft `crm_company_uuid` xref on
536 + `phoenix_kit_cat_suppliers`. No primary among these rowsthe item's
537 + default supplier is the V146 `primary_supplier_uuid` scalar.
538 +
539 + ### V148 - CRM party roles (suppliers, clients)
533 540 - Adds `phoenix_kit_crm_party_roles` for the `phoenix_kit_crm` module:
534 541 polymorphic role edge marking a CRM company or contact as `supplier`,
535 542 `client`, or other commercial role. One party can hold several roles;
  @@ -1296,7 +1303,7 @@ defmodule PhoenixKit.Migrations.Postgres do
1296 1303 alias PhoenixKit.Migrations.Postgres.Helpers
1297 1304
1298 1305 @initial_version 1
1299 - @current_version 148
1306 + @current_version 149
1300 1307 @default_prefix "public"
1301 1308
1302 1309 # First version whose SQL references uuid_generate_v7(). Chains that
  @@ -0,0 +1,100 @@
1 + defmodule PhoenixKit.Migrations.Postgres.V149 do
2 + @moduledoc """
3 + V149: Catalogue item-supplier sourcing info + CRM cross-refs.
4 +
5 + Two additive changes that let the `phoenix_kit_catalogue` plugin carry
6 + per-supplier sourcing detail per item and, later, federate those
7 + suppliers against CRM — without changing anything warehouse depends on.
8 +
9 + The item's scalar `primary_supplier_uuid` is **not** created here — it
10 + ships upstream in V146 (a hard FK to `phoenix_kit_cat_suppliers`). This
11 + junction is the richer, per-supplier pricing layer alongside it.
12 +
13 + ## phoenix_kit_cat_item_supplier_info
14 + New junction table: one item can be sourced from several suppliers, each
15 + with its own SKU, unit cost/currency, lead time, and MOQ. `supplier_uuid`
16 + is a **soft ref** (no FK) — it resolves to a CRM party or a local
17 + `cat_supplier`; this is where CRM federation actually lands. There is no
18 + "primary" among these rows — the item's default supplier is the V146
19 + `primary_supplier_uuid` scalar (a hard FK to `cat_suppliers`); this table
20 + is purely the per-supplier pricing layer alongside it.
21 +
22 + ## `phoenix_kit_cat_suppliers.crm_company_uuid`
23 + Nullable UUID **soft** cross-module xref from a local supplier record to a
24 + CRM company, letting a supplier be gradually federated into CRM without
25 + losing its catalogue-local identity.
26 +
27 + All operations are idempotent.
28 + """
29 +
30 + use Ecto.Migration
31 +
32 + def up(opts) do
33 + prefix = Map.get(opts, :prefix, "public")
34 + p = prefix_str(prefix)
35 +
36 + # ── Item ↔ supplier sourcing info (CRM federation lands here) ───────
37 + execute("""
38 + CREATE TABLE IF NOT EXISTS #{p}phoenix_kit_cat_item_supplier_info (
39 + uuid UUID PRIMARY KEY DEFAULT #{p}uuid_generate_v7(),
40 + item_uuid UUID NOT NULL REFERENCES #{p}phoenix_kit_cat_items(uuid) ON DELETE CASCADE,
41 + supplier_uuid UUID NOT NULL,
42 + supplier_sku VARCHAR(100),
43 + supplier_name_snapshot VARCHAR(255),
44 + unit_cost NUMERIC(14,4),
45 + currency VARCHAR(3),
46 + lead_time_days INTEGER,
47 + min_order_qty NUMERIC(14,4),
48 + valid_from DATE,
49 + valid_to DATE,
50 + position INTEGER NOT NULL DEFAULT 0,
51 + metadata JSONB NOT NULL DEFAULT '{}',
52 + inserted_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
53 + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
54 + )
55 + """)
56 +
57 + execute("""
58 + CREATE INDEX IF NOT EXISTS phoenix_kit_cat_item_supplier_info_item_index
59 + ON #{p}phoenix_kit_cat_item_supplier_info (item_uuid)
60 + """)
61 +
62 + execute("""
63 + CREATE INDEX IF NOT EXISTS phoenix_kit_cat_item_supplier_info_supplier_index
64 + ON #{p}phoenix_kit_cat_item_supplier_info (supplier_uuid)
65 + """)
66 +
67 + # ── Soft CRM xref on local suppliers ─────────────────────────────────
68 + execute("""
69 + ALTER TABLE #{p}phoenix_kit_cat_suppliers
70 + ADD COLUMN IF NOT EXISTS crm_company_uuid UUID
71 + """)
72 +
73 + execute("COMMENT ON TABLE #{p}phoenix_kit IS '149'")
74 + end
75 +
76 + @doc """
77 + Rolls V149 back by dropping the item-supplier-info table and the supplier
78 + CRM xref column, in reverse order.
79 +
80 + **Lossy rollback:** all per-supplier item sourcing info (cost, SKU, lead
81 + time, CRM links) is lost. Items, suppliers, and the V146 scalar
82 + `primary_supplier_uuid` are untouched.
83 + """
84 + def down(opts) do
85 + prefix = Map.get(opts, :prefix, "public")
86 + p = prefix_str(prefix)
87 +
88 + execute("DROP TABLE IF EXISTS #{p}phoenix_kit_cat_item_supplier_info CASCADE")
89 +
90 + execute("""
91 + ALTER TABLE #{p}phoenix_kit_cat_suppliers
92 + DROP COLUMN IF EXISTS crm_company_uuid
93 + """)
94 +
95 + execute("COMMENT ON TABLE #{p}phoenix_kit IS '148'")
96 + end
97 +
98 + defp prefix_str("public"), do: "public."
99 + defp prefix_str(prefix), do: "#{prefix}."
100 + end
Loading more files…