@voyantjs/facilities 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 +109 -0
- package/README.md +41 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/routes.d.ts +1386 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +224 -0
- package/dist/schema.d.ts +1303 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +249 -0
- package/dist/service.d.ts +585 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +601 -0
- package/dist/validation.d.ts +676 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +208 -0
- package/package.json +52 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const paginationSchema = z.object({
|
|
3
|
+
limit: z.coerce.number().int().min(1).max(200).default(50),
|
|
4
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
5
|
+
});
|
|
6
|
+
export const facilityKindSchema = z.enum([
|
|
7
|
+
"property",
|
|
8
|
+
"hotel",
|
|
9
|
+
"resort",
|
|
10
|
+
"venue",
|
|
11
|
+
"meeting_point",
|
|
12
|
+
"transfer_hub",
|
|
13
|
+
"airport",
|
|
14
|
+
"station",
|
|
15
|
+
"marina",
|
|
16
|
+
"camp",
|
|
17
|
+
"lodge",
|
|
18
|
+
"office",
|
|
19
|
+
"attraction",
|
|
20
|
+
"restaurant",
|
|
21
|
+
"other",
|
|
22
|
+
]);
|
|
23
|
+
export const facilityStatusSchema = z.enum(["active", "inactive", "archived"]);
|
|
24
|
+
export const facilityOwnerTypeSchema = z.enum(["supplier", "organization", "internal", "other"]);
|
|
25
|
+
export const facilityContactRoleSchema = z.enum([
|
|
26
|
+
"general",
|
|
27
|
+
"reservations",
|
|
28
|
+
"operations",
|
|
29
|
+
"front_desk",
|
|
30
|
+
"sales",
|
|
31
|
+
"emergency",
|
|
32
|
+
"other",
|
|
33
|
+
]);
|
|
34
|
+
export const facilityFeatureCategorySchema = z.enum([
|
|
35
|
+
"amenity",
|
|
36
|
+
"accessibility",
|
|
37
|
+
"security",
|
|
38
|
+
"service",
|
|
39
|
+
"policy",
|
|
40
|
+
"other",
|
|
41
|
+
]);
|
|
42
|
+
export const facilityDayOfWeekSchema = z.enum([
|
|
43
|
+
"monday",
|
|
44
|
+
"tuesday",
|
|
45
|
+
"wednesday",
|
|
46
|
+
"thursday",
|
|
47
|
+
"friday",
|
|
48
|
+
"saturday",
|
|
49
|
+
"sunday",
|
|
50
|
+
]);
|
|
51
|
+
export const propertyTypeSchema = z.enum([
|
|
52
|
+
"hotel",
|
|
53
|
+
"resort",
|
|
54
|
+
"villa",
|
|
55
|
+
"apartment",
|
|
56
|
+
"hostel",
|
|
57
|
+
"lodge",
|
|
58
|
+
"camp",
|
|
59
|
+
"other",
|
|
60
|
+
]);
|
|
61
|
+
export const propertyGroupTypeSchema = z.enum([
|
|
62
|
+
"chain",
|
|
63
|
+
"brand",
|
|
64
|
+
"management_company",
|
|
65
|
+
"collection",
|
|
66
|
+
"portfolio",
|
|
67
|
+
"cluster",
|
|
68
|
+
"other",
|
|
69
|
+
]);
|
|
70
|
+
export const propertyGroupStatusSchema = z.enum(["active", "inactive", "archived"]);
|
|
71
|
+
export const propertyGroupMembershipRoleSchema = z.enum([
|
|
72
|
+
"member",
|
|
73
|
+
"flagship",
|
|
74
|
+
"managed",
|
|
75
|
+
"franchise",
|
|
76
|
+
"other",
|
|
77
|
+
]);
|
|
78
|
+
export const facilityCoreSchema = z.object({
|
|
79
|
+
parentFacilityId: z.string().nullable().optional(),
|
|
80
|
+
ownerType: facilityOwnerTypeSchema.nullable().optional(),
|
|
81
|
+
ownerId: z.string().nullable().optional(),
|
|
82
|
+
kind: facilityKindSchema,
|
|
83
|
+
status: facilityStatusSchema.default("active"),
|
|
84
|
+
name: z.string().min(1).max(255),
|
|
85
|
+
code: z.string().max(100).nullable().optional(),
|
|
86
|
+
description: z.string().nullable().optional(),
|
|
87
|
+
timezone: z.string().max(100).nullable().optional(),
|
|
88
|
+
addressLine1: z.string().nullable().optional(),
|
|
89
|
+
addressLine2: z.string().nullable().optional(),
|
|
90
|
+
city: z.string().nullable().optional(),
|
|
91
|
+
region: z.string().nullable().optional(),
|
|
92
|
+
country: z.string().nullable().optional(),
|
|
93
|
+
postalCode: z.string().nullable().optional(),
|
|
94
|
+
latitude: z.number().nullable().optional(),
|
|
95
|
+
longitude: z.number().nullable().optional(),
|
|
96
|
+
tags: z.array(z.string()).default([]),
|
|
97
|
+
});
|
|
98
|
+
export const insertFacilitySchema = facilityCoreSchema;
|
|
99
|
+
export const updateFacilitySchema = facilityCoreSchema.partial();
|
|
100
|
+
export const facilityListQuerySchema = paginationSchema.extend({
|
|
101
|
+
kind: facilityKindSchema.optional(),
|
|
102
|
+
status: facilityStatusSchema.optional(),
|
|
103
|
+
ownerType: facilityOwnerTypeSchema.optional(),
|
|
104
|
+
ownerId: z.string().optional(),
|
|
105
|
+
parentFacilityId: z.string().optional(),
|
|
106
|
+
country: z.string().optional(),
|
|
107
|
+
search: z.string().optional(),
|
|
108
|
+
});
|
|
109
|
+
export const facilityContactCoreSchema = z.object({
|
|
110
|
+
role: facilityContactRoleSchema.default("general"),
|
|
111
|
+
name: z.string().min(1).max(255),
|
|
112
|
+
email: z.string().email().nullable().optional(),
|
|
113
|
+
phone: z.string().max(50).nullable().optional(),
|
|
114
|
+
notes: z.string().nullable().optional(),
|
|
115
|
+
isPrimary: z.boolean().default(false),
|
|
116
|
+
});
|
|
117
|
+
export const insertFacilityContactSchema = facilityContactCoreSchema;
|
|
118
|
+
export const updateFacilityContactSchema = facilityContactCoreSchema.partial();
|
|
119
|
+
export const facilityContactListQuerySchema = paginationSchema.extend({
|
|
120
|
+
facilityId: z.string().optional(),
|
|
121
|
+
role: facilityContactRoleSchema.optional(),
|
|
122
|
+
});
|
|
123
|
+
export const facilityFeatureCoreSchema = z.object({
|
|
124
|
+
category: facilityFeatureCategorySchema.default("amenity"),
|
|
125
|
+
code: z.string().max(100).nullable().optional(),
|
|
126
|
+
name: z.string().min(1).max(255),
|
|
127
|
+
description: z.string().nullable().optional(),
|
|
128
|
+
valueText: z.string().nullable().optional(),
|
|
129
|
+
highlighted: z.boolean().default(false),
|
|
130
|
+
sortOrder: z.number().int().default(0),
|
|
131
|
+
});
|
|
132
|
+
export const insertFacilityFeatureSchema = facilityFeatureCoreSchema;
|
|
133
|
+
export const updateFacilityFeatureSchema = facilityFeatureCoreSchema.partial();
|
|
134
|
+
export const facilityFeatureListQuerySchema = paginationSchema.extend({
|
|
135
|
+
facilityId: z.string().optional(),
|
|
136
|
+
category: facilityFeatureCategorySchema.optional(),
|
|
137
|
+
});
|
|
138
|
+
export const facilityOperationScheduleCoreSchema = z.object({
|
|
139
|
+
dayOfWeek: facilityDayOfWeekSchema.nullable().optional(),
|
|
140
|
+
validFrom: z.string().date().nullable().optional(),
|
|
141
|
+
validTo: z.string().date().nullable().optional(),
|
|
142
|
+
opensAt: z.string().nullable().optional(),
|
|
143
|
+
closesAt: z.string().nullable().optional(),
|
|
144
|
+
closed: z.boolean().default(false),
|
|
145
|
+
notes: z.string().nullable().optional(),
|
|
146
|
+
});
|
|
147
|
+
export const insertFacilityOperationScheduleSchema = facilityOperationScheduleCoreSchema;
|
|
148
|
+
export const updateFacilityOperationScheduleSchema = facilityOperationScheduleCoreSchema.partial();
|
|
149
|
+
export const facilityOperationScheduleListQuerySchema = paginationSchema.extend({
|
|
150
|
+
facilityId: z.string().optional(),
|
|
151
|
+
dayOfWeek: facilityDayOfWeekSchema.optional(),
|
|
152
|
+
});
|
|
153
|
+
export const propertyCoreSchema = z.object({
|
|
154
|
+
facilityId: z.string(),
|
|
155
|
+
propertyType: propertyTypeSchema.default("hotel"),
|
|
156
|
+
brandName: z.string().nullable().optional(),
|
|
157
|
+
groupName: z.string().nullable().optional(),
|
|
158
|
+
rating: z.number().int().min(0).max(10).nullable().optional(),
|
|
159
|
+
ratingScale: z.number().int().min(1).max(10).nullable().optional(),
|
|
160
|
+
checkInTime: z.string().nullable().optional(),
|
|
161
|
+
checkOutTime: z.string().nullable().optional(),
|
|
162
|
+
policyNotes: z.string().nullable().optional(),
|
|
163
|
+
amenityNotes: z.string().nullable().optional(),
|
|
164
|
+
});
|
|
165
|
+
export const insertPropertySchema = propertyCoreSchema;
|
|
166
|
+
export const updatePropertySchema = propertyCoreSchema.partial();
|
|
167
|
+
export const propertyListQuerySchema = paginationSchema.extend({
|
|
168
|
+
facilityId: z.string().optional(),
|
|
169
|
+
propertyType: propertyTypeSchema.optional(),
|
|
170
|
+
groupName: z.string().optional(),
|
|
171
|
+
search: z.string().optional(),
|
|
172
|
+
});
|
|
173
|
+
export const propertyGroupCoreSchema = z.object({
|
|
174
|
+
parentGroupId: z.string().nullable().optional(),
|
|
175
|
+
groupType: propertyGroupTypeSchema.default("chain"),
|
|
176
|
+
status: propertyGroupStatusSchema.default("active"),
|
|
177
|
+
name: z.string().min(1).max(255),
|
|
178
|
+
code: z.string().max(100).nullable().optional(),
|
|
179
|
+
brandName: z.string().nullable().optional(),
|
|
180
|
+
legalName: z.string().nullable().optional(),
|
|
181
|
+
website: z.string().url().nullable().optional(),
|
|
182
|
+
notes: z.string().nullable().optional(),
|
|
183
|
+
metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
184
|
+
});
|
|
185
|
+
export const insertPropertyGroupSchema = propertyGroupCoreSchema;
|
|
186
|
+
export const updatePropertyGroupSchema = propertyGroupCoreSchema.partial();
|
|
187
|
+
export const propertyGroupListQuerySchema = paginationSchema.extend({
|
|
188
|
+
parentGroupId: z.string().optional(),
|
|
189
|
+
groupType: propertyGroupTypeSchema.optional(),
|
|
190
|
+
status: propertyGroupStatusSchema.optional(),
|
|
191
|
+
search: z.string().optional(),
|
|
192
|
+
});
|
|
193
|
+
export const propertyGroupMemberCoreSchema = z.object({
|
|
194
|
+
groupId: z.string(),
|
|
195
|
+
propertyId: z.string(),
|
|
196
|
+
membershipRole: propertyGroupMembershipRoleSchema.default("member"),
|
|
197
|
+
isPrimary: z.boolean().default(false),
|
|
198
|
+
validFrom: z.string().date().nullable().optional(),
|
|
199
|
+
validTo: z.string().date().nullable().optional(),
|
|
200
|
+
notes: z.string().nullable().optional(),
|
|
201
|
+
});
|
|
202
|
+
export const insertPropertyGroupMemberSchema = propertyGroupMemberCoreSchema;
|
|
203
|
+
export const updatePropertyGroupMemberSchema = propertyGroupMemberCoreSchema.partial();
|
|
204
|
+
export const propertyGroupMemberListQuerySchema = paginationSchema.extend({
|
|
205
|
+
groupId: z.string().optional(),
|
|
206
|
+
propertyId: z.string().optional(),
|
|
207
|
+
membershipRole: propertyGroupMembershipRoleSchema.optional(),
|
|
208
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@voyantjs/facilities",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "FSL-1.1-Apache-2.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"./schema": {
|
|
12
|
+
"types": "./dist/schema.d.ts",
|
|
13
|
+
"import": "./dist/schema.js"
|
|
14
|
+
},
|
|
15
|
+
"./validation": {
|
|
16
|
+
"types": "./dist/validation.d.ts",
|
|
17
|
+
"import": "./dist/validation.js"
|
|
18
|
+
},
|
|
19
|
+
"./routes": {
|
|
20
|
+
"types": "./dist/routes.d.ts",
|
|
21
|
+
"import": "./dist/routes.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"drizzle-orm": "^0.45.2",
|
|
26
|
+
"hono": "^4.12.10",
|
|
27
|
+
"zod": "^4.3.6",
|
|
28
|
+
"@voyantjs/core": "0.1.0",
|
|
29
|
+
"@voyantjs/db": "0.1.0",
|
|
30
|
+
"@voyantjs/identity": "0.1.0",
|
|
31
|
+
"@voyantjs/hono": "0.1.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"typescript": "^6.0.2",
|
|
35
|
+
"@voyantjs/voyant-typescript-config": "0.1.0"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"dist"
|
|
39
|
+
],
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"lint": "biome check src/",
|
|
46
|
+
"test": "vitest run",
|
|
47
|
+
"build": "tsc -p tsconfig.json",
|
|
48
|
+
"clean": "rm -rf dist"
|
|
49
|
+
},
|
|
50
|
+
"main": "./dist/index.js",
|
|
51
|
+
"types": "./dist/index.d.ts"
|
|
52
|
+
}
|