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
Current section
221 Versions
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 rows — the 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…