@voyant-travel/commerce 0.1.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 +201 -0
- package/README.md +145 -0
- package/dist/accepted-quote-version-reservation-golden-flow.test.d.ts +2 -0
- package/dist/accepted-quote-version-reservation-golden-flow.test.d.ts.map +1 -0
- package/dist/accepted-quote-version-reservation-golden-flow.test.js +398 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/interface.d.ts +18 -0
- package/dist/interface.d.ts.map +1 -0
- package/dist/interface.js +246 -0
- package/dist/interface.test.d.ts +2 -0
- package/dist/interface.test.d.ts.map +1 -0
- package/dist/interface.test.js +357 -0
- package/dist/markets/index.d.ts +11 -0
- package/dist/markets/index.d.ts.map +1 -0
- package/dist/markets/index.js +12 -0
- package/dist/markets/routes.d.ts +1182 -0
- package/dist/markets/routes.d.ts.map +1 -0
- package/dist/markets/routes.js +209 -0
- package/dist/markets/schema.d.ts +1527 -0
- package/dist/markets/schema.d.ts.map +1 -0
- package/dist/markets/schema.js +240 -0
- package/dist/markets/service-core.d.ts +253 -0
- package/dist/markets/service-core.d.ts.map +1 -0
- package/dist/markets/service-core.js +242 -0
- package/dist/markets/service-rules.d.ts +191 -0
- package/dist/markets/service-rules.d.ts.map +1 -0
- package/dist/markets/service-rules.js +155 -0
- package/dist/markets/service-shared.d.ts +36 -0
- package/dist/markets/service-shared.d.ts.map +1 -0
- package/dist/markets/service-shared.js +7 -0
- package/dist/markets/service.d.ts +43 -0
- package/dist/markets/service.d.ts.map +1 -0
- package/dist/markets/service.js +42 -0
- package/dist/markets/validation.d.ts +451 -0
- package/dist/markets/validation.d.ts.map +1 -0
- package/dist/markets/validation.js +160 -0
- package/dist/pricing/events.d.ts +53 -0
- package/dist/pricing/events.d.ts.map +1 -0
- package/dist/pricing/events.js +28 -0
- package/dist/pricing/index.d.ts +15 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/index.js +18 -0
- package/dist/pricing/routes-core.d.ts +981 -0
- package/dist/pricing/routes-core.d.ts.map +1 -0
- package/dist/pricing/routes-core.js +102 -0
- package/dist/pricing/routes-public.d.ts +136 -0
- package/dist/pricing/routes-public.d.ts.map +1 -0
- package/dist/pricing/routes-public.js +14 -0
- package/dist/pricing/routes-rules.d.ts +1339 -0
- package/dist/pricing/routes-rules.d.ts.map +1 -0
- package/dist/pricing/routes-rules.js +138 -0
- package/dist/pricing/routes-shared.d.ts +14 -0
- package/dist/pricing/routes-shared.d.ts.map +1 -0
- package/dist/pricing/routes-shared.js +3 -0
- package/dist/pricing/routes.d.ts +7 -0
- package/dist/pricing/routes.d.ts.map +1 -0
- package/dist/pricing/routes.js +6 -0
- package/dist/pricing/schema-catalogs.d.ts +467 -0
- package/dist/pricing/schema-catalogs.d.ts.map +1 -0
- package/dist/pricing/schema-catalogs.js +47 -0
- package/dist/pricing/schema-categories.d.ts +497 -0
- package/dist/pricing/schema-categories.d.ts.map +1 -0
- package/dist/pricing/schema-categories.js +54 -0
- package/dist/pricing/schema-departure-overrides.d.ts +228 -0
- package/dist/pricing/schema-departure-overrides.d.ts.map +1 -0
- package/dist/pricing/schema-departure-overrides.js +36 -0
- package/dist/pricing/schema-option-rules.d.ts +1770 -0
- package/dist/pricing/schema-option-rules.d.ts.map +1 -0
- package/dist/pricing/schema-option-rules.js +181 -0
- package/dist/pricing/schema-policies.d.ts +395 -0
- package/dist/pricing/schema-policies.d.ts.map +1 -0
- package/dist/pricing/schema-policies.js +41 -0
- package/dist/pricing/schema-relations.d.ts +59 -0
- package/dist/pricing/schema-relations.d.ts.map +1 -0
- package/dist/pricing/schema-relations.js +111 -0
- package/dist/pricing/schema-shared.d.ts +11 -0
- package/dist/pricing/schema-shared.d.ts.map +1 -0
- package/dist/pricing/schema-shared.js +67 -0
- package/dist/pricing/schema.d.ts +8 -0
- package/dist/pricing/schema.d.ts.map +1 -0
- package/dist/pricing/schema.js +7 -0
- package/dist/pricing/service-catalog-plane-pricing.d.ts +95 -0
- package/dist/pricing/service-catalog-plane-pricing.d.ts.map +1 -0
- package/dist/pricing/service-catalog-plane-pricing.js +382 -0
- package/dist/pricing/service-catalogs.d.ts +139 -0
- package/dist/pricing/service-catalogs.d.ts.map +1 -0
- package/dist/pricing/service-catalogs.js +89 -0
- package/dist/pricing/service-categories.d.ts +147 -0
- package/dist/pricing/service-categories.d.ts.map +1 -0
- package/dist/pricing/service-categories.js +105 -0
- package/dist/pricing/service-departure-overrides.d.ts +67 -0
- package/dist/pricing/service-departure-overrides.d.ts.map +1 -0
- package/dist/pricing/service-departure-overrides.js +54 -0
- package/dist/pricing/service-option-rules.d.ts +321 -0
- package/dist/pricing/service-option-rules.d.ts.map +1 -0
- package/dist/pricing/service-option-rules.js +340 -0
- package/dist/pricing/service-policies.d.ts +123 -0
- package/dist/pricing/service-policies.d.ts.map +1 -0
- package/dist/pricing/service-policies.js +95 -0
- package/dist/pricing/service-public.d.ts +89 -0
- package/dist/pricing/service-public.d.ts.map +1 -0
- package/dist/pricing/service-public.js +473 -0
- package/dist/pricing/service-rule-resolver.d.ts +67 -0
- package/dist/pricing/service-rule-resolver.d.ts.map +1 -0
- package/dist/pricing/service-rule-resolver.js +204 -0
- package/dist/pricing/service-shared.d.ts +53 -0
- package/dist/pricing/service-shared.d.ts.map +1 -0
- package/dist/pricing/service-shared.js +4 -0
- package/dist/pricing/service-transfer-rules.d.ts +211 -0
- package/dist/pricing/service-transfer-rules.d.ts.map +1 -0
- package/dist/pricing/service-transfer-rules.js +139 -0
- package/dist/pricing/service.d.ts +79 -0
- package/dist/pricing/service.d.ts.map +1 -0
- package/dist/pricing/service.js +78 -0
- package/dist/pricing/validation-public.d.ts +412 -0
- package/dist/pricing/validation-public.d.ts.map +1 -0
- package/dist/pricing/validation-public.js +111 -0
- package/dist/pricing/validation-shared.d.ts +71 -0
- package/dist/pricing/validation-shared.d.ts.map +1 -0
- package/dist/pricing/validation-shared.js +63 -0
- package/dist/pricing/validation.d.ts +987 -0
- package/dist/pricing/validation.d.ts.map +1 -0
- package/dist/pricing/validation.js +307 -0
- package/dist/promotions/events.d.ts +38 -0
- package/dist/promotions/events.d.ts.map +1 -0
- package/dist/promotions/events.js +25 -0
- package/dist/promotions/index.d.ts +12 -0
- package/dist/promotions/index.d.ts.map +1 -0
- package/dist/promotions/index.js +17 -0
- package/dist/promotions/routes-shared.d.ts +14 -0
- package/dist/promotions/routes-shared.d.ts.map +1 -0
- package/dist/promotions/routes-shared.js +3 -0
- package/dist/promotions/routes.d.ts +395 -0
- package/dist/promotions/routes.d.ts.map +1 -0
- package/dist/promotions/routes.js +55 -0
- package/dist/promotions/schema.d.ts +675 -0
- package/dist/promotions/schema.d.ts.map +1 -0
- package/dist/promotions/schema.js +126 -0
- package/dist/promotions/service-booking-confirmed.d.ts +77 -0
- package/dist/promotions/service-booking-confirmed.d.ts.map +1 -0
- package/dist/promotions/service-booking-confirmed.js +134 -0
- package/dist/promotions/service-boundary-scheduler.d.ts +85 -0
- package/dist/promotions/service-boundary-scheduler.d.ts.map +1 -0
- package/dist/promotions/service-boundary-scheduler.js +141 -0
- package/dist/promotions/service-catalog-evaluator.d.ts +22 -0
- package/dist/promotions/service-catalog-evaluator.d.ts.map +1 -0
- package/dist/promotions/service-catalog-evaluator.js +33 -0
- package/dist/promotions/service-catalog-plane-promotions.d.ts +73 -0
- package/dist/promotions/service-catalog-plane-promotions.d.ts.map +1 -0
- package/dist/promotions/service-catalog-plane-promotions.js +118 -0
- package/dist/promotions/service-evaluator.d.ts +134 -0
- package/dist/promotions/service-evaluator.d.ts.map +1 -0
- package/dist/promotions/service-evaluator.js +302 -0
- package/dist/promotions/service-storefront.d.ts +147 -0
- package/dist/promotions/service-storefront.d.ts.map +1 -0
- package/dist/promotions/service-storefront.js +326 -0
- package/dist/promotions/service.d.ts +143 -0
- package/dist/promotions/service.d.ts.map +1 -0
- package/dist/promotions/service.js +359 -0
- package/dist/promotions/validation.d.ts +195 -0
- package/dist/promotions/validation.d.ts.map +1 -0
- package/dist/promotions/validation.js +167 -0
- package/dist/promotions/workflow-bulk-reindex.d.ts +36 -0
- package/dist/promotions/workflow-bulk-reindex.d.ts.map +1 -0
- package/dist/promotions/workflow-bulk-reindex.js +53 -0
- package/dist/promotions/workflow-runtime.d.ts +17 -0
- package/dist/promotions/workflow-runtime.d.ts.map +1 -0
- package/dist/promotions/workflow-runtime.js +9 -0
- package/dist/runtime.d.ts +18 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +27 -0
- package/dist/runtime.test.d.ts +2 -0
- package/dist/runtime.test.d.ts.map +1 -0
- package/dist/runtime.test.js +25 -0
- package/dist/schema.d.ts +5 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +4 -0
- package/dist/sellability/index.d.ts +13 -0
- package/dist/sellability/index.d.ts.map +1 -0
- package/dist/sellability/index.js +17 -0
- package/dist/sellability/routes.d.ts +2332 -0
- package/dist/sellability/routes.d.ts.map +1 -0
- package/dist/sellability/routes.js +166 -0
- package/dist/sellability/schema.d.ts +1716 -0
- package/dist/sellability/schema.d.ts.map +1 -0
- package/dist/sellability/schema.js +278 -0
- package/dist/sellability/service-records.d.ts +316 -0
- package/dist/sellability/service-records.d.ts.map +1 -0
- package/dist/sellability/service-records.js +253 -0
- package/dist/sellability/service-resolve.d.ts +72 -0
- package/dist/sellability/service-resolve.d.ts.map +1 -0
- package/dist/sellability/service-resolve.js +580 -0
- package/dist/sellability/service-shared.d.ts +124 -0
- package/dist/sellability/service-shared.d.ts.map +1 -0
- package/dist/sellability/service-shared.js +96 -0
- package/dist/sellability/service-snapshots.d.ts +191 -0
- package/dist/sellability/service-snapshots.d.ts.map +1 -0
- package/dist/sellability/service-snapshots.js +153 -0
- package/dist/sellability/service.d.ts +1038 -0
- package/dist/sellability/service.d.ts.map +1 -0
- package/dist/sellability/service.js +17 -0
- package/dist/sellability/validation.d.ts +477 -0
- package/dist/sellability/validation.d.ts.map +1 -0
- package/dist/sellability/validation.js +192 -0
- package/dist/types.d.ts +239 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { booleanQueryParam } from "@voyant-travel/db/helpers";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const paginationSchema = z.object({
|
|
4
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
5
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
6
|
+
});
|
|
7
|
+
const languageTagSchema = z
|
|
8
|
+
.string()
|
|
9
|
+
.min(2)
|
|
10
|
+
.max(35)
|
|
11
|
+
.regex(/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/);
|
|
12
|
+
const currencyCodeSchema = z
|
|
13
|
+
.string()
|
|
14
|
+
.length(3)
|
|
15
|
+
.regex(/^[A-Z]{3}$/);
|
|
16
|
+
const numericStringSchema = z.string().regex(/^\d+(\.\d+)?$/);
|
|
17
|
+
export const marketStatusSchema = z.enum(["active", "inactive", "archived"]);
|
|
18
|
+
export const marketVisibilitySchema = z.enum(["public", "private", "hidden"]);
|
|
19
|
+
export const marketSellabilitySchema = z.enum(["sellable", "on_request", "unavailable"]);
|
|
20
|
+
export const marketChannelScopeSchema = z.enum(["all", "b2c", "b2b", "internal"]);
|
|
21
|
+
export const fxRateSourceSchema = z.enum([
|
|
22
|
+
"manual",
|
|
23
|
+
"ecb",
|
|
24
|
+
"custom",
|
|
25
|
+
"channel",
|
|
26
|
+
"supplier",
|
|
27
|
+
"other",
|
|
28
|
+
]);
|
|
29
|
+
export const marketCoreSchema = z.object({
|
|
30
|
+
code: z.string().min(1).max(50),
|
|
31
|
+
name: z.string().min(1).max(255),
|
|
32
|
+
status: marketStatusSchema.default("active"),
|
|
33
|
+
regionCode: z.string().max(20).nullable().optional(),
|
|
34
|
+
countryCode: z.string().max(2).nullable().optional(),
|
|
35
|
+
defaultLanguageTag: languageTagSchema,
|
|
36
|
+
defaultCurrency: currencyCodeSchema,
|
|
37
|
+
timezone: z.string().max(100).nullable().optional(),
|
|
38
|
+
taxContext: z.string().max(255).nullable().optional(),
|
|
39
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
40
|
+
});
|
|
41
|
+
export const insertMarketSchema = marketCoreSchema;
|
|
42
|
+
export const updateMarketSchema = marketCoreSchema.partial();
|
|
43
|
+
export const marketListQuerySchema = paginationSchema.extend({
|
|
44
|
+
status: marketStatusSchema.optional(),
|
|
45
|
+
countryCode: z.string().optional(),
|
|
46
|
+
search: z.string().optional(),
|
|
47
|
+
});
|
|
48
|
+
export const marketLocaleCoreSchema = z.object({
|
|
49
|
+
languageTag: languageTagSchema,
|
|
50
|
+
isDefault: z.boolean().default(false),
|
|
51
|
+
sortOrder: z.number().int().min(0).default(0),
|
|
52
|
+
active: z.boolean().default(true),
|
|
53
|
+
});
|
|
54
|
+
export const insertMarketLocaleSchema = marketLocaleCoreSchema;
|
|
55
|
+
export const updateMarketLocaleSchema = marketLocaleCoreSchema.partial();
|
|
56
|
+
export const marketLocaleListQuerySchema = paginationSchema.extend({
|
|
57
|
+
marketId: z.string().optional(),
|
|
58
|
+
languageTag: languageTagSchema.optional(),
|
|
59
|
+
active: booleanQueryParam.optional(),
|
|
60
|
+
});
|
|
61
|
+
export const marketCurrencyCoreSchema = z.object({
|
|
62
|
+
currencyCode: currencyCodeSchema,
|
|
63
|
+
isDefault: z.boolean().default(false),
|
|
64
|
+
isSettlement: z.boolean().default(false),
|
|
65
|
+
isReporting: z.boolean().default(false),
|
|
66
|
+
sortOrder: z.number().int().min(0).default(0),
|
|
67
|
+
active: z.boolean().default(true),
|
|
68
|
+
});
|
|
69
|
+
export const insertMarketCurrencySchema = marketCurrencyCoreSchema;
|
|
70
|
+
export const updateMarketCurrencySchema = marketCurrencyCoreSchema.partial();
|
|
71
|
+
export const marketCurrencyListQuerySchema = paginationSchema.extend({
|
|
72
|
+
marketId: z.string().optional(),
|
|
73
|
+
currencyCode: currencyCodeSchema.optional(),
|
|
74
|
+
active: booleanQueryParam.optional(),
|
|
75
|
+
});
|
|
76
|
+
export const fxRateSetCoreSchema = z.object({
|
|
77
|
+
source: fxRateSourceSchema.default("manual"),
|
|
78
|
+
baseCurrency: currencyCodeSchema,
|
|
79
|
+
effectiveAt: z.string().datetime(),
|
|
80
|
+
observedAt: z.string().datetime().nullable().optional(),
|
|
81
|
+
sourceReference: z.string().max(255).nullable().optional(),
|
|
82
|
+
notes: z.string().nullable().optional(),
|
|
83
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
84
|
+
});
|
|
85
|
+
export const insertFxRateSetSchema = fxRateSetCoreSchema;
|
|
86
|
+
export const updateFxRateSetSchema = fxRateSetCoreSchema.partial();
|
|
87
|
+
export const fxRateSetListQuerySchema = paginationSchema.extend({
|
|
88
|
+
source: fxRateSourceSchema.optional(),
|
|
89
|
+
baseCurrency: currencyCodeSchema.optional(),
|
|
90
|
+
});
|
|
91
|
+
export const exchangeRateCoreSchema = z.object({
|
|
92
|
+
baseCurrency: currencyCodeSchema,
|
|
93
|
+
quoteCurrency: currencyCodeSchema,
|
|
94
|
+
rateDecimal: numericStringSchema,
|
|
95
|
+
inverseRateDecimal: numericStringSchema.nullable().optional(),
|
|
96
|
+
observedAt: z.string().datetime().nullable().optional(),
|
|
97
|
+
});
|
|
98
|
+
export const insertExchangeRateSchema = exchangeRateCoreSchema;
|
|
99
|
+
export const updateExchangeRateSchema = exchangeRateCoreSchema.partial();
|
|
100
|
+
export const exchangeRateListQuerySchema = paginationSchema.extend({
|
|
101
|
+
fxRateSetId: z.string().optional(),
|
|
102
|
+
baseCurrency: currencyCodeSchema.optional(),
|
|
103
|
+
quoteCurrency: currencyCodeSchema.optional(),
|
|
104
|
+
});
|
|
105
|
+
export const marketPriceCatalogCoreSchema = z.object({
|
|
106
|
+
marketId: z.string(),
|
|
107
|
+
priceCatalogId: z.string(),
|
|
108
|
+
isDefault: z.boolean().default(false),
|
|
109
|
+
priority: z.number().int().default(0),
|
|
110
|
+
active: z.boolean().default(true),
|
|
111
|
+
notes: z.string().nullable().optional(),
|
|
112
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
113
|
+
});
|
|
114
|
+
export const insertMarketPriceCatalogSchema = marketPriceCatalogCoreSchema;
|
|
115
|
+
export const updateMarketPriceCatalogSchema = marketPriceCatalogCoreSchema.partial();
|
|
116
|
+
export const marketPriceCatalogListQuerySchema = paginationSchema.extend({
|
|
117
|
+
marketId: z.string().optional(),
|
|
118
|
+
priceCatalogId: z.string().optional(),
|
|
119
|
+
active: booleanQueryParam.optional(),
|
|
120
|
+
});
|
|
121
|
+
export const marketProductRuleCoreSchema = z.object({
|
|
122
|
+
marketId: z.string(),
|
|
123
|
+
productId: z.string(),
|
|
124
|
+
optionId: z.string().nullable().optional(),
|
|
125
|
+
priceCatalogId: z.string().nullable().optional(),
|
|
126
|
+
visibility: marketVisibilitySchema.default("public"),
|
|
127
|
+
sellability: marketSellabilitySchema.default("sellable"),
|
|
128
|
+
channelScope: marketChannelScopeSchema.default("all"),
|
|
129
|
+
active: z.boolean().default(true),
|
|
130
|
+
availableFrom: z.string().date().nullable().optional(),
|
|
131
|
+
availableTo: z.string().date().nullable().optional(),
|
|
132
|
+
notes: z.string().nullable().optional(),
|
|
133
|
+
});
|
|
134
|
+
export const insertMarketProductRuleSchema = marketProductRuleCoreSchema;
|
|
135
|
+
export const updateMarketProductRuleSchema = marketProductRuleCoreSchema.partial();
|
|
136
|
+
export const marketProductRuleListQuerySchema = paginationSchema.extend({
|
|
137
|
+
marketId: z.string().optional(),
|
|
138
|
+
productId: z.string().optional(),
|
|
139
|
+
optionId: z.string().optional(),
|
|
140
|
+
sellability: marketSellabilitySchema.optional(),
|
|
141
|
+
active: booleanQueryParam.optional(),
|
|
142
|
+
});
|
|
143
|
+
export const marketChannelRuleCoreSchema = z.object({
|
|
144
|
+
marketId: z.string(),
|
|
145
|
+
channelId: z.string(),
|
|
146
|
+
priceCatalogId: z.string().nullable().optional(),
|
|
147
|
+
visibility: marketVisibilitySchema.default("public"),
|
|
148
|
+
sellability: marketSellabilitySchema.default("sellable"),
|
|
149
|
+
active: z.boolean().default(true),
|
|
150
|
+
priority: z.number().int().default(0),
|
|
151
|
+
notes: z.string().nullable().optional(),
|
|
152
|
+
});
|
|
153
|
+
export const insertMarketChannelRuleSchema = marketChannelRuleCoreSchema;
|
|
154
|
+
export const updateMarketChannelRuleSchema = marketChannelRuleCoreSchema.partial();
|
|
155
|
+
export const marketChannelRuleListQuerySchema = paginationSchema.extend({
|
|
156
|
+
marketId: z.string().optional(),
|
|
157
|
+
channelId: z.string().optional(),
|
|
158
|
+
sellability: marketSellabilitySchema.optional(),
|
|
159
|
+
active: booleanQueryParam.optional(),
|
|
160
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pricing domain events.
|
|
3
|
+
*
|
|
4
|
+
* Emitted (after commit) by paths that mutate pricing rules feeding the
|
|
5
|
+
* catalog-plane `priceFromAmountCents` projection (PR4 of #493). The
|
|
6
|
+
* catalog bridge subscribes to these and reindexes the affected
|
|
7
|
+
* product so the denormalized "from $X" stays in sync without a full
|
|
8
|
+
* reindex run.
|
|
9
|
+
*
|
|
10
|
+
* Subscriber contract: treat the payload as a *trigger*, not the source
|
|
11
|
+
* of truth. Re-read the row(s) before acting on them — concurrent edits
|
|
12
|
+
* may have superseded the snapshot in this payload.
|
|
13
|
+
*
|
|
14
|
+
* Per docs/architecture/channel-push-architecture.md §5.1 (same shape as
|
|
15
|
+
* `availability.slot.changed`).
|
|
16
|
+
*
|
|
17
|
+
* Today's surface covers `option_price_rules` + `option_unit_price_rules`
|
|
18
|
+
* — the two tables that feed PR4's MIN aggregation. Other pricing
|
|
19
|
+
* tables (`option_start_time_rules`, `option_unit_tiers`,
|
|
20
|
+
* `departure_price_overrides`, `pickup_price_rules`, `cancellation_*`)
|
|
21
|
+
* intentionally do NOT emit yet: extending the catalog projection to
|
|
22
|
+
* read them is its own design conversation and emitting an event no
|
|
23
|
+
* subscriber consumes is dead surface area. When a future projection
|
|
24
|
+
* grows to read one of those tables, extend `kind` and add emission to
|
|
25
|
+
* the corresponding service function.
|
|
26
|
+
*/
|
|
27
|
+
/** Stable string identifier for the event. */
|
|
28
|
+
export declare const PRICING_RULE_CHANGED_EVENT: "pricing.rule.changed";
|
|
29
|
+
/** Origin of the change. Diagnostic only — subscribers don't behave
|
|
30
|
+
* differently on this field, but it's preserved end-to-end so logs
|
|
31
|
+
* and dashboards can attribute drift to a cause. */
|
|
32
|
+
export type PricingRuleChangeSource = "created" | "updated" | "deleted";
|
|
33
|
+
/**
|
|
34
|
+
* Which pricing-rule table the mutation touched. Lets a subscriber
|
|
35
|
+
* filter without re-reading the row (e.g. a future projection that
|
|
36
|
+
* only cares about `option-rule` mutations can skip per-unit deltas).
|
|
37
|
+
*/
|
|
38
|
+
export type PricingRuleKind = "option-rule" | "option-unit-rule";
|
|
39
|
+
export interface PricingRuleChangedEvent {
|
|
40
|
+
/**
|
|
41
|
+
* The product whose pricing surface changed. Subscribers reindex
|
|
42
|
+
* this product. Always set — every relevant rule belongs to a
|
|
43
|
+
* product (option-unit rules join through their parent option-rule
|
|
44
|
+
* to find the product).
|
|
45
|
+
*/
|
|
46
|
+
productId: string;
|
|
47
|
+
/** The mutated row's id, for diagnostics. */
|
|
48
|
+
ruleId: string;
|
|
49
|
+
/** Which table was touched. */
|
|
50
|
+
kind: PricingRuleKind;
|
|
51
|
+
source: PricingRuleChangeSource;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/pricing/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,0BAA0B,EAAG,sBAA+B,CAAA;AAEzE;;qDAEqD;AACrD,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;AAEvE;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,kBAAkB,CAAA;AAEhE,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,IAAI,EAAE,eAAe,CAAA;IACrB,MAAM,EAAE,uBAAuB,CAAA;CAChC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pricing domain events.
|
|
3
|
+
*
|
|
4
|
+
* Emitted (after commit) by paths that mutate pricing rules feeding the
|
|
5
|
+
* catalog-plane `priceFromAmountCents` projection (PR4 of #493). The
|
|
6
|
+
* catalog bridge subscribes to these and reindexes the affected
|
|
7
|
+
* product so the denormalized "from $X" stays in sync without a full
|
|
8
|
+
* reindex run.
|
|
9
|
+
*
|
|
10
|
+
* Subscriber contract: treat the payload as a *trigger*, not the source
|
|
11
|
+
* of truth. Re-read the row(s) before acting on them — concurrent edits
|
|
12
|
+
* may have superseded the snapshot in this payload.
|
|
13
|
+
*
|
|
14
|
+
* Per docs/architecture/channel-push-architecture.md §5.1 (same shape as
|
|
15
|
+
* `availability.slot.changed`).
|
|
16
|
+
*
|
|
17
|
+
* Today's surface covers `option_price_rules` + `option_unit_price_rules`
|
|
18
|
+
* — the two tables that feed PR4's MIN aggregation. Other pricing
|
|
19
|
+
* tables (`option_start_time_rules`, `option_unit_tiers`,
|
|
20
|
+
* `departure_price_overrides`, `pickup_price_rules`, `cancellation_*`)
|
|
21
|
+
* intentionally do NOT emit yet: extending the catalog projection to
|
|
22
|
+
* read them is its own design conversation and emitting an event no
|
|
23
|
+
* subscriber consumes is dead surface area. When a future projection
|
|
24
|
+
* grows to read one of those tables, extend `kind` and add emission to
|
|
25
|
+
* the corresponding service function.
|
|
26
|
+
*/
|
|
27
|
+
/** Stable string identifier for the event. */
|
|
28
|
+
export const PRICING_RULE_CHANGED_EVENT = "pricing.rule.changed";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Module } from "@voyant-travel/core";
|
|
2
|
+
import type { HonoModule } from "@voyant-travel/hono/module";
|
|
3
|
+
import { pricingService } from "./service.js";
|
|
4
|
+
export type { PricingRoutes } from "./routes.js";
|
|
5
|
+
export type { PublicPricingRoutes } from "./routes-public.js";
|
|
6
|
+
export { publicPricingRoutes } from "./routes-public.js";
|
|
7
|
+
export { publicPricingService } from "./service-public.js";
|
|
8
|
+
export declare const pricingModule: Module;
|
|
9
|
+
export declare const pricingHonoModule: HonoModule;
|
|
10
|
+
export type { CancellationPolicy, CancellationPolicyRule, DeparturePriceOverride, DropoffPriceRule, ExtraPriceRule, NewCancellationPolicy, NewCancellationPolicyRule, NewDeparturePriceOverride, NewDropoffPriceRule, NewExtraPriceRule, NewOptionPriceRule, NewOptionStartTimeRule, NewOptionUnitPriceRule, NewOptionUnitTier, NewPickupPriceRule, NewPriceCatalog, NewPriceSchedule, NewPricingCategory, NewPricingCategoryDependency, OptionPriceRule, OptionStartTimeRule, OptionUnitPriceRule, OptionUnitTier, PickupPriceRule, PriceCatalog, PriceSchedule, PricingCategory, PricingCategoryDependency, } from "./schema.js";
|
|
11
|
+
export { addonPricingModeEnum, cancellationChargeTypeEnum, cancellationPolicies, cancellationPolicyRules, cancellationPolicyTypeEnum, departurePriceOverrides, dropoffPriceRules, extraPriceRules, optionPriceRules, optionPricingModeEnum, optionStartTimeRuleModeEnum, optionStartTimeRules, optionUnitPriceRules, optionUnitPricingModeEnum, optionUnitTiers, pickupPriceRules, priceAdjustmentTypeEnum, priceCatalogs, priceCatalogTypeEnum, priceSchedules, pricingCategories, pricingCategoryDependencies, pricingCategoryTypeEnum, pricingDependencyTypeEnum, } from "./schema.js";
|
|
12
|
+
export { loadDeparturePriceOverrides, pickRulesForDate, type ResolverRuleInput, type ResolverScheduleInput, resolveOptionPriceRulesForDate, type UnitPriceOverride, } from "./service-rule-resolver.js";
|
|
13
|
+
export { addonPricingModeSchema, cancellationChargeTypeSchema, cancellationPolicyListQuerySchema, cancellationPolicyRuleListQuerySchema, cancellationPolicyTypeSchema, departurePriceOverrideListQuerySchema, dropoffPriceRuleListQuerySchema, extraPriceRuleListQuerySchema, insertCancellationPolicyRuleSchema, insertCancellationPolicySchema, insertDeparturePriceOverrideSchema, insertDropoffPriceRuleSchema, insertExtraPriceRuleSchema, insertOptionPriceRuleSchema, insertOptionStartTimeRuleSchema, insertOptionUnitPriceRuleSchema, insertOptionUnitTierSchema, insertPickupPriceRuleSchema, insertPriceCatalogSchema, insertPriceScheduleSchema, insertPricingCategoryDependencySchema, insertPricingCategorySchema, optionPriceRuleListQuerySchema, optionPricingModeSchema, optionStartTimeRuleListQuerySchema, optionStartTimeRuleModeSchema, optionUnitPriceRuleListQuerySchema, optionUnitPricingModeSchema, optionUnitTierListQuerySchema, pickupPriceRuleListQuerySchema, priceAdjustmentTypeSchema, priceCatalogListQuerySchema, priceCatalogTypeSchema, priceScheduleListQuerySchema, pricingCategoryDependencyListQuerySchema, pricingCategoryListQuerySchema, pricingCategoryTypeSchema, pricingDependencyTypeSchema, updateCancellationPolicyRuleSchema, updateCancellationPolicySchema, updateDeparturePriceOverrideSchema, updateDropoffPriceRuleSchema, updateExtraPriceRuleSchema, updateOptionPriceRuleSchema, updateOptionStartTimeRuleSchema, updateOptionUnitPriceRuleSchema, updateOptionUnitTierSchema, updatePickupPriceRuleSchema, updatePriceCatalogSchema, updatePriceScheduleSchema, updatePricingCategoryDependencySchema, updatePricingCategorySchema, } from "./validation.js";
|
|
14
|
+
export { pricingService };
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pricing/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,eAAO,MAAM,aAAa,EAAE,MAE3B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,UAK/B,CAAA;AAED,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,8BAA8B,EAC9B,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,iCAAiC,EACjC,qCAAqC,EACrC,4BAA4B,EAC5B,qCAAqC,EACrC,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,uBAAuB,EACvB,kCAAkC,EAClC,6BAA6B,EAC7B,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,wCAAwC,EACxC,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,qCAAqC,EACrC,2BAA2B,GAC5B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { pricingRoutes } from "./routes.js";
|
|
2
|
+
import { publicPricingRoutes } from "./routes-public.js";
|
|
3
|
+
import { pricingService } from "./service.js";
|
|
4
|
+
export { publicPricingRoutes } from "./routes-public.js";
|
|
5
|
+
export { publicPricingService } from "./service-public.js";
|
|
6
|
+
export const pricingModule = {
|
|
7
|
+
name: "pricing",
|
|
8
|
+
};
|
|
9
|
+
export const pricingHonoModule = {
|
|
10
|
+
module: pricingModule,
|
|
11
|
+
adminRoutes: pricingRoutes,
|
|
12
|
+
publicRoutes: publicPricingRoutes,
|
|
13
|
+
routes: pricingRoutes,
|
|
14
|
+
};
|
|
15
|
+
export { addonPricingModeEnum, cancellationChargeTypeEnum, cancellationPolicies, cancellationPolicyRules, cancellationPolicyTypeEnum, departurePriceOverrides, dropoffPriceRules, extraPriceRules, optionPriceRules, optionPricingModeEnum, optionStartTimeRuleModeEnum, optionStartTimeRules, optionUnitPriceRules, optionUnitPricingModeEnum, optionUnitTiers, pickupPriceRules, priceAdjustmentTypeEnum, priceCatalogs, priceCatalogTypeEnum, priceSchedules, pricingCategories, pricingCategoryDependencies, pricingCategoryTypeEnum, pricingDependencyTypeEnum, } from "./schema.js";
|
|
16
|
+
export { loadDeparturePriceOverrides, pickRulesForDate, resolveOptionPriceRulesForDate, } from "./service-rule-resolver.js";
|
|
17
|
+
export { addonPricingModeSchema, cancellationChargeTypeSchema, cancellationPolicyListQuerySchema, cancellationPolicyRuleListQuerySchema, cancellationPolicyTypeSchema, departurePriceOverrideListQuerySchema, dropoffPriceRuleListQuerySchema, extraPriceRuleListQuerySchema, insertCancellationPolicyRuleSchema, insertCancellationPolicySchema, insertDeparturePriceOverrideSchema, insertDropoffPriceRuleSchema, insertExtraPriceRuleSchema, insertOptionPriceRuleSchema, insertOptionStartTimeRuleSchema, insertOptionUnitPriceRuleSchema, insertOptionUnitTierSchema, insertPickupPriceRuleSchema, insertPriceCatalogSchema, insertPriceScheduleSchema, insertPricingCategoryDependencySchema, insertPricingCategorySchema, optionPriceRuleListQuerySchema, optionPricingModeSchema, optionStartTimeRuleListQuerySchema, optionStartTimeRuleModeSchema, optionUnitPriceRuleListQuerySchema, optionUnitPricingModeSchema, optionUnitTierListQuerySchema, pickupPriceRuleListQuerySchema, priceAdjustmentTypeSchema, priceCatalogListQuerySchema, priceCatalogTypeSchema, priceScheduleListQuerySchema, pricingCategoryDependencyListQuerySchema, pricingCategoryListQuerySchema, pricingCategoryTypeSchema, pricingDependencyTypeSchema, updateCancellationPolicyRuleSchema, updateCancellationPolicySchema, updateDeparturePriceOverrideSchema, updateDropoffPriceRuleSchema, updateExtraPriceRuleSchema, updateOptionPriceRuleSchema, updateOptionStartTimeRuleSchema, updateOptionUnitPriceRuleSchema, updateOptionUnitTierSchema, updatePickupPriceRuleSchema, updatePriceCatalogSchema, updatePriceScheduleSchema, updatePricingCategoryDependencySchema, updatePricingCategorySchema, } from "./validation.js";
|
|
18
|
+
export { pricingService };
|