@voyant-travel/accommodations 0.107.0 → 0.108.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.
@@ -104,7 +104,7 @@ export declare const roomBlockAdminRoutes: import("hono/hono-base").HonoBase<Env
104
104
  totalPickedUp: number;
105
105
  totalReleased: number;
106
106
  totalRemaining: number;
107
- pickupProgress: import("./service-room-blocks.js").PickupProgress;
107
+ pickupProgress: import("@voyant-travel/allotments").PickupProgress;
108
108
  } | null;
109
109
  };
110
110
  };
@@ -139,7 +139,7 @@ export declare const roomBlockAdminRoutes: import("hono/hono-base").HonoBase<Env
139
139
  totalPickedUp: number;
140
140
  totalReleased: number;
141
141
  totalRemaining: number;
142
- pickupProgress: import("./service-room-blocks.js").PickupProgress;
142
+ pickupProgress: import("@voyant-travel/allotments").PickupProgress;
143
143
  } | null;
144
144
  };
145
145
  outputFormat: "json";
@@ -1 +1 @@
1
- {"version":3,"file":"schema-room-blocks.d.ts","sourceRoot":"","sources":["../src/schema-room-blocks.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;GAUG;AAMH,eAAO,MAAM,mBAAmB,4GAO9B,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCtB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsB3B,CAAA;AAGD,eAAO,MAAM,yBAAyB,8DAA6D,CAAA;AAEnG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6B5B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,YAAY,CAAA;AACtD,MAAM,MAAM,YAAY,GAAG,OAAO,UAAU,CAAC,YAAY,CAAA;AACzD,MAAM,MAAM,cAAc,GAAG,OAAO,eAAe,CAAC,YAAY,CAAA;AAChE,MAAM,MAAM,iBAAiB,GAAG,OAAO,eAAe,CAAC,YAAY,CAAA;AACnE,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAA;AAClE,MAAM,MAAM,kBAAkB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAA"}
1
+ {"version":3,"file":"schema-room-blocks.d.ts","sourceRoot":"","sources":["../src/schema-room-blocks.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;GAUG;AAMH,eAAO,MAAM,mBAAmB,4GAAwD,CAAA;AAExF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCtB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsB3B,CAAA;AAGD,eAAO,MAAM,yBAAyB,8DAGrC,CAAA;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6B5B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,YAAY,CAAA;AACtD,MAAM,MAAM,YAAY,GAAG,OAAO,UAAU,CAAC,YAAY,CAAA;AACzD,MAAM,MAAM,cAAc,GAAG,OAAO,eAAe,CAAC,YAAY,CAAA;AAChE,MAAM,MAAM,iBAAiB,GAAG,OAAO,eAAe,CAAC,YAAY,CAAA;AACnE,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAA;AAClE,MAAM,MAAM,kBAAkB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { ALLOTMENT_PICKUP_STATUSES, ALLOTMENT_STATUSES } from "@voyant-travel/allotments";
1
2
  import { typeId, typeIdRef } from "@voyant-travel/db/lib/typeid-column";
2
3
  import { sql } from "drizzle-orm";
3
4
  import { check, date, index, integer, jsonb, pgEnum, pgTable, text, timestamp, uniqueIndex, } from "drizzle-orm/pg-core";
@@ -18,14 +19,7 @@ import { roomTypes } from "./schema-inventory.js";
18
19
  // (none / partial / full) is DERIVED at read time from room_block_nights
19
20
  // counters — never a stored header status — so the header can never drift
20
21
  // from the nightly ledger.
21
- export const roomBlockStatusEnum = pgEnum("hotel_room_block_status", [
22
- "inquiry",
23
- "held",
24
- "confirmed",
25
- "released",
26
- "cancelled",
27
- "expired",
28
- ]);
22
+ export const roomBlockStatusEnum = pgEnum("hotel_room_block_status", ALLOTMENT_STATUSES);
29
23
  export const roomBlocks = pgTable("room_blocks", {
30
24
  id: typeId("room_blocks"),
31
25
  // Cross-package → loose columns + defineLink at the deployment:
@@ -80,7 +74,7 @@ export const roomBlockNights = pgTable("room_block_nights", {
80
74
  check("ck_room_block_nights_capacity", sql `rooms_picked_up + rooms_released <= rooms_held`),
81
75
  ]);
82
76
  // The pickup ledger is append-only; reversal compensates rather than deletes.
83
- export const roomBlockPickupStatusEnum = pgEnum("room_block_pickup_status", ["active", "reversed"]);
77
+ export const roomBlockPickupStatusEnum = pgEnum("room_block_pickup_status", ALLOTMENT_PICKUP_STATUSES);
84
78
  export const roomBlockPickups = pgTable("room_block_pickups", {
85
79
  id: typeId("room_block_pickups"),
86
80
  blockId: typeIdRef("block_id")
@@ -12,12 +12,12 @@
12
12
  * progress (none / partial / full) is DERIVED from the counters at read time,
13
13
  * never stored on the block header.
14
14
  */
15
+ import { type PickupProgress } from "@voyant-travel/allotments";
15
16
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
16
17
  import { type RoomBlock, type RoomBlockPickup } from "./schema-room-blocks.js";
17
18
  /**
18
- * The night dates a stay occupies: each date from `checkIn` (inclusive) to
19
- * `checkOut` (exclusive). Dates are `YYYY-MM-DD`; parsed as UTC to avoid
20
- * timezone drift across the day boundary.
19
+ * The night dates a stay occupies (inclusive check-in exclusive check-out).
20
+ * Thin alias over the shared allotment slot enumeration. See @voyant-travel/allotments.
21
21
  */
22
22
  export declare function eachNight(checkIn: string, checkOut: string): string[];
23
23
  export interface CreateRoomBlockInput {
@@ -112,7 +112,7 @@ export type RoomBlockCutoffOutcome = {
112
112
  * released` per night, so `remaining` falls to zero for unpicked inventory.
113
113
  */
114
114
  export declare function releaseRoomBlockAtCutoff(db: PostgresJsDatabase, input: RoomBlockCutoffInput): Promise<RoomBlockCutoffOutcome>;
115
- export type PickupProgress = "none" | "partial" | "full";
115
+ export type { PickupProgress } from "@voyant-travel/allotments";
116
116
  export interface RoomBlockSummary {
117
117
  blockId: string;
118
118
  status: RoomBlock["status"];
@@ -1 +1 @@
1
- {"version":3,"file":"service-room-blocks.d.ts","sourceRoot":"","sources":["../src/service-room-blocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-room-blocks.d.ts","sourceRoot":"","sources":["../src/service-room-blocks.ts"],"names":[],"mappings":"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"}
@@ -12,25 +12,15 @@
12
12
  * progress (none / partial / full) is DERIVED from the counters at read time,
13
13
  * never stored on the block header.
14
14
  */
15
+ import { allotmentPickupProgress, allotmentRemaining, eachDateInRange, isClosedAllotmentStatus, } from "@voyant-travel/allotments";
15
16
  import { and, eq, inArray, sql } from "drizzle-orm";
16
17
  import { roomBlockNights, roomBlockPickups, roomBlocks, } from "./schema-room-blocks.js";
17
- /** Block statuses that can no longer accrue pickups. */
18
- const CLOSED_BLOCK_STATUSES = ["released", "cancelled", "expired"];
19
18
  /**
20
- * The night dates a stay occupies: each date from `checkIn` (inclusive) to
21
- * `checkOut` (exclusive). Dates are `YYYY-MM-DD`; parsed as UTC to avoid
22
- * timezone drift across the day boundary.
19
+ * The night dates a stay occupies (inclusive check-in exclusive check-out).
20
+ * Thin alias over the shared allotment slot enumeration. See @voyant-travel/allotments.
23
21
  */
24
22
  export function eachNight(checkIn, checkOut) {
25
- const start = new Date(`${checkIn}T00:00:00Z`);
26
- const end = new Date(`${checkOut}T00:00:00Z`);
27
- if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime()))
28
- return [];
29
- const nights = [];
30
- for (let d = start; d < end; d.setUTCDate(d.getUTCDate() + 1)) {
31
- nights.push(d.toISOString().slice(0, 10));
32
- }
33
- return nights;
23
+ return eachDateInRange(checkIn, checkOut);
34
24
  }
35
25
  /** Create a block header (starts in `inquiry`; nights are set separately). */
36
26
  export async function createRoomBlock(db, input) {
@@ -82,7 +72,7 @@ export async function pickupRoomBlock(db, input) {
82
72
  .limit(1);
83
73
  if (!block)
84
74
  return { status: "block_not_found" };
85
- if (CLOSED_BLOCK_STATUSES.includes(block.status)) {
75
+ if (isClosedAllotmentStatus(block.status)) {
86
76
  return { status: "block_not_active" };
87
77
  }
88
78
  // Idempotency: an active pickup already exists for this stay item.
@@ -240,8 +230,9 @@ export async function summarizeRoomBlock(db, blockId) {
240
230
  totalPickedUp += n.roomsPickedUp;
241
231
  totalReleased += n.roomsReleased;
242
232
  }
243
- const totalRemaining = totalHeld - totalPickedUp - totalReleased;
244
- const pickupProgress = totalPickedUp === 0 ? "none" : totalRemaining === 0 ? "full" : "partial";
233
+ const counters = { held: totalHeld, pickedUp: totalPickedUp, released: totalReleased };
234
+ const totalRemaining = allotmentRemaining(counters);
235
+ const pickupProgress = allotmentPickupProgress(counters);
245
236
  return {
246
237
  blockId: block.id,
247
238
  status: block.status,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/accommodations",
3
- "version": "0.107.0",
3
+ "version": "0.108.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -60,12 +60,13 @@
60
60
  "hono": "^4.12.10",
61
61
  "zod": "^4.3.6",
62
62
  "@voyant-travel/accommodations-contracts": "^0.105.3",
63
- "@voyant-travel/bookings": "^0.135.0",
64
- "@voyant-travel/catalog": "^0.133.0",
63
+ "@voyant-travel/allotments": "^0.2.0",
64
+ "@voyant-travel/bookings": "^0.136.0",
65
+ "@voyant-travel/catalog": "^0.134.0",
65
66
  "@voyant-travel/core": "^0.111.0",
66
- "@voyant-travel/db": "^0.109.1",
67
- "@voyant-travel/hono": "^0.116.0",
68
- "@voyant-travel/operations": "^0.4.0"
67
+ "@voyant-travel/db": "^0.109.2",
68
+ "@voyant-travel/hono": "^0.116.1",
69
+ "@voyant-travel/operations": "^0.5.0"
69
70
  },
70
71
  "devDependencies": {
71
72
  "drizzle-kit": "^0.31.10",