@endora-commerce/mod-price-lists 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/admin/components/ApplicationRuleBuilder.d.ts +24 -0
- package/dist/admin/components/ApplicationRuleBuilder.d.ts.map +1 -0
- package/dist/admin/components/ApplicationRuleBuilder.js +249 -0
- package/dist/admin/components/ApplicationRuleBuilder.js.map +1 -0
- package/dist/admin/components/BracketGrid.d.ts +29 -0
- package/dist/admin/components/BracketGrid.d.ts.map +1 -0
- package/dist/admin/components/BracketGrid.js +252 -0
- package/dist/admin/components/BracketGrid.js.map +1 -0
- package/dist/admin/components/DisplayModeOverrideRow.d.ts +46 -0
- package/dist/admin/components/DisplayModeOverrideRow.d.ts.map +1 -0
- package/dist/admin/components/DisplayModeOverrideRow.js +109 -0
- package/dist/admin/components/DisplayModeOverrideRow.js.map +1 -0
- package/dist/admin/components/LinkedPriceListsPanel.d.ts +55 -0
- package/dist/admin/components/LinkedPriceListsPanel.d.ts.map +1 -0
- package/dist/admin/components/LinkedPriceListsPanel.js +131 -0
- package/dist/admin/components/LinkedPriceListsPanel.js.map +1 -0
- package/dist/admin/index.d.ts +34 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +119 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/pages/DisplayModeOverridesPage.d.ts +25 -0
- package/dist/admin/pages/DisplayModeOverridesPage.d.ts.map +1 -0
- package/dist/admin/pages/DisplayModeOverridesPage.js +266 -0
- package/dist/admin/pages/DisplayModeOverridesPage.js.map +1 -0
- package/dist/admin/pages/PriceListDetailPage.d.ts +23 -0
- package/dist/admin/pages/PriceListDetailPage.d.ts.map +1 -0
- package/dist/admin/pages/PriceListDetailPage.js +421 -0
- package/dist/admin/pages/PriceListDetailPage.js.map +1 -0
- package/dist/admin/pages/PriceListsPage.d.ts +17 -0
- package/dist/admin/pages/PriceListsPage.d.ts.map +1 -0
- package/dist/admin/pages/PriceListsPage.js +198 -0
- package/dist/admin/pages/PriceListsPage.js.map +1 -0
- package/dist/admin/zones/CategoryDisplayMode.d.ts +27 -0
- package/dist/admin/zones/CategoryDisplayMode.d.ts.map +1 -0
- package/dist/admin/zones/CategoryDisplayMode.js +11 -0
- package/dist/admin/zones/CategoryDisplayMode.js.map +1 -0
- package/dist/admin/zones/OrganizationDisplayMode.d.ts +36 -0
- package/dist/admin/zones/OrganizationDisplayMode.d.ts.map +1 -0
- package/dist/admin/zones/OrganizationDisplayMode.js +12 -0
- package/dist/admin/zones/OrganizationDisplayMode.js.map +1 -0
- package/dist/admin/zones/ProductLinkedPriceLists.d.ts +16 -0
- package/dist/admin/zones/ProductLinkedPriceLists.d.ts.map +1 -0
- package/dist/admin/zones/ProductLinkedPriceLists.js +7 -0
- package/dist/admin/zones/ProductLinkedPriceLists.js.map +1 -0
- package/dist/backend/entities/price-display-mode-override.entity.d.ts +23 -0
- package/dist/backend/entities/price-display-mode-override.entity.d.ts.map +1 -0
- package/dist/backend/entities/price-display-mode-override.entity.js +58 -0
- package/dist/backend/entities/price-display-mode-override.entity.js.map +1 -0
- package/dist/backend/entities/price-list-price-bracket.entity.d.ts +26 -0
- package/dist/backend/entities/price-list-price-bracket.entity.d.ts.map +1 -0
- package/dist/backend/entities/price-list-price-bracket.entity.js +73 -0
- package/dist/backend/entities/price-list-price-bracket.entity.js.map +1 -0
- package/dist/backend/entities/price-list-product.entity.d.ts +15 -0
- package/dist/backend/entities/price-list-product.entity.d.ts.map +1 -0
- package/dist/backend/entities/price-list-product.entity.js +43 -0
- package/dist/backend/entities/price-list-product.entity.js.map +1 -0
- package/dist/backend/entities/price-list.entity.d.ts +34 -0
- package/dist/backend/entities/price-list.entity.d.ts.map +1 -0
- package/dist/backend/entities/price-list.entity.js +115 -0
- package/dist/backend/entities/price-list.entity.js.map +1 -0
- package/dist/backend/index.d.ts +125 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +179 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +68 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +88 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/routes.d.ts +40 -0
- package/dist/backend/routes.d.ts.map +1 -0
- package/dist/backend/routes.js +447 -0
- package/dist/backend/routes.js.map +1 -0
- package/dist/backend/routes.storefront.d.ts +47 -0
- package/dist/backend/routes.storefront.d.ts.map +1 -0
- package/dist/backend/routes.storefront.js +131 -0
- package/dist/backend/routes.storefront.js.map +1 -0
- package/dist/backend/services/application-rule-evaluator.d.ts +25 -0
- package/dist/backend/services/application-rule-evaluator.d.ts.map +1 -0
- package/dist/backend/services/application-rule-evaluator.js +2 -0
- package/dist/backend/services/application-rule-evaluator.js.map +1 -0
- package/dist/backend/services/audit-references.d.ts +11 -0
- package/dist/backend/services/audit-references.d.ts.map +1 -0
- package/dist/backend/services/audit-references.js +23 -0
- package/dist/backend/services/audit-references.js.map +1 -0
- package/dist/backend/services/default-price-list-migration.d.ts +70 -0
- package/dist/backend/services/default-price-list-migration.d.ts.map +1 -0
- package/dist/backend/services/default-price-list-migration.js +177 -0
- package/dist/backend/services/default-price-list-migration.js.map +1 -0
- package/dist/backend/services/display-mode-resolver.d.ts +78 -0
- package/dist/backend/services/display-mode-resolver.d.ts.map +1 -0
- package/dist/backend/services/display-mode-resolver.js +71 -0
- package/dist/backend/services/display-mode-resolver.js.map +1 -0
- package/dist/backend/services/listing-price-chain.d.ts +26 -0
- package/dist/backend/services/listing-price-chain.d.ts.map +1 -0
- package/dist/backend/services/listing-price-chain.js +55 -0
- package/dist/backend/services/listing-price-chain.js.map +1 -0
- package/dist/backend/services/price-bracket-resolver.d.ts +24 -0
- package/dist/backend/services/price-bracket-resolver.d.ts.map +1 -0
- package/dist/backend/services/price-bracket-resolver.js +16 -0
- package/dist/backend/services/price-bracket-resolver.js.map +1 -0
- package/dist/backend/services/price-list-candidate-vector.d.ts +116 -0
- package/dist/backend/services/price-list-candidate-vector.d.ts.map +1 -0
- package/dist/backend/services/price-list-candidate-vector.js +133 -0
- package/dist/backend/services/price-list-candidate-vector.js.map +1 -0
- package/dist/backend/services/price-list-currency-reference.d.ts +12 -0
- package/dist/backend/services/price-list-currency-reference.d.ts.map +1 -0
- package/dist/backend/services/price-list-currency-reference.js +24 -0
- package/dist/backend/services/price-list-currency-reference.js.map +1 -0
- package/dist/backend/services/price-list-read-port.d.ts +29 -0
- package/dist/backend/services/price-list-read-port.d.ts.map +1 -0
- package/dist/backend/services/price-list-read-port.js +64 -0
- package/dist/backend/services/price-list-read-port.js.map +1 -0
- package/dist/backend/services/price-list-resolver.d.ts +26 -0
- package/dist/backend/services/price-list-resolver.d.ts.map +1 -0
- package/dist/backend/services/price-list-resolver.js +37 -0
- package/dist/backend/services/price-list-resolver.js.map +1 -0
- package/dist/backend/services/price-list-service.d.ts +431 -0
- package/dist/backend/services/price-list-service.d.ts.map +1 -0
- package/dist/backend/services/price-list-service.js +1238 -0
- package/dist/backend/services/price-list-service.js.map +1 -0
- package/dist/backend/services/price-list-status-worker.d.ts +28 -0
- package/dist/backend/services/price-list-status-worker.d.ts.map +1 -0
- package/dist/backend/services/price-list-status-worker.js +38 -0
- package/dist/backend/services/price-list-status-worker.js.map +1 -0
- package/dist/backend/services/pricing-cache.d.ts +53 -0
- package/dist/backend/services/pricing-cache.d.ts.map +1 -0
- package/dist/backend/services/pricing-cache.js +88 -0
- package/dist/backend/services/pricing-cache.js.map +1 -0
- package/dist/backend/services/pricing-service.d.ts +304 -0
- package/dist/backend/services/pricing-service.d.ts.map +1 -0
- package/dist/backend/services/pricing-service.interface.d.ts +151 -0
- package/dist/backend/services/pricing-service.interface.d.ts.map +1 -0
- package/dist/backend/services/pricing-service.interface.js +10 -0
- package/dist/backend/services/pricing-service.interface.js.map +1 -0
- package/dist/backend/services/pricing-service.js +803 -0
- package/dist/backend/services/pricing-service.js.map +1 -0
- package/dist/backend/services/unit-price-ordering.d.ts +121 -0
- package/dist/backend/services/unit-price-ordering.d.ts.map +1 -0
- package/dist/backend/services/unit-price-ordering.js +164 -0
- package/dist/backend/services/unit-price-ordering.js.map +1 -0
- package/dist/manifest.d.ts +218 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +228 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260426T075235_price_lists_pricing_init.d.ts +24 -0
- package/dist/migrations/20260426T075235_price_lists_pricing_init.d.ts.map +1 -0
- package/dist/migrations/20260426T075235_price_lists_pricing_init.js +89 -0
- package/dist/migrations/20260426T075235_price_lists_pricing_init.js.map +1 -0
- package/dist/migrations/20260504T125655_price_lists_engine.d.ts +6 -0
- package/dist/migrations/20260504T125655_price_lists_engine.d.ts.map +1 -0
- package/dist/migrations/20260504T125655_price_lists_engine.js +319 -0
- package/dist/migrations/20260504T125655_price_lists_engine.js.map +1 -0
- package/dist/migrations/20260817T055457_price_lists_single_system_price_list.d.ts +15 -0
- package/dist/migrations/20260817T055457_price_lists_single_system_price_list.d.ts.map +1 -0
- package/dist/migrations/20260817T055457_price_lists_single_system_price_list.js +58 -0
- package/dist/migrations/20260817T055457_price_lists_single_system_price_list.js.map +1 -0
- package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.d.ts +40 -0
- package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.d.ts.map +1 -0
- package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.js +46 -0
- package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.js.map +1 -0
- package/dist/migrations/index.d.ts +30 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +35 -0
- package/dist/migrations/index.js.map +1 -0
- package/docs/price_lists.md +278 -0
- package/i18n/en.json +14 -0
- package/i18n/pl.json +14 -0
- package/package.json +99 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-service.js","sourceRoot":"","sources":["../../../src/backend/services/pricing-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SQL behind {@link ListingPriceOrderPort} (feature 086, research §R4): the
|
|
3
|
+
* resolved unit price as a **merge of index-ordered streams**, one per
|
|
4
|
+
* candidate price list, each stream after the leading one carrying an exclusion
|
|
5
|
+
* and an amount watermark.
|
|
6
|
+
*
|
|
7
|
+
* Everything here is a pure builder, so the three shapes the measurements
|
|
8
|
+
* forced can be asserted by a unit test on the text and demonstrated by an
|
|
9
|
+
* `explain` in the perf bench, instead of being re-derived by the next reader.
|
|
10
|
+
*
|
|
11
|
+
* ## The three shapes, and what each costs when it is written the other way
|
|
12
|
+
*
|
|
13
|
+
* **1. The exclusion is a scalar subquery carrying its own `LIMIT 1` — never
|
|
14
|
+
* `not exists`.** `not exists` is a sublink the planner may pull up into a hash
|
|
15
|
+
* anti-join, which materialises the whole branch before one row can leave it:
|
|
16
|
+
* measured at 208 ms and 150 385 buffers, against **0.69 ms** for the scalar
|
|
17
|
+
* form at the same scale. A scalar subquery with a `LIMIT` cannot be pulled up,
|
|
18
|
+
* so the branch stays a filtered index-only scan in amount order and the merge
|
|
19
|
+
* streams. Same semantics; the difference is structural, not a planner hint.
|
|
20
|
+
*
|
|
21
|
+
* **2. Every stream after the leading one is bounded by the leading stream's
|
|
22
|
+
* amount watermark.** A branch whose every product is priced by a
|
|
23
|
+
* higher-priority branch yields nothing and discovers that by scanning its whole
|
|
24
|
+
* list — 50 000 exclusion probes, 179 ms. That is not an exotic configuration:
|
|
25
|
+
* the ordinary anonymous `[channel list, default list]` vector hits it whenever
|
|
26
|
+
* the channel list prices the assortment, and the "one negotiated list per
|
|
27
|
+
* customer, covering everything" shape hits it hardest. With the bound the same
|
|
28
|
+
* case is **213 probes and 2.88 ms**.
|
|
29
|
+
*
|
|
30
|
+
* The bound is exact rather than approximate, and the argument is one line: the
|
|
31
|
+
* leading stream has no exclusion, so if it returned a full window of `limit`
|
|
32
|
+
* rows all at or below the watermark, then any row above the watermark sorts
|
|
33
|
+
* after all of them and cannot be among the first `limit` rows of the merge.
|
|
34
|
+
* When the leading stream came back short there is no watermark and no bound.
|
|
35
|
+
*
|
|
36
|
+
* **3. Nothing here asks the planner for a plan.** The identical query planned
|
|
37
|
+
* as a streaming merge at 202 000 bracket rows and as bitmap scans plus a sort
|
|
38
|
+
* at 1 687 000, costing 390 ms and 961 ms. The watermark is what makes the
|
|
39
|
+
* streaming plan the planner's own choice again, because `amount <= ?` on the
|
|
40
|
+
* ordering column of a partial covering index is something it can cost. A design
|
|
41
|
+
* that needs `enable_hashjoin = off` to be fast is not a design.
|
|
42
|
+
*/
|
|
43
|
+
/** One candidate price list, as a stream of the merge. */
|
|
44
|
+
export interface UnitPriceStream {
|
|
45
|
+
priceListId: string;
|
|
46
|
+
isSale: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Product ids this stream is restricted to, or `null` for no restriction.
|
|
49
|
+
*
|
|
50
|
+
* Two things narrow it: the caller's opaque `restrictToProductIds`, and the
|
|
51
|
+
* category memberships a candidate's rule requires. Both are already resolved
|
|
52
|
+
* to ids by the time they reach here — this file knows nothing about
|
|
53
|
+
* categories.
|
|
54
|
+
*/
|
|
55
|
+
productIds: readonly string[] | null;
|
|
56
|
+
}
|
|
57
|
+
export interface UnitPriceQueryInput {
|
|
58
|
+
streams: readonly UnitPriceStream[];
|
|
59
|
+
currencyCode: string;
|
|
60
|
+
direction: 'asc' | 'desc';
|
|
61
|
+
/** Keyset resume point over `(amount, productId)`, or `null` to start. */
|
|
62
|
+
after: {
|
|
63
|
+
amount: string;
|
|
64
|
+
productId: string;
|
|
65
|
+
} | null;
|
|
66
|
+
amountRange?: {
|
|
67
|
+
min?: string;
|
|
68
|
+
max?: string;
|
|
69
|
+
} | undefined;
|
|
70
|
+
/** How many rows each individual stream may return. */
|
|
71
|
+
perStreamLimit: number;
|
|
72
|
+
/**
|
|
73
|
+
* The leading stream's watermark. Applied to every stream **except** index 0,
|
|
74
|
+
* which is the stream that produced it. `null` means the leading stream came
|
|
75
|
+
* back short, so there is nothing to bound against.
|
|
76
|
+
*/
|
|
77
|
+
watermark: string | null;
|
|
78
|
+
/**
|
|
79
|
+
* Emit no branch for the first `skipStreams` streams, while still excluding
|
|
80
|
+
* against them.
|
|
81
|
+
*
|
|
82
|
+
* The caller already has the leading stream's rows — the probe that fixed the
|
|
83
|
+
* watermark returned them — so re-reading them would be a second scan of the
|
|
84
|
+
* one stream the design most wants read once.
|
|
85
|
+
*/
|
|
86
|
+
skipStreams?: number | undefined;
|
|
87
|
+
}
|
|
88
|
+
export interface BuiltQuery {
|
|
89
|
+
sql: string;
|
|
90
|
+
params: unknown[];
|
|
91
|
+
}
|
|
92
|
+
/** A Postgres array literal — `= any('{a,b}'::uuid[])` rather than an `in (?,…)`. */
|
|
93
|
+
export declare function uuidArrayLiteral(ids: readonly string[]): string;
|
|
94
|
+
/**
|
|
95
|
+
* The merge over `input.streams`, as one statement.
|
|
96
|
+
*
|
|
97
|
+
* Stream `i` excludes every product priced by streams `0..i-1`, which is FR-031's
|
|
98
|
+
* fall-through: the first candidate in priority order that prices a product is
|
|
99
|
+
* the one that answers for it.
|
|
100
|
+
*/
|
|
101
|
+
export declare function buildUnitPriceMergeQuery(input: UnitPriceQueryInput): BuiltQuery;
|
|
102
|
+
/**
|
|
103
|
+
* Compares two `numeric(14,4)` amounts **as decimals**, without going through a
|
|
104
|
+
* float.
|
|
105
|
+
*
|
|
106
|
+
* The merge is finished in memory — the leading stream's window is already in
|
|
107
|
+
* hand from the watermark probe — so the two halves have to be ordered by the
|
|
108
|
+
* same relation Postgres used. `Number()` is not it: `numeric(14,4)` carries
|
|
109
|
+
* eighteen significant digits and a double carries fifteen, so two amounts a
|
|
110
|
+
* shop can actually charge can compare equal after the conversion.
|
|
111
|
+
*/
|
|
112
|
+
export declare function compareDecimalStrings(a: string, b: string): number;
|
|
113
|
+
/** The merge's total order: amount, then product id, in the requested direction. */
|
|
114
|
+
export declare function compareOrderRows(a: {
|
|
115
|
+
amount: string;
|
|
116
|
+
productId: string;
|
|
117
|
+
}, b: {
|
|
118
|
+
amount: string;
|
|
119
|
+
productId: string;
|
|
120
|
+
}, direction: 'asc' | 'desc'): number;
|
|
121
|
+
//# sourceMappingURL=unit-price-ordering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-price-ordering.d.ts","sourceRoot":"","sources":["../../../src/backend/services/unit-price-ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;OAOG;IACH,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzD,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,UAAU,CAa/E;AAgFD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBlE;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACxC,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACxC,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,MAAM,CAIR"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SQL behind {@link ListingPriceOrderPort} (feature 086, research §R4): the
|
|
3
|
+
* resolved unit price as a **merge of index-ordered streams**, one per
|
|
4
|
+
* candidate price list, each stream after the leading one carrying an exclusion
|
|
5
|
+
* and an amount watermark.
|
|
6
|
+
*
|
|
7
|
+
* Everything here is a pure builder, so the three shapes the measurements
|
|
8
|
+
* forced can be asserted by a unit test on the text and demonstrated by an
|
|
9
|
+
* `explain` in the perf bench, instead of being re-derived by the next reader.
|
|
10
|
+
*
|
|
11
|
+
* ## The three shapes, and what each costs when it is written the other way
|
|
12
|
+
*
|
|
13
|
+
* **1. The exclusion is a scalar subquery carrying its own `LIMIT 1` — never
|
|
14
|
+
* `not exists`.** `not exists` is a sublink the planner may pull up into a hash
|
|
15
|
+
* anti-join, which materialises the whole branch before one row can leave it:
|
|
16
|
+
* measured at 208 ms and 150 385 buffers, against **0.69 ms** for the scalar
|
|
17
|
+
* form at the same scale. A scalar subquery with a `LIMIT` cannot be pulled up,
|
|
18
|
+
* so the branch stays a filtered index-only scan in amount order and the merge
|
|
19
|
+
* streams. Same semantics; the difference is structural, not a planner hint.
|
|
20
|
+
*
|
|
21
|
+
* **2. Every stream after the leading one is bounded by the leading stream's
|
|
22
|
+
* amount watermark.** A branch whose every product is priced by a
|
|
23
|
+
* higher-priority branch yields nothing and discovers that by scanning its whole
|
|
24
|
+
* list — 50 000 exclusion probes, 179 ms. That is not an exotic configuration:
|
|
25
|
+
* the ordinary anonymous `[channel list, default list]` vector hits it whenever
|
|
26
|
+
* the channel list prices the assortment, and the "one negotiated list per
|
|
27
|
+
* customer, covering everything" shape hits it hardest. With the bound the same
|
|
28
|
+
* case is **213 probes and 2.88 ms**.
|
|
29
|
+
*
|
|
30
|
+
* The bound is exact rather than approximate, and the argument is one line: the
|
|
31
|
+
* leading stream has no exclusion, so if it returned a full window of `limit`
|
|
32
|
+
* rows all at or below the watermark, then any row above the watermark sorts
|
|
33
|
+
* after all of them and cannot be among the first `limit` rows of the merge.
|
|
34
|
+
* When the leading stream came back short there is no watermark and no bound.
|
|
35
|
+
*
|
|
36
|
+
* **3. Nothing here asks the planner for a plan.** The identical query planned
|
|
37
|
+
* as a streaming merge at 202 000 bracket rows and as bitmap scans plus a sort
|
|
38
|
+
* at 1 687 000, costing 390 ms and 961 ms. The watermark is what makes the
|
|
39
|
+
* streaming plan the planner's own choice again, because `amount <= ?` on the
|
|
40
|
+
* ordering column of a partial covering index is something it can cost. A design
|
|
41
|
+
* that needs `enable_hashjoin = off` to be fast is not a design.
|
|
42
|
+
*/
|
|
43
|
+
/** A Postgres array literal — `= any('{a,b}'::uuid[])` rather than an `in (?,…)`. */
|
|
44
|
+
export function uuidArrayLiteral(ids) {
|
|
45
|
+
return `{${ids.join(',')}}`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The merge over `input.streams`, as one statement.
|
|
49
|
+
*
|
|
50
|
+
* Stream `i` excludes every product priced by streams `0..i-1`, which is FR-031's
|
|
51
|
+
* fall-through: the first candidate in priority order that prices a product is
|
|
52
|
+
* the one that answers for it.
|
|
53
|
+
*/
|
|
54
|
+
export function buildUnitPriceMergeQuery(input) {
|
|
55
|
+
const params = [];
|
|
56
|
+
const skip = input.skipStreams ?? 0;
|
|
57
|
+
const branches = input.streams
|
|
58
|
+
.map((stream, index) => ({ stream, index }))
|
|
59
|
+
.filter(({ index }) => index >= skip)
|
|
60
|
+
.map(({ stream, index }) => buildStreamSelect(input, stream, index, params));
|
|
61
|
+
const dir = input.direction === 'asc' ? 'asc' : 'desc';
|
|
62
|
+
const sql = `select t."product_id"::text as product_id, t."amount"::text as amount, t."stream_index"\n` +
|
|
63
|
+
` from (\n${branches.join('\n union all\n')}\n ) t\n` +
|
|
64
|
+
` order by t."amount" ${dir}, t."product_id" ${dir}`;
|
|
65
|
+
return { sql, params };
|
|
66
|
+
}
|
|
67
|
+
function buildStreamSelect(input, stream, index, params) {
|
|
68
|
+
const dir = input.direction === 'asc' ? 'asc' : 'desc';
|
|
69
|
+
const clauses = [
|
|
70
|
+
`b."price_list_id" = ?`,
|
|
71
|
+
`b."currency_code" = ?`,
|
|
72
|
+
// The quantity-1 equality, not a `distinct on` and not a window function:
|
|
73
|
+
// `check (min_quantity >= 1)` makes `min_quantity <= 1` mean exactly this,
|
|
74
|
+
// which is what a partial index can be built on.
|
|
75
|
+
`b."min_quantity" = 1`,
|
|
76
|
+
];
|
|
77
|
+
params.push(stream.priceListId, input.currencyCode);
|
|
78
|
+
if (stream.productIds !== null) {
|
|
79
|
+
clauses.push(`b."product_id" = any(?::uuid[])`);
|
|
80
|
+
params.push(uuidArrayLiteral(stream.productIds));
|
|
81
|
+
}
|
|
82
|
+
if (input.after) {
|
|
83
|
+
clauses.push(`(b."amount", b."product_id") ${input.direction === 'asc' ? '>' : '<'} (?::numeric, ?::uuid)`);
|
|
84
|
+
params.push(input.after.amount, input.after.productId);
|
|
85
|
+
}
|
|
86
|
+
if (input.amountRange?.min !== undefined) {
|
|
87
|
+
clauses.push(`b."amount" >= ?::numeric`);
|
|
88
|
+
params.push(input.amountRange.min);
|
|
89
|
+
}
|
|
90
|
+
if (input.amountRange?.max !== undefined) {
|
|
91
|
+
clauses.push(`b."amount" <= ?::numeric`);
|
|
92
|
+
params.push(input.amountRange.max);
|
|
93
|
+
}
|
|
94
|
+
// Shape 2 — the watermark. Never on the stream that produced it.
|
|
95
|
+
if (index > 0 && input.watermark !== null) {
|
|
96
|
+
clauses.push(`b."amount" ${input.direction === 'asc' ? '<=' : '>='} ?::numeric`);
|
|
97
|
+
params.push(input.watermark);
|
|
98
|
+
}
|
|
99
|
+
// Shape 1 — one scalar subquery per higher-priority stream, each with its own
|
|
100
|
+
// `limit 1`. Written as `not exists` this is the 208 ms row of the table in
|
|
101
|
+
// the header.
|
|
102
|
+
for (let j = 0; j < index; j += 1) {
|
|
103
|
+
const earlier = input.streams[j];
|
|
104
|
+
const alias = `x${j}`;
|
|
105
|
+
const earlierClauses = [
|
|
106
|
+
`${alias}."price_list_id" = ?`,
|
|
107
|
+
`${alias}."currency_code" = ?`,
|
|
108
|
+
`${alias}."min_quantity" = 1`,
|
|
109
|
+
`${alias}."product_id" = b."product_id"`,
|
|
110
|
+
];
|
|
111
|
+
params.push(earlier.priceListId, input.currencyCode);
|
|
112
|
+
if (earlier.productIds !== null) {
|
|
113
|
+
earlierClauses.push(`${alias}."product_id" = any(?::uuid[])`);
|
|
114
|
+
params.push(uuidArrayLiteral(earlier.productIds));
|
|
115
|
+
}
|
|
116
|
+
clauses.push(`(select 1 from "price_list_price_brackets" ${alias}\n` +
|
|
117
|
+
` where ${earlierClauses.join('\n and ')}\n` +
|
|
118
|
+
` limit 1) is null`);
|
|
119
|
+
}
|
|
120
|
+
params.push(input.perStreamLimit);
|
|
121
|
+
return (` (select b."product_id", b."amount", ${index} as stream_index\n` +
|
|
122
|
+
` from "price_list_price_brackets" b\n` +
|
|
123
|
+
` where ${clauses.join('\n and ')}\n` +
|
|
124
|
+
` order by b."amount" ${dir}, b."product_id" ${dir}\n` +
|
|
125
|
+
` limit ?)`);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Compares two `numeric(14,4)` amounts **as decimals**, without going through a
|
|
129
|
+
* float.
|
|
130
|
+
*
|
|
131
|
+
* The merge is finished in memory — the leading stream's window is already in
|
|
132
|
+
* hand from the watermark probe — so the two halves have to be ordered by the
|
|
133
|
+
* same relation Postgres used. `Number()` is not it: `numeric(14,4)` carries
|
|
134
|
+
* eighteen significant digits and a double carries fifteen, so two amounts a
|
|
135
|
+
* shop can actually charge can compare equal after the conversion.
|
|
136
|
+
*/
|
|
137
|
+
export function compareDecimalStrings(a, b) {
|
|
138
|
+
const [aInt = '0', aFrac = ''] = a.split('.');
|
|
139
|
+
const [bInt = '0', bFrac = ''] = b.split('.');
|
|
140
|
+
const aNeg = aInt.startsWith('-');
|
|
141
|
+
const bNeg = bInt.startsWith('-');
|
|
142
|
+
if (aNeg !== bNeg)
|
|
143
|
+
return aNeg ? -1 : 1;
|
|
144
|
+
const sign = aNeg ? -1 : 1;
|
|
145
|
+
const ai = aInt.replace('-', '').replace(/^0+(?=\d)/, '');
|
|
146
|
+
const bi = bInt.replace('-', '').replace(/^0+(?=\d)/, '');
|
|
147
|
+
if (ai.length !== bi.length)
|
|
148
|
+
return sign * (ai.length < bi.length ? -1 : 1);
|
|
149
|
+
if (ai !== bi)
|
|
150
|
+
return sign * (ai < bi ? -1 : 1);
|
|
151
|
+
const width = Math.max(aFrac.length, bFrac.length);
|
|
152
|
+
const af = aFrac.padEnd(width, '0');
|
|
153
|
+
const bf = bFrac.padEnd(width, '0');
|
|
154
|
+
if (af === bf)
|
|
155
|
+
return 0;
|
|
156
|
+
return sign * (af < bf ? -1 : 1);
|
|
157
|
+
}
|
|
158
|
+
/** The merge's total order: amount, then product id, in the requested direction. */
|
|
159
|
+
export function compareOrderRows(a, b, direction) {
|
|
160
|
+
const byAmount = compareDecimalStrings(a.amount, b.amount);
|
|
161
|
+
const raw = byAmount !== 0 ? byAmount : a.productId < b.productId ? -1 : a.productId > b.productId ? 1 : 0;
|
|
162
|
+
return direction === 'asc' ? raw : -raw;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=unit-price-ordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-price-ordering.js","sourceRoot":"","sources":["../../../src/backend/services/unit-price-ordering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin permission codes owned by this module (issue #219).
|
|
3
|
+
*
|
|
4
|
+
* Before these existed every admin route here was gated by `catalog:write`, so
|
|
5
|
+
* a role granted catalogue content work could change what customers pay. That
|
|
6
|
+
* boundary was never chosen — it was the side effect of the module declaring no
|
|
7
|
+
* codes of its own. Pricing is not catalogue content.
|
|
8
|
+
*
|
|
9
|
+
* The split is read/write rather than one code because the two authorities are
|
|
10
|
+
* genuinely different: reading a price list, its brackets and the rule-target
|
|
11
|
+
* pickers is what an operator needs to understand a quoted price, while editing
|
|
12
|
+
* a bracket changes what a customer is charged.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PRICE_LIST_PERMISSIONS: {
|
|
15
|
+
readonly READ: "price_lists:read";
|
|
16
|
+
readonly WRITE: "price_lists:write";
|
|
17
|
+
};
|
|
18
|
+
/** Module-lifecycle manifest (feature 018). */
|
|
19
|
+
export declare const manifest: {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
version: string;
|
|
23
|
+
dependencies: string[];
|
|
24
|
+
description?: string | undefined;
|
|
25
|
+
acknowledgedDependencies?: {
|
|
26
|
+
moduleId: string;
|
|
27
|
+
port: string;
|
|
28
|
+
reason: string;
|
|
29
|
+
}[] | undefined;
|
|
30
|
+
nonBindingDependencies?: {
|
|
31
|
+
moduleId: string;
|
|
32
|
+
name: string;
|
|
33
|
+
kind: "contributes-to" | "degrades-without" | "refuses-without";
|
|
34
|
+
reason: string;
|
|
35
|
+
whenAbsent?: string | undefined;
|
|
36
|
+
}[] | undefined;
|
|
37
|
+
activation?: {
|
|
38
|
+
settingCode: string;
|
|
39
|
+
default: boolean;
|
|
40
|
+
} | {
|
|
41
|
+
nonDeactivatable: true;
|
|
42
|
+
reason: string;
|
|
43
|
+
} | undefined;
|
|
44
|
+
settings?: {
|
|
45
|
+
moduleCode: string;
|
|
46
|
+
groups: {
|
|
47
|
+
code: string;
|
|
48
|
+
name: string;
|
|
49
|
+
salesChannelCodes?: string[] | undefined;
|
|
50
|
+
isSystemProtected?: boolean | undefined;
|
|
51
|
+
}[];
|
|
52
|
+
settings: {
|
|
53
|
+
code: string;
|
|
54
|
+
name: string;
|
|
55
|
+
valueType: "string" | "number" | "boolean" | "json" | "string_list" | "secret" | "credential_ref";
|
|
56
|
+
defaultValue: unknown;
|
|
57
|
+
description?: string | undefined;
|
|
58
|
+
groupCode?: string | undefined;
|
|
59
|
+
previousDefaultValues?: unknown[] | undefined;
|
|
60
|
+
salesChannelCodes?: string[] | undefined;
|
|
61
|
+
enumOptions?: string[] | undefined;
|
|
62
|
+
configurationType?: string | undefined;
|
|
63
|
+
hidden?: boolean | undefined;
|
|
64
|
+
}[];
|
|
65
|
+
} | undefined;
|
|
66
|
+
i18n?: {
|
|
67
|
+
bundlesDir: string;
|
|
68
|
+
} | undefined;
|
|
69
|
+
docs?: false | {
|
|
70
|
+
dir: string;
|
|
71
|
+
} | undefined;
|
|
72
|
+
demo?: false | {
|
|
73
|
+
summary: string;
|
|
74
|
+
seed: (context: import("@endora-commerce/contracts").ModuleDemoContext<never>) => Promise<import("@endora-commerce/contracts").DemoSeedResult>;
|
|
75
|
+
reset: (context: import("@endora-commerce/contracts").ModuleDemoContext<never>) => Promise<import("@endora-commerce/contracts").DemoResetResult>;
|
|
76
|
+
after?: readonly string[] | undefined;
|
|
77
|
+
package?: string | undefined;
|
|
78
|
+
} | undefined;
|
|
79
|
+
actions?: {
|
|
80
|
+
id: string;
|
|
81
|
+
labelKey: string;
|
|
82
|
+
icon: "Plus" | "Sparkles" | "Settings" | "Search" | "Boxes" | "Layers" | "Menu" | "PlusCircle" | "PlusSquare" | "FilePlus" | "FolderPlus" | "Upload" | "FileUp" | "CloudUpload" | "Download" | "FileDown" | "FileText" | "BookOpen" | "Rss" | "Package" | "Tag" | "ShoppingCart" | "Receipt" | "CreditCard" | "Users" | "UserPlus" | "Inbox" | "ListChecks" | "ClipboardList" | "Image" | "Video" | "LayoutDashboard" | "PanelLeft" | "KeyRound" | "ShieldCheck" | "Edit" | "Archive" | "Box" | "Truck" | "CircleDollarSign" | "Activity" | "LineChart" | "Smartphone" | "Webhook" | "Scale" | "PlugZap" | "PercentDiamond" | "Newspaper" | "Languages" | "Eraser" | "Warehouse" | "TrendingDown" | "Bell" | "PackageOpen" | "Building2" | "Store" | "ClipboardCheck";
|
|
83
|
+
targetRoute: string;
|
|
84
|
+
keywords: string[];
|
|
85
|
+
weight: number;
|
|
86
|
+
descriptionKey?: string | undefined;
|
|
87
|
+
requiredPermission?: string | undefined;
|
|
88
|
+
}[] | undefined;
|
|
89
|
+
permissions?: {
|
|
90
|
+
code: string;
|
|
91
|
+
label: string;
|
|
92
|
+
module?: string | undefined;
|
|
93
|
+
description?: string | undefined;
|
|
94
|
+
requires?: string[] | undefined;
|
|
95
|
+
}[] | undefined;
|
|
96
|
+
transactionalEmails?: {
|
|
97
|
+
code: string;
|
|
98
|
+
name: string;
|
|
99
|
+
variables: {
|
|
100
|
+
key: string;
|
|
101
|
+
label: string;
|
|
102
|
+
sampleValue?: string | undefined;
|
|
103
|
+
description?: string | undefined;
|
|
104
|
+
}[];
|
|
105
|
+
description?: string | undefined;
|
|
106
|
+
group?: string | undefined;
|
|
107
|
+
}[] | undefined;
|
|
108
|
+
capabilities?: string[] | undefined;
|
|
109
|
+
exclusiveCapabilities?: {
|
|
110
|
+
key: string;
|
|
111
|
+
errorCode: string;
|
|
112
|
+
}[] | undefined;
|
|
113
|
+
errorCodes?: {
|
|
114
|
+
code: string;
|
|
115
|
+
tokens?: string[] | undefined;
|
|
116
|
+
}[] | undefined;
|
|
117
|
+
blocks?: {
|
|
118
|
+
name: string;
|
|
119
|
+
labelKey: string;
|
|
120
|
+
category: string;
|
|
121
|
+
contexts: ("invoice" | "email" | "cms" | "newsletter")[];
|
|
122
|
+
fields: Record<string, {
|
|
123
|
+
type: "number" | "object" | "array" | "text" | "textarea" | "select" | "radio" | "external" | "uuid" | "richtext";
|
|
124
|
+
label?: string | undefined;
|
|
125
|
+
required?: boolean | undefined;
|
|
126
|
+
options?: {
|
|
127
|
+
label: string;
|
|
128
|
+
value: string | number;
|
|
129
|
+
}[] | undefined;
|
|
130
|
+
refKind?: string | undefined;
|
|
131
|
+
}>;
|
|
132
|
+
descriptionKey?: string | undefined;
|
|
133
|
+
defaultProps?: Record<string, unknown> | undefined;
|
|
134
|
+
responsiveFields?: string[] | undefined;
|
|
135
|
+
previewIcon?: string | undefined;
|
|
136
|
+
weight?: number | undefined;
|
|
137
|
+
}[] | undefined;
|
|
138
|
+
blockCategories?: {
|
|
139
|
+
key: string;
|
|
140
|
+
titleKey: string;
|
|
141
|
+
contexts: ("invoice" | "email" | "cms" | "newsletter")[];
|
|
142
|
+
weight?: number | undefined;
|
|
143
|
+
visible?: boolean | undefined;
|
|
144
|
+
}[] | undefined;
|
|
145
|
+
env?: {
|
|
146
|
+
name: string;
|
|
147
|
+
describes: {
|
|
148
|
+
en: string;
|
|
149
|
+
pl: string;
|
|
150
|
+
};
|
|
151
|
+
requirement: {
|
|
152
|
+
kind: "required";
|
|
153
|
+
} | {
|
|
154
|
+
kind: "requiredWhen";
|
|
155
|
+
input: string;
|
|
156
|
+
equals: string;
|
|
157
|
+
} | {
|
|
158
|
+
kind: "optional";
|
|
159
|
+
without: {
|
|
160
|
+
en: string;
|
|
161
|
+
pl: string;
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
secret: boolean;
|
|
165
|
+
generable: boolean;
|
|
166
|
+
owner: {
|
|
167
|
+
kind: "platform";
|
|
168
|
+
} | {
|
|
169
|
+
kind: "application";
|
|
170
|
+
application: "admin" | "backend" | "storefront";
|
|
171
|
+
} | {
|
|
172
|
+
kind: "module";
|
|
173
|
+
moduleId: string;
|
|
174
|
+
};
|
|
175
|
+
consumers: ("admin" | "backend" | "storefront")[];
|
|
176
|
+
addressOf: "admin" | "backend" | "storefront" | null;
|
|
177
|
+
}[] | undefined;
|
|
178
|
+
};
|
|
179
|
+
/** Legacy export retained for backward compatibility. */
|
|
180
|
+
export declare const priceListsManifest: {
|
|
181
|
+
moduleCode: string;
|
|
182
|
+
groups: {
|
|
183
|
+
code: string;
|
|
184
|
+
name: string;
|
|
185
|
+
salesChannelCodes?: string[] | undefined;
|
|
186
|
+
isSystemProtected?: boolean | undefined;
|
|
187
|
+
}[];
|
|
188
|
+
settings: {
|
|
189
|
+
code: string;
|
|
190
|
+
name: string;
|
|
191
|
+
valueType: "string" | "number" | "boolean" | "json" | "string_list" | "secret" | "credential_ref";
|
|
192
|
+
defaultValue: unknown;
|
|
193
|
+
description?: string | undefined;
|
|
194
|
+
groupCode?: string | undefined;
|
|
195
|
+
previousDefaultValues?: unknown[] | undefined;
|
|
196
|
+
salesChannelCodes?: string[] | undefined;
|
|
197
|
+
enumOptions?: string[] | undefined;
|
|
198
|
+
configurationType?: string | undefined;
|
|
199
|
+
hidden?: boolean | undefined;
|
|
200
|
+
}[];
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* What this module offers the admin home dashboard's Recent Activity card —
|
|
204
|
+
* feature 080, T042j / D-163.1.
|
|
205
|
+
*
|
|
206
|
+
* The **declaration** axis: eligibility, never a decision. Whether these rows
|
|
207
|
+
* appear is the operator's, held in `price_lists.recent_activity_visible` and
|
|
208
|
+
* defaulting to visible, flipped beside this module's activation control on the
|
|
209
|
+
* platform modules screen.
|
|
210
|
+
*/
|
|
211
|
+
export declare const recentActivity: {
|
|
212
|
+
entries: {
|
|
213
|
+
action: string;
|
|
214
|
+
icon: "Plus" | "Sparkles" | "Settings" | "Search" | "Boxes" | "Layers" | "Menu" | "PlusCircle" | "PlusSquare" | "FilePlus" | "FolderPlus" | "Upload" | "FileUp" | "CloudUpload" | "Download" | "FileDown" | "FileText" | "BookOpen" | "Rss" | "Package" | "Tag" | "ShoppingCart" | "Receipt" | "CreditCard" | "Users" | "UserPlus" | "Inbox" | "ListChecks" | "ClipboardList" | "Image" | "Video" | "LayoutDashboard" | "PanelLeft" | "KeyRound" | "ShieldCheck" | "Edit" | "Archive" | "Box" | "Truck" | "CircleDollarSign" | "Activity" | "LineChart" | "Smartphone" | "Webhook" | "Scale" | "PlugZap" | "PercentDiamond" | "Newspaper" | "Languages" | "Eraser" | "Warehouse" | "TrendingDown" | "Bell" | "PackageOpen" | "Building2" | "Store" | "ClipboardCheck";
|
|
215
|
+
labelKey: string;
|
|
216
|
+
}[];
|
|
217
|
+
};
|
|
218
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAmCX,+CAA+C;AAC/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwInB,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;CAAW,CAAC;AAE3C;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;CA+BzB,CAAC"}
|