@voyantjs/availability 0.52.1 → 0.52.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-allocation-automation.d.ts","sourceRoot":"","sources":["../src/service-allocation-automation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQ5B,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,yBAAyB,EAK/B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAe/F,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACtF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAMlF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,gBAAgB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAA;CACjC;AAED,wBAAsB,kCAAkC,CACtD,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAyC3C;AAED,wBAAsB,mCAAmC,CACvD,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA8C3B;AAED,wBAAsB,mCAAmC,CACvD,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM;;;UAeb;AAqBD,wBAAsB,kCAAkC,CACtD,EAAE,EAAE,kBAAkB,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,yBAAyB,EAChC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,0BAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"service-allocation-automation.d.ts","sourceRoot":"","sources":["../src/service-allocation-automation.ts"],"names":[],"mappings":"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"}
|
|
@@ -138,17 +138,17 @@ export async function autoMaterializeAllocationResources(db, slotId, input, opti
|
|
|
138
138
|
AND b.status IN ('draft', 'on_hold', 'confirmed', 'in_progress', 'completed')
|
|
139
139
|
AND ba.status IN ('held', 'confirmed', 'fulfilled')
|
|
140
140
|
),
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
-- Pax per option = sum of booking_item quantities for items belonging
|
|
142
|
+
-- to bookings on this slot. The previous formulation joined
|
|
143
|
+
-- booking_travelers to booking_id, which cross-multiplied items × travelers
|
|
144
|
+
-- whenever a booking had more than one item (e.g. Adult + Senior rows
|
|
145
|
+
-- on the same booking inflated pax_count to 4 instead of 2).
|
|
146
|
+
pax AS (
|
|
147
|
+
SELECT bi.option_id, SUM(bi.quantity)::int AS pax_count
|
|
143
148
|
FROM booking_items bi
|
|
144
149
|
JOIN slot_bookings sb ON sb.booking_id = bi.booking_id
|
|
145
150
|
WHERE bi.option_id IS NOT NULL
|
|
146
|
-
|
|
147
|
-
pax AS (
|
|
148
|
-
SELECT si.option_id, COUNT(bt.id)::int AS pax_count
|
|
149
|
-
FROM slot_items si
|
|
150
|
-
JOIN booking_travelers bt ON bt.booking_id = si.booking_id
|
|
151
|
-
GROUP BY si.option_id
|
|
151
|
+
GROUP BY bi.option_id
|
|
152
152
|
)
|
|
153
153
|
SELECT
|
|
154
154
|
pax.option_id,
|
|
@@ -181,13 +181,19 @@ export async function autoMaterializeAllocationResources(db, slotId, input, opti
|
|
|
181
181
|
const unitsNeeded = Math.max(1, Math.ceil(group.pax_count / Math.max(1, group.capacity)));
|
|
182
182
|
for (let index = 0; index < unitsNeeded; index++) {
|
|
183
183
|
sequence += 1;
|
|
184
|
+
// Default the resource's ref to its materializing option so the UI
|
|
185
|
+
// can badge each row with the option name (e.g. Standard double).
|
|
186
|
+
// Templates that explicitly set ref_type/ref_id (e.g. pointing at a
|
|
187
|
+
// hotel inventory row) keep their own values.
|
|
188
|
+
const resolvedRefType = group.ref_type ?? "option";
|
|
189
|
+
const resolvedRefId = group.ref_id ?? group.option_id;
|
|
184
190
|
const [row] = await db
|
|
185
191
|
.insert(allocationResources)
|
|
186
192
|
.values({
|
|
187
193
|
slotId,
|
|
188
194
|
kind,
|
|
189
|
-
refType:
|
|
190
|
-
refId:
|
|
195
|
+
refType: resolvedRefType,
|
|
196
|
+
refId: resolvedRefId,
|
|
191
197
|
label: renderNamePattern(group.name_pattern, {
|
|
192
198
|
sequence: String(sequence),
|
|
193
199
|
option: group.option_name ?? "",
|
|
@@ -482,6 +488,16 @@ function renderNamePattern(pattern, vars) {
|
|
|
482
488
|
return pattern.replace(/\{(\w+)\}/g, (_, key) => vars[key] ?? "");
|
|
483
489
|
}
|
|
484
490
|
async function executeRows(db, query) {
|
|
485
|
-
const
|
|
486
|
-
|
|
491
|
+
const result = await db.execute(query);
|
|
492
|
+
if (Array.isArray(result))
|
|
493
|
+
return result;
|
|
494
|
+
// node-postgres / neon-serverless drivers return `{ rows, rowCount, ... }`
|
|
495
|
+
// instead of a bare array — unwrap so this wrapper is driver-agnostic.
|
|
496
|
+
if (result &&
|
|
497
|
+
typeof result === "object" &&
|
|
498
|
+
"rows" in result &&
|
|
499
|
+
Array.isArray(result.rows)) {
|
|
500
|
+
return result.rows;
|
|
501
|
+
}
|
|
502
|
+
return [];
|
|
487
503
|
}
|
|
@@ -646,8 +646,18 @@ async function loadSharingGroupLabelMap(db, groupIds) {
|
|
|
646
646
|
return Object.fromEntries(rows.map((row) => [row.groupId, row.label]));
|
|
647
647
|
}
|
|
648
648
|
async function executeRows(db, query) {
|
|
649
|
-
const
|
|
650
|
-
|
|
649
|
+
const result = await db.execute(query);
|
|
650
|
+
if (Array.isArray(result))
|
|
651
|
+
return result;
|
|
652
|
+
// node-postgres / neon-serverless drivers return `{ rows, rowCount, ... }`
|
|
653
|
+
// instead of a bare array — unwrap so this wrapper is driver-agnostic.
|
|
654
|
+
if (result &&
|
|
655
|
+
typeof result === "object" &&
|
|
656
|
+
"rows" in result &&
|
|
657
|
+
Array.isArray(result.rows)) {
|
|
658
|
+
return result.rows;
|
|
659
|
+
}
|
|
660
|
+
return [];
|
|
651
661
|
}
|
|
652
662
|
/**
|
|
653
663
|
* Emit a Postgres `ARRAY[$1, $2, …]::text[]` literal instead of the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/availability",
|
|
3
|
-
"version": "0.52.
|
|
3
|
+
"version": "0.52.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -44,13 +44,13 @@
|
|
|
44
44
|
"drizzle-orm": "^0.45.2",
|
|
45
45
|
"hono": "^4.12.10",
|
|
46
46
|
"zod": "^4.3.6",
|
|
47
|
-
"@voyantjs/core": "0.52.
|
|
48
|
-
"@voyantjs/db": "0.52.
|
|
49
|
-
"@voyantjs/hono": "0.52.
|
|
47
|
+
"@voyantjs/core": "0.52.3",
|
|
48
|
+
"@voyantjs/db": "0.52.3",
|
|
49
|
+
"@voyantjs/hono": "0.52.3"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"typescript": "^6.0.2",
|
|
53
|
-
"@voyantjs/products": "0.52.
|
|
53
|
+
"@voyantjs/products": "0.52.3",
|
|
54
54
|
"@voyantjs/voyant-typescript-config": "0.1.0"
|
|
55
55
|
},
|
|
56
56
|
"files": [
|