@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 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/pricing/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { booleanQueryParam } from "@voyant-travel/db/helpers";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { addonPricingModeSchema, cancellationChargeTypeSchema, cancellationPolicyTypeSchema, optionPricingModeSchema, optionStartTimeRuleModeSchema, optionUnitPricingModeSchema, priceAdjustmentTypeSchema, priceCatalogTypeSchema, pricingCategoryTypeSchema, pricingDependencyTypeSchema, } from "./validation-shared.js";
|
|
4
|
+
const paginationSchema = z.object({
|
|
5
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
6
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
7
|
+
});
|
|
8
|
+
const currencyCodeSchema = z
|
|
9
|
+
.string()
|
|
10
|
+
.length(3)
|
|
11
|
+
.regex(/^[A-Z]{3}$/);
|
|
12
|
+
const nullableDateSchema = z.string().date().nullable().optional();
|
|
13
|
+
const moneySchema = z.number().int().min(0).nullable().optional();
|
|
14
|
+
export const pricingCategoryCoreSchema = z.object({
|
|
15
|
+
productId: z.string().nullable().optional(),
|
|
16
|
+
optionId: z.string().nullable().optional(),
|
|
17
|
+
unitId: z.string().nullable().optional(),
|
|
18
|
+
code: z.string().max(100).nullable().optional(),
|
|
19
|
+
name: z.string().min(1).max(255),
|
|
20
|
+
categoryType: pricingCategoryTypeSchema.default("other"),
|
|
21
|
+
seatOccupancy: z.number().int().min(0).default(1),
|
|
22
|
+
groupSize: z.number().int().min(1).nullable().optional(),
|
|
23
|
+
isAgeQualified: z.boolean().default(false),
|
|
24
|
+
minAge: z.number().int().min(0).nullable().optional(),
|
|
25
|
+
maxAge: z.number().int().min(0).nullable().optional(),
|
|
26
|
+
internalUseOnly: z.boolean().default(false),
|
|
27
|
+
active: z.boolean().default(true),
|
|
28
|
+
sortOrder: z.number().int().default(0),
|
|
29
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
30
|
+
});
|
|
31
|
+
export const insertPricingCategorySchema = pricingCategoryCoreSchema;
|
|
32
|
+
export const updatePricingCategorySchema = pricingCategoryCoreSchema.partial();
|
|
33
|
+
export const pricingCategoryListQuerySchema = paginationSchema.extend({
|
|
34
|
+
productId: z.string().optional(),
|
|
35
|
+
optionId: z.string().optional(),
|
|
36
|
+
unitId: z.string().optional(),
|
|
37
|
+
categoryType: pricingCategoryTypeSchema.optional(),
|
|
38
|
+
active: booleanQueryParam.optional(),
|
|
39
|
+
search: z.string().optional(),
|
|
40
|
+
});
|
|
41
|
+
export const pricingCategoryDependencyCoreSchema = z.object({
|
|
42
|
+
pricingCategoryId: z.string(),
|
|
43
|
+
masterPricingCategoryId: z.string(),
|
|
44
|
+
dependencyType: pricingDependencyTypeSchema.default("requires"),
|
|
45
|
+
maxPerMaster: z.number().int().min(0).nullable().optional(),
|
|
46
|
+
maxDependentSum: z.number().int().min(0).nullable().optional(),
|
|
47
|
+
active: z.boolean().default(true),
|
|
48
|
+
notes: z.string().nullable().optional(),
|
|
49
|
+
});
|
|
50
|
+
export const insertPricingCategoryDependencySchema = pricingCategoryDependencyCoreSchema;
|
|
51
|
+
export const updatePricingCategoryDependencySchema = pricingCategoryDependencyCoreSchema.partial();
|
|
52
|
+
export const pricingCategoryDependencyListQuerySchema = paginationSchema.extend({
|
|
53
|
+
pricingCategoryId: z.string().optional(),
|
|
54
|
+
masterPricingCategoryId: z.string().optional(),
|
|
55
|
+
dependencyType: pricingDependencyTypeSchema.optional(),
|
|
56
|
+
active: booleanQueryParam.optional(),
|
|
57
|
+
});
|
|
58
|
+
export const cancellationPolicyCoreSchema = z.object({
|
|
59
|
+
code: z.string().max(100).nullable().optional(),
|
|
60
|
+
name: z.string().min(1).max(255),
|
|
61
|
+
policyType: cancellationPolicyTypeSchema.default("custom"),
|
|
62
|
+
simpleCutoffHours: z.number().int().min(0).nullable().optional(),
|
|
63
|
+
isDefault: z.boolean().default(false),
|
|
64
|
+
active: z.boolean().default(true),
|
|
65
|
+
notes: z.string().nullable().optional(),
|
|
66
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
67
|
+
});
|
|
68
|
+
export const insertCancellationPolicySchema = cancellationPolicyCoreSchema;
|
|
69
|
+
export const updateCancellationPolicySchema = cancellationPolicyCoreSchema.partial();
|
|
70
|
+
export const cancellationPolicyListQuerySchema = paginationSchema.extend({
|
|
71
|
+
policyType: cancellationPolicyTypeSchema.optional(),
|
|
72
|
+
active: booleanQueryParam.optional(),
|
|
73
|
+
isDefault: booleanQueryParam.optional(),
|
|
74
|
+
search: z.string().optional(),
|
|
75
|
+
});
|
|
76
|
+
export const cancellationPolicyRuleCoreSchema = z.object({
|
|
77
|
+
cancellationPolicyId: z.string(),
|
|
78
|
+
sortOrder: z.number().int().default(0),
|
|
79
|
+
cutoffMinutesBefore: z.number().int().min(0).nullable().optional(),
|
|
80
|
+
chargeType: cancellationChargeTypeSchema.default("none"),
|
|
81
|
+
chargeAmountCents: moneySchema,
|
|
82
|
+
chargePercentBasisPoints: z.number().int().min(0).max(10000).nullable().optional(),
|
|
83
|
+
active: z.boolean().default(true),
|
|
84
|
+
notes: z.string().nullable().optional(),
|
|
85
|
+
});
|
|
86
|
+
export const insertCancellationPolicyRuleSchema = cancellationPolicyRuleCoreSchema;
|
|
87
|
+
export const updateCancellationPolicyRuleSchema = cancellationPolicyRuleCoreSchema.partial();
|
|
88
|
+
export const cancellationPolicyRuleListQuerySchema = paginationSchema.extend({
|
|
89
|
+
cancellationPolicyId: z.string().optional(),
|
|
90
|
+
active: booleanQueryParam.optional(),
|
|
91
|
+
});
|
|
92
|
+
export const priceCatalogCoreSchema = z.object({
|
|
93
|
+
code: z.string().min(1).max(100),
|
|
94
|
+
name: z.string().min(1).max(255),
|
|
95
|
+
currencyCode: currencyCodeSchema.nullable().optional(),
|
|
96
|
+
catalogType: priceCatalogTypeSchema.default("public"),
|
|
97
|
+
isDefault: z.boolean().default(false),
|
|
98
|
+
active: z.boolean().default(true),
|
|
99
|
+
notes: z.string().nullable().optional(),
|
|
100
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
101
|
+
});
|
|
102
|
+
export const insertPriceCatalogSchema = priceCatalogCoreSchema;
|
|
103
|
+
export const updatePriceCatalogSchema = priceCatalogCoreSchema.partial();
|
|
104
|
+
export const priceCatalogListQuerySchema = paginationSchema.extend({
|
|
105
|
+
currencyCode: currencyCodeSchema.optional(),
|
|
106
|
+
catalogType: priceCatalogTypeSchema.optional(),
|
|
107
|
+
active: booleanQueryParam.optional(),
|
|
108
|
+
search: z.string().optional(),
|
|
109
|
+
});
|
|
110
|
+
export const priceScheduleCoreSchema = z.object({
|
|
111
|
+
priceCatalogId: z.string(),
|
|
112
|
+
code: z.string().max(100).nullable().optional(),
|
|
113
|
+
name: z.string().min(1).max(255),
|
|
114
|
+
recurrenceRule: z.string().min(1),
|
|
115
|
+
timezone: z.string().max(100).nullable().optional(),
|
|
116
|
+
validFrom: nullableDateSchema,
|
|
117
|
+
validTo: nullableDateSchema,
|
|
118
|
+
weekdays: z
|
|
119
|
+
.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]))
|
|
120
|
+
.nullable()
|
|
121
|
+
.optional(),
|
|
122
|
+
priority: z.number().int().default(0),
|
|
123
|
+
active: z.boolean().default(true),
|
|
124
|
+
notes: z.string().nullable().optional(),
|
|
125
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
126
|
+
});
|
|
127
|
+
export const insertPriceScheduleSchema = priceScheduleCoreSchema;
|
|
128
|
+
export const updatePriceScheduleSchema = priceScheduleCoreSchema.partial();
|
|
129
|
+
export const priceScheduleListQuerySchema = paginationSchema.extend({
|
|
130
|
+
priceCatalogId: z.string().optional(),
|
|
131
|
+
active: booleanQueryParam.optional(),
|
|
132
|
+
search: z.string().optional(),
|
|
133
|
+
});
|
|
134
|
+
export const optionPriceRuleCoreSchema = z.object({
|
|
135
|
+
productId: z.string(),
|
|
136
|
+
optionId: z.string(),
|
|
137
|
+
priceCatalogId: z.string(),
|
|
138
|
+
priceScheduleId: z.string().nullable().optional(),
|
|
139
|
+
cancellationPolicyId: z.string().nullable().optional(),
|
|
140
|
+
code: z.string().max(100).nullable().optional(),
|
|
141
|
+
name: z.string().min(1).max(255),
|
|
142
|
+
description: z.string().nullable().optional(),
|
|
143
|
+
pricingMode: optionPricingModeSchema.default("per_person"),
|
|
144
|
+
baseSellAmountCents: moneySchema,
|
|
145
|
+
baseCostAmountCents: moneySchema,
|
|
146
|
+
minPerBooking: z.number().int().min(0).nullable().optional(),
|
|
147
|
+
maxPerBooking: z.number().int().min(0).nullable().optional(),
|
|
148
|
+
allPricingCategories: z.boolean().default(true),
|
|
149
|
+
isDefault: z.boolean().default(false),
|
|
150
|
+
active: z.boolean().default(true),
|
|
151
|
+
notes: z.string().nullable().optional(),
|
|
152
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
153
|
+
});
|
|
154
|
+
export const insertOptionPriceRuleSchema = optionPriceRuleCoreSchema;
|
|
155
|
+
export const updateOptionPriceRuleSchema = optionPriceRuleCoreSchema.partial();
|
|
156
|
+
export const optionPriceRuleListQuerySchema = paginationSchema.extend({
|
|
157
|
+
productId: z.string().optional(),
|
|
158
|
+
optionId: z.string().optional(),
|
|
159
|
+
priceCatalogId: z.string().optional(),
|
|
160
|
+
priceScheduleId: z.string().optional(),
|
|
161
|
+
cancellationPolicyId: z.string().optional(),
|
|
162
|
+
pricingMode: optionPricingModeSchema.optional(),
|
|
163
|
+
active: booleanQueryParam.optional(),
|
|
164
|
+
});
|
|
165
|
+
export const optionUnitPriceRuleCoreSchema = z.object({
|
|
166
|
+
optionPriceRuleId: z.string(),
|
|
167
|
+
optionId: z.string(),
|
|
168
|
+
unitId: z.string(),
|
|
169
|
+
pricingCategoryId: z.string().nullable().optional(),
|
|
170
|
+
pricingMode: optionUnitPricingModeSchema.default("per_unit"),
|
|
171
|
+
sellAmountCents: moneySchema,
|
|
172
|
+
costAmountCents: moneySchema,
|
|
173
|
+
minQuantity: z.number().int().min(0).nullable().optional(),
|
|
174
|
+
maxQuantity: z.number().int().min(0).nullable().optional(),
|
|
175
|
+
active: z.boolean().default(true),
|
|
176
|
+
sortOrder: z.number().int().default(0),
|
|
177
|
+
notes: z.string().nullable().optional(),
|
|
178
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
179
|
+
});
|
|
180
|
+
export const insertOptionUnitPriceRuleSchema = optionUnitPriceRuleCoreSchema;
|
|
181
|
+
export const updateOptionUnitPriceRuleSchema = optionUnitPriceRuleCoreSchema.partial();
|
|
182
|
+
export const optionUnitPriceRuleListQuerySchema = paginationSchema.extend({
|
|
183
|
+
optionPriceRuleId: z.string().optional(),
|
|
184
|
+
optionId: z.string().optional(),
|
|
185
|
+
unitId: z.string().optional(),
|
|
186
|
+
pricingCategoryId: z.string().optional(),
|
|
187
|
+
active: booleanQueryParam.optional(),
|
|
188
|
+
});
|
|
189
|
+
export const optionStartTimeRuleCoreSchema = z.object({
|
|
190
|
+
optionPriceRuleId: z.string(),
|
|
191
|
+
optionId: z.string(),
|
|
192
|
+
startTimeId: z.string(),
|
|
193
|
+
ruleMode: optionStartTimeRuleModeSchema.default("included"),
|
|
194
|
+
adjustmentType: priceAdjustmentTypeSchema.nullable().optional(),
|
|
195
|
+
sellAdjustmentCents: moneySchema,
|
|
196
|
+
costAdjustmentCents: moneySchema,
|
|
197
|
+
adjustmentBasisPoints: z.number().int().min(0).max(10000).nullable().optional(),
|
|
198
|
+
active: z.boolean().default(true),
|
|
199
|
+
notes: z.string().nullable().optional(),
|
|
200
|
+
});
|
|
201
|
+
export const insertOptionStartTimeRuleSchema = optionStartTimeRuleCoreSchema;
|
|
202
|
+
export const updateOptionStartTimeRuleSchema = optionStartTimeRuleCoreSchema.partial();
|
|
203
|
+
export const optionStartTimeRuleListQuerySchema = paginationSchema.extend({
|
|
204
|
+
optionPriceRuleId: z.string().optional(),
|
|
205
|
+
optionId: z.string().optional(),
|
|
206
|
+
startTimeId: z.string().optional(),
|
|
207
|
+
active: booleanQueryParam.optional(),
|
|
208
|
+
});
|
|
209
|
+
export const optionUnitTierCoreSchema = z.object({
|
|
210
|
+
optionUnitPriceRuleId: z.string(),
|
|
211
|
+
minQuantity: z.number().int().min(1),
|
|
212
|
+
maxQuantity: z.number().int().min(1).nullable().optional(),
|
|
213
|
+
sellAmountCents: moneySchema,
|
|
214
|
+
costAmountCents: moneySchema,
|
|
215
|
+
active: z.boolean().default(true),
|
|
216
|
+
sortOrder: z.number().int().default(0),
|
|
217
|
+
});
|
|
218
|
+
export const insertOptionUnitTierSchema = optionUnitTierCoreSchema;
|
|
219
|
+
export const updateOptionUnitTierSchema = optionUnitTierCoreSchema.partial();
|
|
220
|
+
export const optionUnitTierListQuerySchema = paginationSchema.extend({
|
|
221
|
+
optionUnitPriceRuleId: z.string().optional(),
|
|
222
|
+
active: booleanQueryParam.optional(),
|
|
223
|
+
});
|
|
224
|
+
export const pickupPriceRuleCoreSchema = z.object({
|
|
225
|
+
optionPriceRuleId: z.string(),
|
|
226
|
+
optionId: z.string(),
|
|
227
|
+
pickupPointId: z.string(),
|
|
228
|
+
pricingMode: addonPricingModeSchema.default("included"),
|
|
229
|
+
sellAmountCents: moneySchema,
|
|
230
|
+
costAmountCents: moneySchema,
|
|
231
|
+
active: z.boolean().default(true),
|
|
232
|
+
sortOrder: z.number().int().default(0),
|
|
233
|
+
notes: z.string().nullable().optional(),
|
|
234
|
+
});
|
|
235
|
+
export const insertPickupPriceRuleSchema = pickupPriceRuleCoreSchema;
|
|
236
|
+
export const updatePickupPriceRuleSchema = pickupPriceRuleCoreSchema.partial();
|
|
237
|
+
export const pickupPriceRuleListQuerySchema = paginationSchema.extend({
|
|
238
|
+
optionPriceRuleId: z.string().optional(),
|
|
239
|
+
optionId: z.string().optional(),
|
|
240
|
+
pickupPointId: z.string().optional(),
|
|
241
|
+
active: booleanQueryParam.optional(),
|
|
242
|
+
});
|
|
243
|
+
export const dropoffPriceRuleCoreSchema = z.object({
|
|
244
|
+
optionPriceRuleId: z.string(),
|
|
245
|
+
optionId: z.string(),
|
|
246
|
+
facilityId: z.string().nullable().optional(),
|
|
247
|
+
dropoffCode: z.string().max(100).nullable().optional(),
|
|
248
|
+
dropoffName: z.string().min(1).max(255),
|
|
249
|
+
pricingMode: addonPricingModeSchema.default("included"),
|
|
250
|
+
sellAmountCents: moneySchema,
|
|
251
|
+
costAmountCents: moneySchema,
|
|
252
|
+
active: z.boolean().default(true),
|
|
253
|
+
sortOrder: z.number().int().default(0),
|
|
254
|
+
notes: z.string().nullable().optional(),
|
|
255
|
+
});
|
|
256
|
+
export const insertDropoffPriceRuleSchema = dropoffPriceRuleCoreSchema;
|
|
257
|
+
export const updateDropoffPriceRuleSchema = dropoffPriceRuleCoreSchema.partial();
|
|
258
|
+
export const dropoffPriceRuleListQuerySchema = paginationSchema.extend({
|
|
259
|
+
optionPriceRuleId: z.string().optional(),
|
|
260
|
+
optionId: z.string().optional(),
|
|
261
|
+
facilityId: z.string().optional(),
|
|
262
|
+
active: booleanQueryParam.optional(),
|
|
263
|
+
});
|
|
264
|
+
export const extraPriceRuleCoreSchema = z.object({
|
|
265
|
+
optionPriceRuleId: z.string(),
|
|
266
|
+
optionId: z.string(),
|
|
267
|
+
productExtraId: z.string().nullable().optional(),
|
|
268
|
+
optionExtraConfigId: z.string().nullable().optional(),
|
|
269
|
+
pricingMode: addonPricingModeSchema.default("included"),
|
|
270
|
+
sellAmountCents: moneySchema,
|
|
271
|
+
costAmountCents: moneySchema,
|
|
272
|
+
active: z.boolean().default(true),
|
|
273
|
+
sortOrder: z.number().int().default(0),
|
|
274
|
+
notes: z.string().nullable().optional(),
|
|
275
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
276
|
+
});
|
|
277
|
+
export const insertExtraPriceRuleSchema = extraPriceRuleCoreSchema;
|
|
278
|
+
export const updateExtraPriceRuleSchema = extraPriceRuleCoreSchema.partial();
|
|
279
|
+
export const extraPriceRuleListQuerySchema = paginationSchema.extend({
|
|
280
|
+
optionPriceRuleId: z.string().optional(),
|
|
281
|
+
optionId: z.string().optional(),
|
|
282
|
+
productExtraId: z.string().optional(),
|
|
283
|
+
optionExtraConfigId: z.string().optional(),
|
|
284
|
+
active: booleanQueryParam.optional(),
|
|
285
|
+
});
|
|
286
|
+
export const departurePriceOverrideCoreSchema = z.object({
|
|
287
|
+
departureId: z.string(),
|
|
288
|
+
optionId: z.string(),
|
|
289
|
+
optionUnitId: z.string(),
|
|
290
|
+
priceCatalogId: z.string(),
|
|
291
|
+
sellAmountCents: z.number().int().min(0),
|
|
292
|
+
costAmountCents: z.number().int().min(0).nullable().optional(),
|
|
293
|
+
notes: z.string().nullable().optional(),
|
|
294
|
+
active: z.boolean().default(true),
|
|
295
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
296
|
+
});
|
|
297
|
+
export const insertDeparturePriceOverrideSchema = departurePriceOverrideCoreSchema;
|
|
298
|
+
export const updateDeparturePriceOverrideSchema = departurePriceOverrideCoreSchema.partial();
|
|
299
|
+
export const departurePriceOverrideListQuerySchema = paginationSchema.extend({
|
|
300
|
+
departureId: z.string().optional(),
|
|
301
|
+
optionId: z.string().optional(),
|
|
302
|
+
optionUnitId: z.string().optional(),
|
|
303
|
+
priceCatalogId: z.string().optional(),
|
|
304
|
+
active: booleanQueryParam.optional(),
|
|
305
|
+
});
|
|
306
|
+
export * from "./validation-public.js";
|
|
307
|
+
export * from "./validation-shared.js";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Promotions domain events.
|
|
3
|
+
*
|
|
4
|
+
* Per docs/architecture/promotions-architecture.md §9.1.
|
|
5
|
+
*
|
|
6
|
+
* Emitted (after the service mutation commits) by every CRUD path that
|
|
7
|
+
* changes a field affecting projection or evaluation. Pure metadata-only
|
|
8
|
+
* edits (`description`, `metadata`) skip emission to avoid pointless
|
|
9
|
+
* reindex churn.
|
|
10
|
+
*
|
|
11
|
+
* The catalog bridge subscribes and dispatches per `affected.kind`:
|
|
12
|
+
* - `products` → reindex the listed product IDs only.
|
|
13
|
+
* - `all` → reindex every owned product (used when the resolved
|
|
14
|
+
* product set would be too large to enumerate, or for
|
|
15
|
+
* `global`-scope offers).
|
|
16
|
+
*
|
|
17
|
+
* No `slices` variant: `IndexerService` (packages/catalog/src/services/
|
|
18
|
+
* indexer-service.ts:75) has `reindexEntity` (one entity, all slices) and
|
|
19
|
+
* `reindexEntityForSlice` (one entity, one slice) but no "reindex every
|
|
20
|
+
* product in this slice" helper. Slice-shaped scopes (`markets`,
|
|
21
|
+
* `audiences`) are resolved to product IDs at emission time, falling back
|
|
22
|
+
* to `all` when the resolved set would be unbounded.
|
|
23
|
+
*/
|
|
24
|
+
/** Stable string identifier for the event. */
|
|
25
|
+
export declare const PROMOTION_CHANGED_EVENT: "promotion.changed";
|
|
26
|
+
export type PromotionChangedSource = "created" | "updated" | "deleted" | "expired";
|
|
27
|
+
export type PromotionChangedAffected = {
|
|
28
|
+
kind: "products";
|
|
29
|
+
productIds: string[];
|
|
30
|
+
} | {
|
|
31
|
+
kind: "all";
|
|
32
|
+
};
|
|
33
|
+
export interface PromotionChangedEvent {
|
|
34
|
+
offerId: string;
|
|
35
|
+
source: PromotionChangedSource;
|
|
36
|
+
affected: PromotionChangedAffected;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/promotions/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,uBAAuB,EAAG,mBAA4B,CAAA;AAEnE,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;AAElF,MAAM,MAAM,wBAAwB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAA;AAEnG,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,sBAAsB,CAAA;IAC9B,QAAQ,EAAE,wBAAwB,CAAA;CACnC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Promotions domain events.
|
|
3
|
+
*
|
|
4
|
+
* Per docs/architecture/promotions-architecture.md §9.1.
|
|
5
|
+
*
|
|
6
|
+
* Emitted (after the service mutation commits) by every CRUD path that
|
|
7
|
+
* changes a field affecting projection or evaluation. Pure metadata-only
|
|
8
|
+
* edits (`description`, `metadata`) skip emission to avoid pointless
|
|
9
|
+
* reindex churn.
|
|
10
|
+
*
|
|
11
|
+
* The catalog bridge subscribes and dispatches per `affected.kind`:
|
|
12
|
+
* - `products` → reindex the listed product IDs only.
|
|
13
|
+
* - `all` → reindex every owned product (used when the resolved
|
|
14
|
+
* product set would be too large to enumerate, or for
|
|
15
|
+
* `global`-scope offers).
|
|
16
|
+
*
|
|
17
|
+
* No `slices` variant: `IndexerService` (packages/catalog/src/services/
|
|
18
|
+
* indexer-service.ts:75) has `reindexEntity` (one entity, all slices) and
|
|
19
|
+
* `reindexEntityForSlice` (one entity, one slice) but no "reindex every
|
|
20
|
+
* product in this slice" helper. Slice-shaped scopes (`markets`,
|
|
21
|
+
* `audiences`) are resolved to product IDs at emission time, falling back
|
|
22
|
+
* to `all` when the resolved set would be unbounded.
|
|
23
|
+
*/
|
|
24
|
+
/** Stable string identifier for the event. */
|
|
25
|
+
export const PROMOTION_CHANGED_EVENT = "promotion.changed";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Module } from "@voyant-travel/core";
|
|
2
|
+
import type { HonoModule } from "@voyant-travel/hono/module";
|
|
3
|
+
export type { PromotionsRoutes } from "./routes.js";
|
|
4
|
+
export declare const promotionsModule: Module;
|
|
5
|
+
export declare const promotionsHonoModule: HonoModule;
|
|
6
|
+
export { PROMOTION_CHANGED_EVENT, type PromotionChangedAffected, type PromotionChangedEvent, type PromotionChangedSource, } from "./events.js";
|
|
7
|
+
export { type NewPromotionalOffer, type NewPromotionalOfferProduct, type NewPromotionalOfferRedemption, type PromotionalOffer, type PromotionalOfferDiscountType, type PromotionalOfferProduct, type PromotionalOfferRedemption, promotionalOfferDiscountTypeEnum, promotionalOfferProducts, promotionalOfferRedemptions, promotionalOffers, } from "./schema.js";
|
|
8
|
+
export { type OfferMutationRuntime, type PromotionsService, promotionsService, recomputeOfferLinks, resolveScopeProductIds, } from "./service.js";
|
|
9
|
+
export { type InsertPromotionalOffer, type InsertPromotionalOfferInput, insertPromotionalOfferSchema, type PromotionalOfferApplicationMode, type PromotionalOfferConditions, type PromotionalOfferListQuery, type PromotionalOfferListStatus, type PromotionalOfferScope, type PromotionalOfferScopeKind, promotionalOfferConditionsSchema, promotionalOfferListQuerySchema, promotionalOfferScopeSchema, type UpdatePromotionalOffer, type UpdatePromotionalOfferInput, updatePromotionalOfferSchema, } from "./validation.js";
|
|
10
|
+
export { type BulkReindexProductsInput, type BulkReindexProductsOutput, bulkReindexProductsWorkflow, promotionAffectedAllFilter, } from "./workflow-bulk-reindex.js";
|
|
11
|
+
export { BULK_REINDEX_SERVICE_KEY, type BulkReindexProductsService, } from "./workflow-runtime.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/promotions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,eAAO,MAAM,gBAAgB,EAAE,MAI9B,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,UAGlC,CAAA;AAED,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,gCAAgC,EAChC,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,4BAA4B,EAC5B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,gCAAgC,EAChC,+BAA+B,EAC/B,2BAA2B,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,4BAA4B,GAC7B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,wBAAwB,EACxB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { promotionsRoutes } from "./routes.js";
|
|
2
|
+
import { bulkReindexProductsWorkflow, promotionAffectedAllFilter } from "./workflow-bulk-reindex.js";
|
|
3
|
+
export const promotionsModule = {
|
|
4
|
+
name: "promotions",
|
|
5
|
+
workflows: [bulkReindexProductsWorkflow],
|
|
6
|
+
eventFilters: [promotionAffectedAllFilter],
|
|
7
|
+
};
|
|
8
|
+
export const promotionsHonoModule = {
|
|
9
|
+
module: promotionsModule,
|
|
10
|
+
adminRoutes: promotionsRoutes,
|
|
11
|
+
};
|
|
12
|
+
export { PROMOTION_CHANGED_EVENT, } from "./events.js";
|
|
13
|
+
export { promotionalOfferDiscountTypeEnum, promotionalOfferProducts, promotionalOfferRedemptions, promotionalOffers, } from "./schema.js";
|
|
14
|
+
export { promotionsService, recomputeOfferLinks, resolveScopeProductIds, } from "./service.js";
|
|
15
|
+
export { insertPromotionalOfferSchema, promotionalOfferConditionsSchema, promotionalOfferListQuerySchema, promotionalOfferScopeSchema, updatePromotionalOfferSchema, } from "./validation.js";
|
|
16
|
+
export { bulkReindexProductsWorkflow, promotionAffectedAllFilter, } from "./workflow-bulk-reindex.js";
|
|
17
|
+
export { BULK_REINDEX_SERVICE_KEY, } from "./workflow-runtime.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EventBus } from "@voyant-travel/core";
|
|
2
|
+
import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
|
|
3
|
+
import type { Context } from "hono";
|
|
4
|
+
export type Env = {
|
|
5
|
+
Variables: {
|
|
6
|
+
db: PostgresJsDatabase;
|
|
7
|
+
userId?: string;
|
|
8
|
+
eventBus?: EventBus;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare function notFound(c: Context<Env>, message: string): Response & import("hono").TypedResponse<{
|
|
12
|
+
error: string;
|
|
13
|
+
}, 404, "json">;
|
|
14
|
+
//# sourceMappingURL=routes-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-shared.d.ts","sourceRoot":"","sources":["../../src/promotions/routes-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,GAAG,GAAG;IAChB,SAAS,EAAE;QACT,EAAE,EAAE,kBAAkB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,QAAQ,CAAA;KACpB,CAAA;CACF,CAAA;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM;;gBAExD"}
|