@voyantjs/products 0.2.0 → 0.3.1
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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/routes-public.d.ts +337 -0
- package/dist/routes-public.d.ts.map +1 -0
- package/dist/routes-public.js +32 -0
- package/dist/routes.d.ts +4 -4
- package/dist/schema-core.d.ts +897 -0
- package/dist/schema-core.d.ts.map +1 -0
- package/dist/schema-core.js +77 -0
- package/dist/schema-itinerary.d.ts +828 -0
- package/dist/schema-itinerary.d.ts.map +1 -0
- package/dist/schema-itinerary.js +77 -0
- package/dist/schema-relations.d.ts +99 -0
- package/dist/schema-relations.d.ts.map +1 -0
- package/dist/schema-relations.js +155 -0
- package/dist/schema-settings.d.ts +1749 -0
- package/dist/schema-settings.d.ts.map +1 -0
- package/dist/schema-settings.js +175 -0
- package/dist/schema-shared.d.ts +15 -0
- package/dist/schema-shared.d.ts.map +1 -0
- package/dist/schema-shared.js +91 -0
- package/dist/schema-taxonomy.d.ts +573 -0
- package/dist/schema-taxonomy.d.ts.map +1 -0
- package/dist/schema-taxonomy.js +65 -0
- package/dist/schema.d.ts +6 -4155
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +6 -653
- package/dist/service-public.d.ts +259 -0
- package/dist/service-public.d.ts.map +1 -0
- package/dist/service-public.js +479 -0
- package/dist/service.d.ts +4 -4
- package/dist/validation-config.d.ts +233 -0
- package/dist/validation-config.d.ts.map +1 -0
- package/dist/validation-config.js +73 -0
- package/dist/validation-content.d.ts +358 -0
- package/dist/validation-content.d.ts.map +1 -0
- package/dist/validation-content.js +177 -0
- package/dist/validation-core.d.ts +268 -0
- package/dist/validation-core.d.ts.map +1 -0
- package/dist/validation-core.js +91 -0
- package/dist/validation-public.d.ts +454 -0
- package/dist/validation-public.d.ts.map +1 -0
- package/dist/validation-public.js +130 -0
- package/dist/validation-shared.d.ts +108 -0
- package/dist/validation-shared.d.ts.map +1 -0
- package/dist/validation-shared.js +87 -0
- package/dist/validation.d.ts +5 -854
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +5 -433
- package/package.json +12 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-content.d.ts","sourceRoot":"","sources":["../src/validation-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { booleanQueryParam, languageTagSchema, productFeatureTypeSchema, productLocationTypeSchema, serviceTypeSchema, z, } from "./validation-shared.js";
|
|
2
|
+
const productFeatureCoreSchema = z.object({
|
|
3
|
+
featureType: productFeatureTypeSchema.default("highlight"),
|
|
4
|
+
title: z.string().min(1).max(255),
|
|
5
|
+
description: z.string().optional().nullable(),
|
|
6
|
+
sortOrder: z.number().int().default(0),
|
|
7
|
+
});
|
|
8
|
+
const productFaqCoreSchema = z.object({
|
|
9
|
+
question: z.string().min(1).max(1000),
|
|
10
|
+
answer: z.string().min(1).max(10000),
|
|
11
|
+
sortOrder: z.number().int().default(0),
|
|
12
|
+
});
|
|
13
|
+
const productLocationCoreSchema = z.object({
|
|
14
|
+
locationType: productLocationTypeSchema.default("point_of_interest"),
|
|
15
|
+
title: z.string().min(1).max(255),
|
|
16
|
+
address: z.string().max(1000).optional().nullable(),
|
|
17
|
+
city: z.string().max(255).optional().nullable(),
|
|
18
|
+
countryCode: z.string().min(2).max(2).optional().nullable(),
|
|
19
|
+
latitude: z.number().min(-90).max(90).optional().nullable(),
|
|
20
|
+
longitude: z.number().min(-180).max(180).optional().nullable(),
|
|
21
|
+
googlePlaceId: z.string().max(255).optional().nullable(),
|
|
22
|
+
applePlaceId: z.string().max(255).optional().nullable(),
|
|
23
|
+
tripadvisorLocationId: z.string().max(255).optional().nullable(),
|
|
24
|
+
sortOrder: z.number().int().default(0),
|
|
25
|
+
});
|
|
26
|
+
export const insertProductFeatureSchema = productFeatureCoreSchema;
|
|
27
|
+
export const updateProductFeatureSchema = productFeatureCoreSchema.partial();
|
|
28
|
+
export const productFeatureListQuerySchema = z.object({
|
|
29
|
+
productId: z.string().optional(),
|
|
30
|
+
featureType: productFeatureTypeSchema.optional(),
|
|
31
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
32
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
33
|
+
});
|
|
34
|
+
export const insertProductFaqSchema = productFaqCoreSchema;
|
|
35
|
+
export const updateProductFaqSchema = productFaqCoreSchema.partial();
|
|
36
|
+
export const productFaqListQuerySchema = z.object({
|
|
37
|
+
productId: z.string().optional(),
|
|
38
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
39
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
40
|
+
});
|
|
41
|
+
export const insertProductLocationSchema = productLocationCoreSchema;
|
|
42
|
+
export const updateProductLocationSchema = productLocationCoreSchema.partial();
|
|
43
|
+
export const productLocationListQuerySchema = z.object({
|
|
44
|
+
productId: z.string().optional(),
|
|
45
|
+
locationType: productLocationTypeSchema.optional(),
|
|
46
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
47
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
48
|
+
});
|
|
49
|
+
const productTranslationCoreSchema = z.object({
|
|
50
|
+
languageTag: languageTagSchema,
|
|
51
|
+
slug: z.string().max(255).optional().nullable(),
|
|
52
|
+
name: z.string().min(1).max(255),
|
|
53
|
+
shortDescription: z.string().optional().nullable(),
|
|
54
|
+
description: z.string().optional().nullable(),
|
|
55
|
+
seoTitle: z.string().max(255).optional().nullable(),
|
|
56
|
+
seoDescription: z.string().optional().nullable(),
|
|
57
|
+
});
|
|
58
|
+
const optionTranslationCoreSchema = z.object({
|
|
59
|
+
languageTag: languageTagSchema,
|
|
60
|
+
name: z.string().min(1).max(255),
|
|
61
|
+
shortDescription: z.string().optional().nullable(),
|
|
62
|
+
description: z.string().optional().nullable(),
|
|
63
|
+
});
|
|
64
|
+
export const insertProductTranslationSchema = productTranslationCoreSchema;
|
|
65
|
+
export const updateProductTranslationSchema = productTranslationCoreSchema.partial();
|
|
66
|
+
export const productTranslationListQuerySchema = z.object({
|
|
67
|
+
productId: z.string().optional(),
|
|
68
|
+
languageTag: languageTagSchema.optional(),
|
|
69
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
70
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
71
|
+
});
|
|
72
|
+
export const insertProductOptionTranslationSchema = optionTranslationCoreSchema;
|
|
73
|
+
export const updateProductOptionTranslationSchema = optionTranslationCoreSchema.partial();
|
|
74
|
+
export const productOptionTranslationListQuerySchema = z.object({
|
|
75
|
+
optionId: z.string().optional(),
|
|
76
|
+
languageTag: languageTagSchema.optional(),
|
|
77
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
78
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
79
|
+
});
|
|
80
|
+
export const insertOptionUnitTranslationSchema = optionTranslationCoreSchema;
|
|
81
|
+
export const updateOptionUnitTranslationSchema = optionTranslationCoreSchema.partial();
|
|
82
|
+
export const optionUnitTranslationListQuerySchema = z.object({
|
|
83
|
+
unitId: z.string().optional(),
|
|
84
|
+
languageTag: languageTagSchema.optional(),
|
|
85
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
86
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
87
|
+
});
|
|
88
|
+
const dayCoreSchema = z.object({
|
|
89
|
+
dayNumber: z.number().int().positive(),
|
|
90
|
+
title: z.string().max(255).optional().nullable(),
|
|
91
|
+
description: z.string().optional().nullable(),
|
|
92
|
+
location: z.string().max(255).optional().nullable(),
|
|
93
|
+
});
|
|
94
|
+
export const insertDaySchema = dayCoreSchema;
|
|
95
|
+
export const updateDaySchema = dayCoreSchema.partial();
|
|
96
|
+
const dayServiceCoreSchema = z.object({
|
|
97
|
+
serviceType: serviceTypeSchema,
|
|
98
|
+
name: z.string().min(1).max(255),
|
|
99
|
+
description: z.string().optional().nullable(),
|
|
100
|
+
supplierServiceId: z.string().optional().nullable(),
|
|
101
|
+
costCurrency: z.string().min(3).max(3),
|
|
102
|
+
costAmountCents: z.number().int().min(0),
|
|
103
|
+
quantity: z.number().int().positive().default(1),
|
|
104
|
+
sortOrder: z.number().int().optional().nullable(),
|
|
105
|
+
notes: z.string().optional().nullable(),
|
|
106
|
+
});
|
|
107
|
+
export const insertDayServiceSchema = dayServiceCoreSchema;
|
|
108
|
+
export const updateDayServiceSchema = dayServiceCoreSchema.partial();
|
|
109
|
+
const productMediaTypeSchema = z.enum(["image", "video", "document"]);
|
|
110
|
+
const productMediaCoreSchema = z.object({
|
|
111
|
+
mediaType: productMediaTypeSchema,
|
|
112
|
+
name: z.string().min(1).max(500),
|
|
113
|
+
url: z.string().min(1).max(2048),
|
|
114
|
+
storageKey: z.string().max(1024).optional().nullable(),
|
|
115
|
+
mimeType: z.string().max(255).optional().nullable(),
|
|
116
|
+
fileSize: z.number().int().min(0).optional().nullable(),
|
|
117
|
+
altText: z.string().max(1000).optional().nullable(),
|
|
118
|
+
sortOrder: z.number().int().default(0),
|
|
119
|
+
isCover: z.boolean().default(false),
|
|
120
|
+
});
|
|
121
|
+
export const insertProductMediaSchema = productMediaCoreSchema.extend({
|
|
122
|
+
dayId: z.string().optional().nullable(),
|
|
123
|
+
});
|
|
124
|
+
export const updateProductMediaSchema = productMediaCoreSchema.partial();
|
|
125
|
+
export const productMediaListQuerySchema = z.object({
|
|
126
|
+
dayId: z.string().optional(),
|
|
127
|
+
mediaType: productMediaTypeSchema.optional(),
|
|
128
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
129
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
130
|
+
});
|
|
131
|
+
export const reorderProductMediaSchema = z.object({
|
|
132
|
+
items: z.array(z.object({ id: z.string(), sortOrder: z.number().int() })),
|
|
133
|
+
});
|
|
134
|
+
const productTypeCoreSchema = z.object({
|
|
135
|
+
name: z.string().min(1).max(255),
|
|
136
|
+
code: z.string().min(1).max(100),
|
|
137
|
+
description: z.string().optional().nullable(),
|
|
138
|
+
sortOrder: z.number().int().default(0),
|
|
139
|
+
active: z.boolean().default(true),
|
|
140
|
+
metadata: z.record(z.string(), z.unknown()).optional().nullable(),
|
|
141
|
+
});
|
|
142
|
+
export const insertProductTypeSchema = productTypeCoreSchema;
|
|
143
|
+
export const updateProductTypeSchema = productTypeCoreSchema.partial();
|
|
144
|
+
export const productTypeListQuerySchema = z.object({
|
|
145
|
+
active: booleanQueryParam.optional(),
|
|
146
|
+
search: z.string().optional(),
|
|
147
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
148
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
149
|
+
});
|
|
150
|
+
const productCategoryCoreSchema = z.object({
|
|
151
|
+
name: z.string().min(1).max(255),
|
|
152
|
+
slug: z.string().min(1).max(255),
|
|
153
|
+
parentId: z.string().optional().nullable(),
|
|
154
|
+
description: z.string().optional().nullable(),
|
|
155
|
+
sortOrder: z.number().int().default(0),
|
|
156
|
+
active: z.boolean().default(true),
|
|
157
|
+
metadata: z.record(z.string(), z.unknown()).optional().nullable(),
|
|
158
|
+
});
|
|
159
|
+
export const insertProductCategorySchema = productCategoryCoreSchema;
|
|
160
|
+
export const updateProductCategorySchema = productCategoryCoreSchema.partial();
|
|
161
|
+
export const productCategoryListQuerySchema = z.object({
|
|
162
|
+
parentId: z.string().optional(),
|
|
163
|
+
active: booleanQueryParam.optional(),
|
|
164
|
+
search: z.string().optional(),
|
|
165
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
166
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
167
|
+
});
|
|
168
|
+
const productTagCoreSchema = z.object({
|
|
169
|
+
name: z.string().min(1).max(255),
|
|
170
|
+
});
|
|
171
|
+
export const insertProductTagSchema = productTagCoreSchema;
|
|
172
|
+
export const updateProductTagSchema = productTagCoreSchema.partial();
|
|
173
|
+
export const productTagListQuerySchema = z.object({
|
|
174
|
+
search: z.string().optional(),
|
|
175
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
176
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
177
|
+
});
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { z } from "./validation-shared.js";
|
|
2
|
+
export declare const insertProductSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
5
|
+
draft: "draft";
|
|
6
|
+
active: "active";
|
|
7
|
+
archived: "archived";
|
|
8
|
+
}>>;
|
|
9
|
+
description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
10
|
+
bookingMode: z.ZodDefault<z.ZodEnum<{
|
|
11
|
+
date: "date";
|
|
12
|
+
other: "other";
|
|
13
|
+
date_time: "date_time";
|
|
14
|
+
open: "open";
|
|
15
|
+
stay: "stay";
|
|
16
|
+
transfer: "transfer";
|
|
17
|
+
itinerary: "itinerary";
|
|
18
|
+
}>>;
|
|
19
|
+
capacityMode: z.ZodDefault<z.ZodEnum<{
|
|
20
|
+
free_sale: "free_sale";
|
|
21
|
+
limited: "limited";
|
|
22
|
+
on_request: "on_request";
|
|
23
|
+
}>>;
|
|
24
|
+
timezone: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
25
|
+
visibility: z.ZodDefault<z.ZodEnum<{
|
|
26
|
+
public: "public";
|
|
27
|
+
private: "private";
|
|
28
|
+
hidden: "hidden";
|
|
29
|
+
}>>;
|
|
30
|
+
activated: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
reservationTimeoutMinutes: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
32
|
+
sellCurrency: z.ZodString;
|
|
33
|
+
facilityId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
34
|
+
productTypeId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
35
|
+
startDate: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
36
|
+
endDate: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
37
|
+
pax: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
38
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
39
|
+
sellAmountCents: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
40
|
+
costAmountCents: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
41
|
+
marginPercent: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
export declare const updateProductSchema: z.ZodObject<{
|
|
44
|
+
name: z.ZodOptional<z.ZodString>;
|
|
45
|
+
status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
46
|
+
draft: "draft";
|
|
47
|
+
active: "active";
|
|
48
|
+
archived: "archived";
|
|
49
|
+
}>>>;
|
|
50
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
51
|
+
bookingMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
52
|
+
date: "date";
|
|
53
|
+
other: "other";
|
|
54
|
+
date_time: "date_time";
|
|
55
|
+
open: "open";
|
|
56
|
+
stay: "stay";
|
|
57
|
+
transfer: "transfer";
|
|
58
|
+
itinerary: "itinerary";
|
|
59
|
+
}>>>;
|
|
60
|
+
capacityMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
61
|
+
free_sale: "free_sale";
|
|
62
|
+
limited: "limited";
|
|
63
|
+
on_request: "on_request";
|
|
64
|
+
}>>>;
|
|
65
|
+
timezone: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
66
|
+
visibility: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
67
|
+
public: "public";
|
|
68
|
+
private: "private";
|
|
69
|
+
hidden: "hidden";
|
|
70
|
+
}>>>;
|
|
71
|
+
activated: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
72
|
+
reservationTimeoutMinutes: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
73
|
+
sellCurrency: z.ZodOptional<z.ZodString>;
|
|
74
|
+
facilityId: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
75
|
+
productTypeId: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
76
|
+
startDate: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
77
|
+
endDate: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
78
|
+
pax: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
79
|
+
tags: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
|
|
80
|
+
sellAmountCents: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
81
|
+
costAmountCents: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
82
|
+
marginPercent: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
83
|
+
}, z.core.$strip>;
|
|
84
|
+
export declare const selectProductSchema: z.ZodObject<{
|
|
85
|
+
name: z.ZodString;
|
|
86
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
87
|
+
draft: "draft";
|
|
88
|
+
active: "active";
|
|
89
|
+
archived: "archived";
|
|
90
|
+
}>>;
|
|
91
|
+
description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
92
|
+
bookingMode: z.ZodDefault<z.ZodEnum<{
|
|
93
|
+
date: "date";
|
|
94
|
+
other: "other";
|
|
95
|
+
date_time: "date_time";
|
|
96
|
+
open: "open";
|
|
97
|
+
stay: "stay";
|
|
98
|
+
transfer: "transfer";
|
|
99
|
+
itinerary: "itinerary";
|
|
100
|
+
}>>;
|
|
101
|
+
capacityMode: z.ZodDefault<z.ZodEnum<{
|
|
102
|
+
free_sale: "free_sale";
|
|
103
|
+
limited: "limited";
|
|
104
|
+
on_request: "on_request";
|
|
105
|
+
}>>;
|
|
106
|
+
timezone: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
107
|
+
visibility: z.ZodDefault<z.ZodEnum<{
|
|
108
|
+
public: "public";
|
|
109
|
+
private: "private";
|
|
110
|
+
hidden: "hidden";
|
|
111
|
+
}>>;
|
|
112
|
+
activated: z.ZodDefault<z.ZodBoolean>;
|
|
113
|
+
reservationTimeoutMinutes: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
114
|
+
sellCurrency: z.ZodString;
|
|
115
|
+
facilityId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
116
|
+
productTypeId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
117
|
+
startDate: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
118
|
+
endDate: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
119
|
+
pax: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
120
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
121
|
+
id: z.ZodString;
|
|
122
|
+
sellAmountCents: z.ZodNullable<z.ZodNumber>;
|
|
123
|
+
costAmountCents: z.ZodNullable<z.ZodNumber>;
|
|
124
|
+
marginPercent: z.ZodNullable<z.ZodNumber>;
|
|
125
|
+
createdAt: z.ZodCoercedDate<unknown>;
|
|
126
|
+
updatedAt: z.ZodCoercedDate<unknown>;
|
|
127
|
+
}, z.core.$strip>;
|
|
128
|
+
export declare const productListQuerySchema: z.ZodObject<{
|
|
129
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
130
|
+
draft: "draft";
|
|
131
|
+
active: "active";
|
|
132
|
+
archived: "archived";
|
|
133
|
+
}>>;
|
|
134
|
+
bookingMode: z.ZodOptional<z.ZodEnum<{
|
|
135
|
+
date: "date";
|
|
136
|
+
other: "other";
|
|
137
|
+
date_time: "date_time";
|
|
138
|
+
open: "open";
|
|
139
|
+
stay: "stay";
|
|
140
|
+
transfer: "transfer";
|
|
141
|
+
itinerary: "itinerary";
|
|
142
|
+
}>>;
|
|
143
|
+
visibility: z.ZodOptional<z.ZodEnum<{
|
|
144
|
+
public: "public";
|
|
145
|
+
private: "private";
|
|
146
|
+
hidden: "hidden";
|
|
147
|
+
}>>;
|
|
148
|
+
activated: z.ZodOptional<z.ZodPipe<z.ZodEnum<{
|
|
149
|
+
0: "0";
|
|
150
|
+
1: "1";
|
|
151
|
+
true: "true";
|
|
152
|
+
false: "false";
|
|
153
|
+
}>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>;
|
|
154
|
+
facilityId: z.ZodOptional<z.ZodString>;
|
|
155
|
+
search: z.ZodOptional<z.ZodString>;
|
|
156
|
+
limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
157
|
+
offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
158
|
+
}, z.core.$strip>;
|
|
159
|
+
export type InsertProduct = z.infer<typeof insertProductSchema>;
|
|
160
|
+
export type UpdateProduct = z.infer<typeof updateProductSchema>;
|
|
161
|
+
export type SelectProduct = z.infer<typeof selectProductSchema>;
|
|
162
|
+
export declare const insertProductOptionSchema: z.ZodObject<{
|
|
163
|
+
name: z.ZodString;
|
|
164
|
+
code: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
165
|
+
description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
166
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
167
|
+
draft: "draft";
|
|
168
|
+
active: "active";
|
|
169
|
+
archived: "archived";
|
|
170
|
+
}>>;
|
|
171
|
+
isDefault: z.ZodDefault<z.ZodBoolean>;
|
|
172
|
+
sortOrder: z.ZodDefault<z.ZodNumber>;
|
|
173
|
+
availableFrom: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
174
|
+
availableTo: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
175
|
+
}, z.core.$strip>;
|
|
176
|
+
export declare const updateProductOptionSchema: z.ZodObject<{
|
|
177
|
+
name: z.ZodOptional<z.ZodString>;
|
|
178
|
+
code: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
179
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
180
|
+
status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
181
|
+
draft: "draft";
|
|
182
|
+
active: "active";
|
|
183
|
+
archived: "archived";
|
|
184
|
+
}>>>;
|
|
185
|
+
isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
186
|
+
sortOrder: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
187
|
+
availableFrom: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
188
|
+
availableTo: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
189
|
+
}, z.core.$strip>;
|
|
190
|
+
export declare const productOptionListQuerySchema: z.ZodObject<{
|
|
191
|
+
productId: z.ZodOptional<z.ZodString>;
|
|
192
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
193
|
+
draft: "draft";
|
|
194
|
+
active: "active";
|
|
195
|
+
archived: "archived";
|
|
196
|
+
}>>;
|
|
197
|
+
limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
198
|
+
offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
199
|
+
}, z.core.$strip>;
|
|
200
|
+
export type InsertProductOption = z.infer<typeof insertProductOptionSchema>;
|
|
201
|
+
export type UpdateProductOption = z.infer<typeof updateProductOptionSchema>;
|
|
202
|
+
export declare const insertOptionUnitSchema: z.ZodObject<{
|
|
203
|
+
name: z.ZodString;
|
|
204
|
+
code: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
205
|
+
description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
206
|
+
unitType: z.ZodDefault<z.ZodEnum<{
|
|
207
|
+
person: "person";
|
|
208
|
+
group: "group";
|
|
209
|
+
room: "room";
|
|
210
|
+
vehicle: "vehicle";
|
|
211
|
+
service: "service";
|
|
212
|
+
other: "other";
|
|
213
|
+
}>>;
|
|
214
|
+
minQuantity: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
215
|
+
maxQuantity: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
216
|
+
minAge: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
217
|
+
maxAge: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
218
|
+
occupancyMin: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
219
|
+
occupancyMax: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
220
|
+
isRequired: z.ZodDefault<z.ZodBoolean>;
|
|
221
|
+
isHidden: z.ZodDefault<z.ZodBoolean>;
|
|
222
|
+
sortOrder: z.ZodDefault<z.ZodNumber>;
|
|
223
|
+
}, z.core.$strip>;
|
|
224
|
+
export declare const updateOptionUnitSchema: z.ZodObject<{
|
|
225
|
+
name: z.ZodOptional<z.ZodString>;
|
|
226
|
+
code: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
227
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
|
|
228
|
+
unitType: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
229
|
+
person: "person";
|
|
230
|
+
group: "group";
|
|
231
|
+
room: "room";
|
|
232
|
+
vehicle: "vehicle";
|
|
233
|
+
service: "service";
|
|
234
|
+
other: "other";
|
|
235
|
+
}>>>;
|
|
236
|
+
minQuantity: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
237
|
+
maxQuantity: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
238
|
+
minAge: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
239
|
+
maxAge: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
240
|
+
occupancyMin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
241
|
+
occupancyMax: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
242
|
+
isRequired: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
243
|
+
isHidden: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
244
|
+
sortOrder: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
245
|
+
}, z.core.$strip>;
|
|
246
|
+
export declare const optionUnitListQuerySchema: z.ZodObject<{
|
|
247
|
+
optionId: z.ZodOptional<z.ZodString>;
|
|
248
|
+
unitType: z.ZodOptional<z.ZodEnum<{
|
|
249
|
+
person: "person";
|
|
250
|
+
group: "group";
|
|
251
|
+
room: "room";
|
|
252
|
+
vehicle: "vehicle";
|
|
253
|
+
service: "service";
|
|
254
|
+
other: "other";
|
|
255
|
+
}>>;
|
|
256
|
+
limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
257
|
+
offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
258
|
+
}, z.core.$strip>;
|
|
259
|
+
export type InsertOptionUnit = z.infer<typeof insertOptionUnitSchema>;
|
|
260
|
+
export type UpdateOptionUnit = z.infer<typeof updateOptionUnitSchema>;
|
|
261
|
+
export declare const insertVersionSchema: z.ZodObject<{
|
|
262
|
+
notes: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
263
|
+
}, z.core.$strip>;
|
|
264
|
+
export type InsertVersion = z.infer<typeof insertVersionSchema>;
|
|
265
|
+
export declare const insertProductNoteSchema: z.ZodObject<{
|
|
266
|
+
content: z.ZodString;
|
|
267
|
+
}, z.core.$strip>;
|
|
268
|
+
//# sourceMappingURL=validation-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-core.d.ts","sourceRoot":"","sources":["../src/validation-core.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,CAAC,EACF,MAAM,wBAAwB,CAAA;AA2B/B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAiD,CAAA;AACjF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA2D,CAAA;AAC3F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO9B,CAAA;AACF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAY/D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;iBAA0B,CAAA;AAChE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;iBAAoC,CAAA;AAC1E,eAAO,MAAM,4BAA4B;;;;;;;;;iBAKvC,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAiB3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAAuB,CAAA;AAC1D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAAiC,CAAA;AACpE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;iBAKpC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,mBAAmB;;iBAE9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,uBAAuB;;iBAElC,CAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { booleanQueryParam, optionUnitTypeSchema, productBookingModeSchema, productCapacityModeSchema, productOptionStatusSchema, productStatusSchema, productVisibilitySchema, typeIdSchema, z, } from "./validation-shared.js";
|
|
2
|
+
const productCoreSchema = z.object({
|
|
3
|
+
name: z.string().min(1).max(255),
|
|
4
|
+
status: productStatusSchema.default("draft"),
|
|
5
|
+
description: z.string().optional().nullable(),
|
|
6
|
+
bookingMode: productBookingModeSchema.default("date"),
|
|
7
|
+
capacityMode: productCapacityModeSchema.default("limited"),
|
|
8
|
+
timezone: z.string().max(100).optional().nullable(),
|
|
9
|
+
visibility: productVisibilitySchema.default("private"),
|
|
10
|
+
activated: z.boolean().default(false),
|
|
11
|
+
reservationTimeoutMinutes: z.number().int().min(0).optional().nullable(),
|
|
12
|
+
sellCurrency: z.string().min(3).max(3),
|
|
13
|
+
facilityId: z.string().optional().nullable(),
|
|
14
|
+
productTypeId: z.string().optional().nullable(),
|
|
15
|
+
startDate: z.string().optional().nullable(),
|
|
16
|
+
endDate: z.string().optional().nullable(),
|
|
17
|
+
pax: z.number().int().positive().optional().nullable(),
|
|
18
|
+
tags: z.array(z.string()).default([]),
|
|
19
|
+
});
|
|
20
|
+
const productPricingFields = {
|
|
21
|
+
sellAmountCents: z.number().int().min(0).optional().nullable(),
|
|
22
|
+
costAmountCents: z.number().int().min(0).optional().nullable(),
|
|
23
|
+
marginPercent: z.number().int().optional().nullable(),
|
|
24
|
+
};
|
|
25
|
+
export const insertProductSchema = productCoreSchema.extend(productPricingFields);
|
|
26
|
+
export const updateProductSchema = productCoreSchema.partial().extend(productPricingFields);
|
|
27
|
+
export const selectProductSchema = productCoreSchema.extend({
|
|
28
|
+
id: typeIdSchema("products"),
|
|
29
|
+
sellAmountCents: z.number().int().nullable(),
|
|
30
|
+
costAmountCents: z.number().int().nullable(),
|
|
31
|
+
marginPercent: z.number().int().nullable(),
|
|
32
|
+
createdAt: z.coerce.date(),
|
|
33
|
+
updatedAt: z.coerce.date(),
|
|
34
|
+
});
|
|
35
|
+
export const productListQuerySchema = z.object({
|
|
36
|
+
status: productStatusSchema.optional(),
|
|
37
|
+
bookingMode: productBookingModeSchema.optional(),
|
|
38
|
+
visibility: productVisibilitySchema.optional(),
|
|
39
|
+
activated: booleanQueryParam.optional(),
|
|
40
|
+
facilityId: z.string().optional(),
|
|
41
|
+
search: z.string().optional(),
|
|
42
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
43
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
44
|
+
});
|
|
45
|
+
const productOptionCoreSchema = z.object({
|
|
46
|
+
name: z.string().min(1).max(255),
|
|
47
|
+
code: z.string().max(100).optional().nullable(),
|
|
48
|
+
description: z.string().optional().nullable(),
|
|
49
|
+
status: productOptionStatusSchema.default("draft"),
|
|
50
|
+
isDefault: z.boolean().default(false),
|
|
51
|
+
sortOrder: z.number().int().default(0),
|
|
52
|
+
availableFrom: z.string().optional().nullable(),
|
|
53
|
+
availableTo: z.string().optional().nullable(),
|
|
54
|
+
});
|
|
55
|
+
export const insertProductOptionSchema = productOptionCoreSchema;
|
|
56
|
+
export const updateProductOptionSchema = productOptionCoreSchema.partial();
|
|
57
|
+
export const productOptionListQuerySchema = z.object({
|
|
58
|
+
productId: z.string().optional(),
|
|
59
|
+
status: productOptionStatusSchema.optional(),
|
|
60
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
61
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
62
|
+
});
|
|
63
|
+
const optionUnitCoreSchema = z.object({
|
|
64
|
+
name: z.string().min(1).max(255),
|
|
65
|
+
code: z.string().max(100).optional().nullable(),
|
|
66
|
+
description: z.string().optional().nullable(),
|
|
67
|
+
unitType: optionUnitTypeSchema.default("person"),
|
|
68
|
+
minQuantity: z.number().int().min(0).optional().nullable(),
|
|
69
|
+
maxQuantity: z.number().int().min(0).optional().nullable(),
|
|
70
|
+
minAge: z.number().int().min(0).optional().nullable(),
|
|
71
|
+
maxAge: z.number().int().min(0).optional().nullable(),
|
|
72
|
+
occupancyMin: z.number().int().min(0).optional().nullable(),
|
|
73
|
+
occupancyMax: z.number().int().min(0).optional().nullable(),
|
|
74
|
+
isRequired: z.boolean().default(false),
|
|
75
|
+
isHidden: z.boolean().default(false),
|
|
76
|
+
sortOrder: z.number().int().default(0),
|
|
77
|
+
});
|
|
78
|
+
export const insertOptionUnitSchema = optionUnitCoreSchema;
|
|
79
|
+
export const updateOptionUnitSchema = optionUnitCoreSchema.partial();
|
|
80
|
+
export const optionUnitListQuerySchema = z.object({
|
|
81
|
+
optionId: z.string().optional(),
|
|
82
|
+
unitType: optionUnitTypeSchema.optional(),
|
|
83
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
84
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
85
|
+
});
|
|
86
|
+
export const insertVersionSchema = z.object({
|
|
87
|
+
notes: z.string().max(10000).optional().nullable(),
|
|
88
|
+
});
|
|
89
|
+
export const insertProductNoteSchema = z.object({
|
|
90
|
+
content: z.string().min(1).max(10000),
|
|
91
|
+
});
|