@voyant-travel/charters 0.117.2

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.
Files changed (108) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +16 -0
  3. package/dist/adapters/index.d.ts +254 -0
  4. package/dist/adapters/index.d.ts.map +1 -0
  5. package/dist/adapters/index.js +16 -0
  6. package/dist/adapters/memoize.d.ts +28 -0
  7. package/dist/adapters/memoize.d.ts.map +1 -0
  8. package/dist/adapters/memoize.js +121 -0
  9. package/dist/adapters/mock.d.ts +50 -0
  10. package/dist/adapters/mock.d.ts.map +1 -0
  11. package/dist/adapters/mock.js +194 -0
  12. package/dist/adapters/registry.d.ts +24 -0
  13. package/dist/adapters/registry.d.ts.map +1 -0
  14. package/dist/adapters/registry.js +40 -0
  15. package/dist/booking-extension.d.ts +895 -0
  16. package/dist/booking-extension.d.ts.map +1 -0
  17. package/dist/booking-extension.js +339 -0
  18. package/dist/catalog-policy.d.ts +23 -0
  19. package/dist/catalog-policy.d.ts.map +1 -0
  20. package/dist/catalog-policy.js +400 -0
  21. package/dist/content-shape.d.ts +5 -0
  22. package/dist/content-shape.d.ts.map +1 -0
  23. package/dist/content-shape.js +13 -0
  24. package/dist/draft-shape.d.ts +29 -0
  25. package/dist/draft-shape.d.ts.map +1 -0
  26. package/dist/draft-shape.js +63 -0
  27. package/dist/index.d.ts +31 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +55 -0
  30. package/dist/lib/key.d.ts +22 -0
  31. package/dist/lib/key.d.ts.map +1 -0
  32. package/dist/lib/key.js +24 -0
  33. package/dist/routes-public.d.ts +785 -0
  34. package/dist/routes-public.d.ts.map +1 -0
  35. package/dist/routes-public.js +234 -0
  36. package/dist/routes.d.ts +1744 -0
  37. package/dist/routes.d.ts.map +1 -0
  38. package/dist/routes.js +543 -0
  39. package/dist/schema-core.d.ts +815 -0
  40. package/dist/schema-core.d.ts.map +1 -0
  41. package/dist/schema-core.js +98 -0
  42. package/dist/schema-itinerary.d.ts +239 -0
  43. package/dist/schema-itinerary.d.ts.map +1 -0
  44. package/dist/schema-itinerary.js +30 -0
  45. package/dist/schema-pricing.d.ts +385 -0
  46. package/dist/schema-pricing.d.ts.map +1 -0
  47. package/dist/schema-pricing.js +62 -0
  48. package/dist/schema-shared.d.ts +8 -0
  49. package/dist/schema-shared.d.ts.map +1 -0
  50. package/dist/schema-shared.js +37 -0
  51. package/dist/schema-sourced-content.d.ts +253 -0
  52. package/dist/schema-sourced-content.d.ts.map +1 -0
  53. package/dist/schema-sourced-content.js +44 -0
  54. package/dist/schema-yachts.d.ts +367 -0
  55. package/dist/schema-yachts.d.ts.map +1 -0
  56. package/dist/schema-yachts.js +30 -0
  57. package/dist/schema.d.ts +8 -0
  58. package/dist/schema.d.ts.map +1 -0
  59. package/dist/schema.js +7 -0
  60. package/dist/service-bookings-helpers.d.ts +20 -0
  61. package/dist/service-bookings-helpers.d.ts.map +1 -0
  62. package/dist/service-bookings-helpers.js +67 -0
  63. package/dist/service-bookings-local.d.ts +5 -0
  64. package/dist/service-bookings-local.d.ts.map +1 -0
  65. package/dist/service-bookings-local.js +177 -0
  66. package/dist/service-bookings-types.d.ts +88 -0
  67. package/dist/service-bookings-types.d.ts.map +1 -0
  68. package/dist/service-bookings-types.js +1 -0
  69. package/dist/service-bookings.d.ts +36 -0
  70. package/dist/service-bookings.d.ts.map +1 -0
  71. package/dist/service-bookings.js +267 -0
  72. package/dist/service-catalog-plane.d.ts +58 -0
  73. package/dist/service-catalog-plane.d.ts.map +1 -0
  74. package/dist/service-catalog-plane.js +145 -0
  75. package/dist/service-content-synthesizer.d.ts +42 -0
  76. package/dist/service-content-synthesizer.d.ts.map +1 -0
  77. package/dist/service-content-synthesizer.js +122 -0
  78. package/dist/service-content.d.ts +43 -0
  79. package/dist/service-content.d.ts.map +1 -0
  80. package/dist/service-content.js +248 -0
  81. package/dist/service-myba.d.ts +85 -0
  82. package/dist/service-myba.d.ts.map +1 -0
  83. package/dist/service-myba.js +88 -0
  84. package/dist/service-pricing.d.ts +64 -0
  85. package/dist/service-pricing.d.ts.map +1 -0
  86. package/dist/service-pricing.js +167 -0
  87. package/dist/service.d.ts +131 -0
  88. package/dist/service.d.ts.map +1 -0
  89. package/dist/service.js +279 -0
  90. package/dist/validation-core.d.ts +152 -0
  91. package/dist/validation-core.d.ts.map +1 -0
  92. package/dist/validation-core.js +66 -0
  93. package/dist/validation-itinerary.d.ts +43 -0
  94. package/dist/validation-itinerary.d.ts.map +1 -0
  95. package/dist/validation-itinerary.js +19 -0
  96. package/dist/validation-pricing.d.ts +103 -0
  97. package/dist/validation-pricing.d.ts.map +1 -0
  98. package/dist/validation-pricing.js +28 -0
  99. package/dist/validation-shared.d.ts +61 -0
  100. package/dist/validation-shared.d.ts.map +1 -0
  101. package/dist/validation-shared.js +60 -0
  102. package/dist/validation-yachts.d.ts +76 -0
  103. package/dist/validation-yachts.d.ts.map +1 -0
  104. package/dist/validation-yachts.js +36 -0
  105. package/dist/validation.d.ts +6 -0
  106. package/dist/validation.d.ts.map +1 -0
  107. package/dist/validation.js +5 -0
  108. package/package.json +116 -0
@@ -0,0 +1,385 @@
1
+ /**
2
+ * Per-suite pricing on a voyage. Charter pricing is flat — one row per suite
3
+ * per voyage, no occupancy variants and no fare codes (unlike cruises). The
4
+ * four explicit currency columns let SQL filter and order by price natively;
5
+ * tertiary currencies handle via FX at display time.
6
+ */
7
+ export declare const charterSuites: import("drizzle-orm/pg-core").PgTableWithColumns<{
8
+ name: "charter_suites";
9
+ schema: undefined;
10
+ columns: {
11
+ id: import("drizzle-orm/pg-core").PgColumn<{
12
+ name: string;
13
+ tableName: "charter_suites";
14
+ dataType: "string";
15
+ columnType: "PgText";
16
+ data: string;
17
+ driverParam: string;
18
+ notNull: true;
19
+ hasDefault: true;
20
+ isPrimaryKey: true;
21
+ isAutoincrement: false;
22
+ hasRuntimeDefault: true;
23
+ enumValues: [string, ...string[]];
24
+ baseColumn: never;
25
+ identity: undefined;
26
+ generated: undefined;
27
+ }, {}, {}>;
28
+ voyageId: import("drizzle-orm/pg-core").PgColumn<{
29
+ name: string;
30
+ tableName: "charter_suites";
31
+ dataType: "string";
32
+ columnType: "PgText";
33
+ data: string;
34
+ driverParam: string;
35
+ notNull: true;
36
+ hasDefault: false;
37
+ isPrimaryKey: false;
38
+ isAutoincrement: false;
39
+ hasRuntimeDefault: false;
40
+ enumValues: [string, ...string[]];
41
+ baseColumn: never;
42
+ identity: undefined;
43
+ generated: undefined;
44
+ }, {}, {}>;
45
+ suiteCode: import("drizzle-orm/pg-core").PgColumn<{
46
+ name: "suite_code";
47
+ tableName: "charter_suites";
48
+ dataType: "string";
49
+ columnType: "PgText";
50
+ data: string;
51
+ driverParam: string;
52
+ notNull: true;
53
+ hasDefault: false;
54
+ isPrimaryKey: false;
55
+ isAutoincrement: false;
56
+ hasRuntimeDefault: false;
57
+ enumValues: [string, ...string[]];
58
+ baseColumn: never;
59
+ identity: undefined;
60
+ generated: undefined;
61
+ }, {}, {}>;
62
+ suiteName: import("drizzle-orm/pg-core").PgColumn<{
63
+ name: "suite_name";
64
+ tableName: "charter_suites";
65
+ dataType: "string";
66
+ columnType: "PgText";
67
+ data: string;
68
+ driverParam: string;
69
+ notNull: true;
70
+ hasDefault: false;
71
+ isPrimaryKey: false;
72
+ isAutoincrement: false;
73
+ hasRuntimeDefault: false;
74
+ enumValues: [string, ...string[]];
75
+ baseColumn: never;
76
+ identity: undefined;
77
+ generated: undefined;
78
+ }, {}, {}>;
79
+ suiteCategory: import("drizzle-orm/pg-core").PgColumn<{
80
+ name: "suite_category";
81
+ tableName: "charter_suites";
82
+ dataType: "string";
83
+ columnType: "PgEnumColumn";
84
+ data: "standard" | "deluxe" | "suite" | "penthouse" | "owners" | "signature";
85
+ driverParam: string;
86
+ notNull: false;
87
+ hasDefault: false;
88
+ isPrimaryKey: false;
89
+ isAutoincrement: false;
90
+ hasRuntimeDefault: false;
91
+ enumValues: ["standard", "deluxe", "suite", "penthouse", "owners", "signature"];
92
+ baseColumn: never;
93
+ identity: undefined;
94
+ generated: undefined;
95
+ }, {}, {}>;
96
+ description: import("drizzle-orm/pg-core").PgColumn<{
97
+ name: "description";
98
+ tableName: "charter_suites";
99
+ dataType: "string";
100
+ columnType: "PgText";
101
+ data: string;
102
+ driverParam: string;
103
+ notNull: false;
104
+ hasDefault: false;
105
+ isPrimaryKey: false;
106
+ isAutoincrement: false;
107
+ hasRuntimeDefault: false;
108
+ enumValues: [string, ...string[]];
109
+ baseColumn: never;
110
+ identity: undefined;
111
+ generated: undefined;
112
+ }, {}, {}>;
113
+ squareFeet: import("drizzle-orm/pg-core").PgColumn<{
114
+ name: "square_feet";
115
+ tableName: "charter_suites";
116
+ dataType: "string";
117
+ columnType: "PgNumeric";
118
+ data: string;
119
+ driverParam: string;
120
+ notNull: false;
121
+ hasDefault: false;
122
+ isPrimaryKey: false;
123
+ isAutoincrement: false;
124
+ hasRuntimeDefault: false;
125
+ enumValues: undefined;
126
+ baseColumn: never;
127
+ identity: undefined;
128
+ generated: undefined;
129
+ }, {}, {}>;
130
+ images: import("drizzle-orm/pg-core").PgColumn<{
131
+ name: "images";
132
+ tableName: "charter_suites";
133
+ dataType: "json";
134
+ columnType: "PgJsonb";
135
+ data: string[];
136
+ driverParam: unknown;
137
+ notNull: false;
138
+ hasDefault: true;
139
+ isPrimaryKey: false;
140
+ isAutoincrement: false;
141
+ hasRuntimeDefault: false;
142
+ enumValues: undefined;
143
+ baseColumn: never;
144
+ identity: undefined;
145
+ generated: undefined;
146
+ }, {}, {
147
+ $type: string[];
148
+ }>;
149
+ floorplanImages: import("drizzle-orm/pg-core").PgColumn<{
150
+ name: "floorplan_images";
151
+ tableName: "charter_suites";
152
+ dataType: "json";
153
+ columnType: "PgJsonb";
154
+ data: string[];
155
+ driverParam: unknown;
156
+ notNull: false;
157
+ hasDefault: true;
158
+ isPrimaryKey: false;
159
+ isAutoincrement: false;
160
+ hasRuntimeDefault: false;
161
+ enumValues: undefined;
162
+ baseColumn: never;
163
+ identity: undefined;
164
+ generated: undefined;
165
+ }, {}, {
166
+ $type: string[];
167
+ }>;
168
+ maxGuests: import("drizzle-orm/pg-core").PgColumn<{
169
+ name: "max_guests";
170
+ tableName: "charter_suites";
171
+ dataType: "number";
172
+ columnType: "PgSmallInt";
173
+ data: number;
174
+ driverParam: string | number;
175
+ notNull: false;
176
+ hasDefault: false;
177
+ isPrimaryKey: false;
178
+ isAutoincrement: false;
179
+ hasRuntimeDefault: false;
180
+ enumValues: undefined;
181
+ baseColumn: never;
182
+ identity: undefined;
183
+ generated: undefined;
184
+ }, {}, {}>;
185
+ pricesByCurrency: import("drizzle-orm/pg-core").PgColumn<{
186
+ name: "prices_by_currency";
187
+ tableName: "charter_suites";
188
+ dataType: "json";
189
+ columnType: "PgJsonb";
190
+ data: Record<string, string>;
191
+ driverParam: unknown;
192
+ notNull: true;
193
+ hasDefault: true;
194
+ isPrimaryKey: false;
195
+ isAutoincrement: false;
196
+ hasRuntimeDefault: false;
197
+ enumValues: undefined;
198
+ baseColumn: never;
199
+ identity: undefined;
200
+ generated: undefined;
201
+ }, {}, {
202
+ $type: Record<string, string>;
203
+ }>;
204
+ portFeesByCurrency: import("drizzle-orm/pg-core").PgColumn<{
205
+ name: "port_fees_by_currency";
206
+ tableName: "charter_suites";
207
+ dataType: "json";
208
+ columnType: "PgJsonb";
209
+ data: Record<string, string>;
210
+ driverParam: unknown;
211
+ notNull: true;
212
+ hasDefault: true;
213
+ isPrimaryKey: false;
214
+ isAutoincrement: false;
215
+ hasRuntimeDefault: false;
216
+ enumValues: undefined;
217
+ baseColumn: never;
218
+ identity: undefined;
219
+ generated: undefined;
220
+ }, {}, {
221
+ $type: Record<string, string>;
222
+ }>;
223
+ availability: import("drizzle-orm/pg-core").PgColumn<{
224
+ name: "availability";
225
+ tableName: "charter_suites";
226
+ dataType: "string";
227
+ columnType: "PgEnumColumn";
228
+ data: "available" | "on_request" | "wait_list" | "sold_out" | "limited";
229
+ driverParam: string;
230
+ notNull: true;
231
+ hasDefault: true;
232
+ isPrimaryKey: false;
233
+ isAutoincrement: false;
234
+ hasRuntimeDefault: false;
235
+ enumValues: ["available", "limited", "on_request", "wait_list", "sold_out"];
236
+ baseColumn: never;
237
+ identity: undefined;
238
+ generated: undefined;
239
+ }, {}, {}>;
240
+ unitsAvailable: import("drizzle-orm/pg-core").PgColumn<{
241
+ name: "units_available";
242
+ tableName: "charter_suites";
243
+ dataType: "number";
244
+ columnType: "PgSmallInt";
245
+ data: number;
246
+ driverParam: string | number;
247
+ notNull: false;
248
+ hasDefault: false;
249
+ isPrimaryKey: false;
250
+ isAutoincrement: false;
251
+ hasRuntimeDefault: false;
252
+ enumValues: undefined;
253
+ baseColumn: never;
254
+ identity: undefined;
255
+ generated: undefined;
256
+ }, {}, {}>;
257
+ appointmentOnly: import("drizzle-orm/pg-core").PgColumn<{
258
+ name: "appointment_only";
259
+ tableName: "charter_suites";
260
+ dataType: "boolean";
261
+ columnType: "PgBoolean";
262
+ data: boolean;
263
+ driverParam: boolean;
264
+ notNull: true;
265
+ hasDefault: true;
266
+ isPrimaryKey: false;
267
+ isAutoincrement: false;
268
+ hasRuntimeDefault: false;
269
+ enumValues: undefined;
270
+ baseColumn: never;
271
+ identity: undefined;
272
+ generated: undefined;
273
+ }, {}, {}>;
274
+ notes: import("drizzle-orm/pg-core").PgColumn<{
275
+ name: "notes";
276
+ tableName: "charter_suites";
277
+ dataType: "string";
278
+ columnType: "PgText";
279
+ data: string;
280
+ driverParam: string;
281
+ notNull: false;
282
+ hasDefault: false;
283
+ isPrimaryKey: false;
284
+ isAutoincrement: false;
285
+ hasRuntimeDefault: false;
286
+ enumValues: [string, ...string[]];
287
+ baseColumn: never;
288
+ identity: undefined;
289
+ generated: undefined;
290
+ }, {}, {}>;
291
+ extra: import("drizzle-orm/pg-core").PgColumn<{
292
+ name: "extra";
293
+ tableName: "charter_suites";
294
+ dataType: "json";
295
+ columnType: "PgJsonb";
296
+ data: Record<string, unknown>;
297
+ driverParam: unknown;
298
+ notNull: false;
299
+ hasDefault: true;
300
+ isPrimaryKey: false;
301
+ isAutoincrement: false;
302
+ hasRuntimeDefault: false;
303
+ enumValues: undefined;
304
+ baseColumn: never;
305
+ identity: undefined;
306
+ generated: undefined;
307
+ }, {}, {
308
+ $type: Record<string, unknown>;
309
+ }>;
310
+ externalRefs: import("drizzle-orm/pg-core").PgColumn<{
311
+ name: "external_refs";
312
+ tableName: "charter_suites";
313
+ dataType: "json";
314
+ columnType: "PgJsonb";
315
+ data: Record<string, string>;
316
+ driverParam: unknown;
317
+ notNull: false;
318
+ hasDefault: true;
319
+ isPrimaryKey: false;
320
+ isAutoincrement: false;
321
+ hasRuntimeDefault: false;
322
+ enumValues: undefined;
323
+ baseColumn: never;
324
+ identity: undefined;
325
+ generated: undefined;
326
+ }, {}, {
327
+ $type: Record<string, string>;
328
+ }>;
329
+ lastSyncedAt: import("drizzle-orm/pg-core").PgColumn<{
330
+ name: "last_synced_at";
331
+ tableName: "charter_suites";
332
+ dataType: "date";
333
+ columnType: "PgTimestamp";
334
+ data: Date;
335
+ driverParam: string;
336
+ notNull: false;
337
+ hasDefault: false;
338
+ isPrimaryKey: false;
339
+ isAutoincrement: false;
340
+ hasRuntimeDefault: false;
341
+ enumValues: undefined;
342
+ baseColumn: never;
343
+ identity: undefined;
344
+ generated: undefined;
345
+ }, {}, {}>;
346
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
347
+ name: "created_at";
348
+ tableName: "charter_suites";
349
+ dataType: "date";
350
+ columnType: "PgTimestamp";
351
+ data: Date;
352
+ driverParam: string;
353
+ notNull: true;
354
+ hasDefault: true;
355
+ isPrimaryKey: false;
356
+ isAutoincrement: false;
357
+ hasRuntimeDefault: false;
358
+ enumValues: undefined;
359
+ baseColumn: never;
360
+ identity: undefined;
361
+ generated: undefined;
362
+ }, {}, {}>;
363
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
364
+ name: "updated_at";
365
+ tableName: "charter_suites";
366
+ dataType: "date";
367
+ columnType: "PgTimestamp";
368
+ data: Date;
369
+ driverParam: string;
370
+ notNull: true;
371
+ hasDefault: true;
372
+ isPrimaryKey: false;
373
+ isAutoincrement: false;
374
+ hasRuntimeDefault: false;
375
+ enumValues: undefined;
376
+ baseColumn: never;
377
+ identity: undefined;
378
+ generated: undefined;
379
+ }, {}, {}>;
380
+ };
381
+ dialect: "pg";
382
+ }>;
383
+ export type CharterSuite = typeof charterSuites.$inferSelect;
384
+ export type NewCharterSuite = typeof charterSuites.$inferInsert;
385
+ //# sourceMappingURL=schema-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-pricing.d.ts","sourceRoot":"","sources":["../src/schema-pricing.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2DzB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,aAAa,CAAC,YAAY,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,OAAO,aAAa,CAAC,YAAY,CAAA"}
@@ -0,0 +1,62 @@
1
+ import { typeId, typeIdRef } from "@voyant-travel/db/lib/typeid-column";
2
+ import { boolean, index, jsonb, numeric, pgTable, smallint, text, timestamp, uniqueIndex, } from "drizzle-orm/pg-core";
3
+ import { charterVoyages } from "./schema-core.js";
4
+ import { suiteAvailabilityEnum, suiteCategoryEnum } from "./schema-shared.js";
5
+ /**
6
+ * Per-suite pricing on a voyage. Charter pricing is flat — one row per suite
7
+ * per voyage, no occupancy variants and no fare codes (unlike cruises). The
8
+ * four explicit currency columns let SQL filter and order by price natively;
9
+ * tertiary currencies handle via FX at display time.
10
+ */
11
+ export const charterSuites = pgTable("charter_suites", {
12
+ id: typeId("charter_suites"),
13
+ voyageId: typeIdRef("voyage_id")
14
+ .notNull()
15
+ .references(() => charterVoyages.id, { onDelete: "cascade" }),
16
+ suiteCode: text("suite_code").notNull(),
17
+ suiteName: text("suite_name").notNull(),
18
+ suiteCategory: suiteCategoryEnum("suite_category"),
19
+ description: text("description"),
20
+ squareFeet: numeric("square_feet", { precision: 8, scale: 2 }),
21
+ images: jsonb("images").$type().default([]),
22
+ floorplanImages: jsonb("floorplan_images").$type().default([]),
23
+ /** Used at booking time to validate party size; not used for pricing math. */
24
+ maxGuests: smallint("max_guests"),
25
+ /**
26
+ * Per-currency flat suite price as a `{ "<ISO-4217>": "<numeric-string>" }`
27
+ * map. Numeric strings preserve trailing zeroes and dodge floating-point
28
+ * drift. Missing key means the suite isn't priced in that currency.
29
+ * Adding a new currency is a data-only change — no schema migration.
30
+ */
31
+ pricesByCurrency: jsonb("prices_by_currency")
32
+ .$type()
33
+ .notNull()
34
+ .default({}),
35
+ /**
36
+ * Optional per-currency port fee, separate from suite price. Same shape
37
+ * as `pricesByCurrency`.
38
+ */
39
+ portFeesByCurrency: jsonb("port_fees_by_currency")
40
+ .$type()
41
+ .notNull()
42
+ .default({}),
43
+ availability: suiteAvailabilityEnum("availability").notNull().default("available"),
44
+ unitsAvailable: smallint("units_available"),
45
+ appointmentOnly: boolean("appointment_only").notNull().default(false),
46
+ notes: text("notes"),
47
+ /** Per-brand quirks that don't fit the canonical schema. */
48
+ extra: jsonb("extra").$type().default({}),
49
+ externalRefs: jsonb("external_refs").$type().default({}),
50
+ lastSyncedAt: timestamp("last_synced_at", { withTimezone: true }),
51
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
52
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
53
+ }, (table) => [
54
+ uniqueIndex("uidx_charter_suites_voyage_code").on(table.voyageId, table.suiteCode),
55
+ index("idx_charter_suites_voyage_availability").on(table.voyageId, table.availability),
56
+ // Note: removed the previous (voyage_id, category, price_usd) composite
57
+ // index when prices moved into a jsonb map. Sort-by-price queries on
58
+ // the deployment's browse currency now use the GIN index implicitly via
59
+ // jsonb operators; if a per-currency btree becomes a hot path we can
60
+ // add an expression index on `(prices_by_currency ->> 'USD')::numeric`.
61
+ index("idx_charter_suites_voyage_category").on(table.voyageId, table.suiteCategory),
62
+ ]);
@@ -0,0 +1,8 @@
1
+ export declare const charterStatusEnum: import("drizzle-orm/pg-core").PgEnum<["draft", "awaiting_review", "live", "archived"]>;
2
+ export declare const charterSourceEnum: import("drizzle-orm/pg-core").PgEnum<["local", "external"]>;
3
+ export declare const yachtClassEnum: import("drizzle-orm/pg-core").PgEnum<["luxury_motor", "luxury_sailing", "expedition", "small_cruise"]>;
4
+ export declare const voyageSalesStatusEnum: import("drizzle-orm/pg-core").PgEnum<["open", "on_request", "wait_list", "sold_out", "closed"]>;
5
+ export declare const suiteCategoryEnum: import("drizzle-orm/pg-core").PgEnum<["standard", "deluxe", "suite", "penthouse", "owners", "signature"]>;
6
+ export declare const suiteAvailabilityEnum: import("drizzle-orm/pg-core").PgEnum<["available", "limited", "on_request", "wait_list", "sold_out"]>;
7
+ export declare const charterBookingModeEnum: import("drizzle-orm/pg-core").PgEnum<["per_suite", "whole_yacht"]>;
8
+ //# sourceMappingURL=schema-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-shared.d.ts","sourceRoot":"","sources":["../src/schema-shared.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,wFAK5B,CAAA;AAEF,eAAO,MAAM,iBAAiB,6DAAkD,CAAA;AAEhF,eAAO,MAAM,cAAc,wGAKzB,CAAA;AAEF,eAAO,MAAM,qBAAqB,iGAMhC,CAAA;AAEF,eAAO,MAAM,iBAAiB,2GAO5B,CAAA;AAEF,eAAO,MAAM,qBAAqB,uGAMhC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oEAA+D,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { pgEnum } from "drizzle-orm/pg-core";
2
+ export const charterStatusEnum = pgEnum("charter_status", [
3
+ "draft",
4
+ "awaiting_review",
5
+ "live",
6
+ "archived",
7
+ ]);
8
+ export const charterSourceEnum = pgEnum("charter_source", ["local", "external"]);
9
+ export const yachtClassEnum = pgEnum("charter_yacht_class", [
10
+ "luxury_motor",
11
+ "luxury_sailing",
12
+ "expedition",
13
+ "small_cruise",
14
+ ]);
15
+ export const voyageSalesStatusEnum = pgEnum("charter_voyage_sales_status", [
16
+ "open",
17
+ "on_request",
18
+ "wait_list",
19
+ "sold_out",
20
+ "closed",
21
+ ]);
22
+ export const suiteCategoryEnum = pgEnum("charter_suite_category", [
23
+ "standard",
24
+ "deluxe",
25
+ "suite",
26
+ "penthouse",
27
+ "owners",
28
+ "signature",
29
+ ]);
30
+ export const suiteAvailabilityEnum = pgEnum("charter_suite_availability", [
31
+ "available",
32
+ "limited",
33
+ "on_request",
34
+ "wait_list",
35
+ "sold_out",
36
+ ]);
37
+ export const charterBookingModeEnum = pgEnum("charter_booking_mode", ["per_suite", "whole_yacht"]);