@voyantjs/availability 0.71.0 → 0.73.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/service-core.d.ts.map +1 -1
- package/dist/service-core.js +33 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-core.d.ts","sourceRoot":"","sources":["../src/service-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EAAmC,KAAK,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAQhG,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,qBAAqB,CAAA;AAG5B,wBAAsB,SAAS,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;GAqBvF;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;UAOnE;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,2BAA2B;;;;;;;;;;;;;;;eAGzF;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,2BAA2B;;;;;;;;;;;;;;;UAQlC;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;UAMlE;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,8BAA8B;;;;;;;;;;;;;;;;;;GAsBtC;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;UAOxE;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,gCAAgC;;;;;;;;;;;;eAIvC;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,gCAAgC;;;;;;;;;;;;UAQvC;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;UAMvE;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BvF;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;UAOnE;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,4BAA4B,CAAC,QAAQ,CAAC,CAAA;CAChD;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AAEnD,wBAAsB,UAAU,CAC9B,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,2BAA2B,EACjC,OAAO,GAAE,mBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;eAkClC;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,2BAA2B,EACjC,OAAO,GAAE,mBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"service-core.d.ts","sourceRoot":"","sources":["../src/service-core.ts"],"names":[],"mappings":"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"}
|
package/dist/service-core.js
CHANGED
|
@@ -170,12 +170,44 @@ export async function createSlot(db, data, runtime = {}) {
|
|
|
170
170
|
return row;
|
|
171
171
|
}
|
|
172
172
|
export async function updateSlot(db, id, data, runtime = {}) {
|
|
173
|
+
const { remainingPax: _ignoredRemainingPax, ...rest } = data;
|
|
173
174
|
const patch = {
|
|
174
|
-
...
|
|
175
|
+
...rest,
|
|
175
176
|
startsAt: data.startsAt === undefined ? undefined : new Date(data.startsAt),
|
|
176
177
|
endsAt: data.endsAt === undefined ? undefined : toDateOrNull(data.endsAt),
|
|
177
178
|
updatedAt: new Date(),
|
|
178
179
|
};
|
|
180
|
+
// `remaining_pax` is a derived value the service owns — concurrent flows
|
|
181
|
+
// (holds, bookings, refunds) update it atomically while a form is open,
|
|
182
|
+
// so we never trust a client-supplied snapshot (#1087, Codex review on
|
|
183
|
+
// #1088). Recompute here using the row's *current* state inside the same
|
|
184
|
+
// UPDATE statement so the capacity-change rebalance is race-free.
|
|
185
|
+
//
|
|
186
|
+
// - Switching to unlimited → NULL (no cap).
|
|
187
|
+
// - Changing initialPax with a finite cap → preserve the consumed
|
|
188
|
+
// delta: `new_initial - (old_initial - old_remaining)`, clamped to
|
|
189
|
+
// [0, new_initial]. If consumed > new_initial (capacity dropped
|
|
190
|
+
// below what's already booked) the slot lands at 0; the operator
|
|
191
|
+
// can release allocations to recover headroom.
|
|
192
|
+
// - Leaving capacity alone → don't touch remaining_pax.
|
|
193
|
+
if (data.unlimited === true) {
|
|
194
|
+
patch.remainingPax = null;
|
|
195
|
+
}
|
|
196
|
+
else if (data.initialPax !== undefined && data.initialPax !== null) {
|
|
197
|
+
const newInitial = data.initialPax;
|
|
198
|
+
patch.remainingPax = sql `GREATEST(
|
|
199
|
+
0,
|
|
200
|
+
LEAST(
|
|
201
|
+
${newInitial}::int,
|
|
202
|
+
${newInitial}::int
|
|
203
|
+
- GREATEST(
|
|
204
|
+
0,
|
|
205
|
+
COALESCE(${availabilitySlots.initialPax}, ${newInitial}::int)
|
|
206
|
+
- COALESCE(${availabilitySlots.remainingPax}, ${newInitial}::int)
|
|
207
|
+
)
|
|
208
|
+
)
|
|
209
|
+
)::int`;
|
|
210
|
+
}
|
|
179
211
|
const [row] = await db
|
|
180
212
|
.update(availabilitySlots)
|
|
181
213
|
.set(patch)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/availability",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.73.1",
|
|
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.
|
|
48
|
-
"@voyantjs/db": "0.
|
|
49
|
-
"@voyantjs/hono": "0.
|
|
47
|
+
"@voyantjs/core": "0.73.1",
|
|
48
|
+
"@voyantjs/db": "0.73.1",
|
|
49
|
+
"@voyantjs/hono": "0.73.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"typescript": "^6.0.2",
|
|
53
|
-
"@voyantjs/products": "0.
|
|
53
|
+
"@voyantjs/products": "0.73.1",
|
|
54
54
|
"@voyantjs/voyant-typescript-config": "0.1.0"
|
|
55
55
|
},
|
|
56
56
|
"files": [
|