@voyantjs/bookings 0.6.8 → 0.6.9

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 (63) hide show
  1. package/README.md +2 -2
  2. package/dist/index.d.ts +7 -7
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -4
  5. package/dist/pii.d.ts +10 -9
  6. package/dist/pii.d.ts.map +1 -1
  7. package/dist/pii.js +33 -33
  8. package/dist/routes-groups.d.ts +25 -5
  9. package/dist/routes-groups.d.ts.map +1 -1
  10. package/dist/routes-groups.js +3 -3
  11. package/dist/routes-public.d.ts +19 -21
  12. package/dist/routes-public.d.ts.map +1 -1
  13. package/dist/routes-public.js +1 -1
  14. package/dist/routes-shared.d.ts +1 -1
  15. package/dist/routes-shared.d.ts.map +1 -1
  16. package/dist/routes.d.ts +200 -187
  17. package/dist/routes.d.ts.map +1 -1
  18. package/dist/routes.js +65 -95
  19. package/dist/schema/travel-details.d.ts +27 -27
  20. package/dist/schema/travel-details.d.ts.map +1 -1
  21. package/dist/schema/travel-details.js +19 -14
  22. package/dist/schema-core.d.ts +194 -305
  23. package/dist/schema-core.d.ts.map +1 -1
  24. package/dist/schema-core.js +19 -10
  25. package/dist/schema-items.d.ts +15 -15
  26. package/dist/schema-items.d.ts.map +1 -1
  27. package/dist/schema-items.js +12 -12
  28. package/dist/schema-operations.d.ts +1 -1
  29. package/dist/schema-operations.js +3 -3
  30. package/dist/schema-relations.d.ts +26 -9
  31. package/dist/schema-relations.d.ts.map +1 -1
  32. package/dist/schema-relations.js +36 -21
  33. package/dist/schema-shared.d.ts +3 -2
  34. package/dist/schema-shared.d.ts.map +1 -1
  35. package/dist/schema-shared.js +4 -5
  36. package/dist/schema-staff.d.ts +267 -0
  37. package/dist/schema-staff.d.ts.map +1 -0
  38. package/dist/schema-staff.js +31 -0
  39. package/dist/schema.d.ts +1 -0
  40. package/dist/schema.d.ts.map +1 -1
  41. package/dist/schema.js +1 -0
  42. package/dist/service-groups.d.ts +3 -7
  43. package/dist/service-groups.d.ts.map +1 -1
  44. package/dist/service-groups.js +6 -10
  45. package/dist/service-public.d.ts +49 -55
  46. package/dist/service-public.d.ts.map +1 -1
  47. package/dist/service-public.js +106 -53
  48. package/dist/service.d.ts +227 -99
  49. package/dist/service.d.ts.map +1 -1
  50. package/dist/service.js +321 -108
  51. package/dist/transactions-ref.d.ts +930 -66
  52. package/dist/transactions-ref.d.ts.map +1 -1
  53. package/dist/transactions-ref.js +56 -2
  54. package/dist/validation-public.d.ts +29 -69
  55. package/dist/validation-public.d.ts.map +1 -1
  56. package/dist/validation-public.js +21 -20
  57. package/dist/validation-shared.d.ts +4 -5
  58. package/dist/validation-shared.d.ts.map +1 -1
  59. package/dist/validation-shared.js +2 -10
  60. package/dist/validation.d.ts +229 -44
  61. package/dist/validation.d.ts.map +1 -1
  62. package/dist/validation.js +84 -28
  63. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAqM7C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAg3Ba,CAAA;AAEvC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAChD,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAmM7C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAyzBa,CAAA;AAEvC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAChD,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA"}
package/dist/routes.js CHANGED
@@ -7,7 +7,7 @@ import { bookingPiiAccessLog } from "./schema.js";
7
7
  import { bookingsService } from "./service.js";
8
8
  import { bookingGroupsService } from "./service-groups.js";
9
9
  import { publicBookingsService } from "./service-public.js";
10
- import { bookingListQuerySchema, cancelBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingItemParticipantSchema, insertBookingItemSchema, insertBookingNoteSchema, insertParticipantSchema, insertPassengerSchema, insertSupplierStatusSchema, internalBookingOverviewLookupQuerySchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, updateBookingFulfillmentSchema, updateBookingItemSchema, updateBookingSchema, updateBookingStatusSchema, updateParticipantSchema, updatePassengerSchema, updateSupplierStatusSchema, upsertParticipantTravelDetailsSchema, } from "./validation.js";
10
+ import { bookingListQuerySchema, cancelBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, updateBookingFulfillmentSchema, updateBookingItemSchema, updateBookingSchema, updateBookingStatusSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
11
11
  function hasPiiScope(scopes, action) {
12
12
  if (!scopes || scopes.length === 0) {
13
13
  return false;
@@ -22,7 +22,7 @@ async function logBookingPiiAccess(c, input) {
22
22
  .insert(bookingPiiAccessLog)
23
23
  .values({
24
24
  bookingId: input.bookingId ?? null,
25
- participantId: input.participantId ?? null,
25
+ travelerId: input.travelerId ?? null,
26
26
  actorId: c.get("userId") ?? null,
27
27
  actorType: c.get("actor") ?? null,
28
28
  callerType: c.get("callerType") ?? null,
@@ -114,7 +114,7 @@ function createAuditedBookingPiiService(c, bookingId) {
114
114
  onAudit: async (event) => {
115
115
  await logBookingPiiAccess(c, {
116
116
  bookingId,
117
- participantId: event.participantId,
117
+ travelerId: event.travelerId,
118
118
  action: event.action === "encrypt"
119
119
  ? "update"
120
120
  : event.action === "decrypt"
@@ -346,50 +346,48 @@ export const bookingRoutes = new Hono()
346
346
  }
347
347
  return c.json({ error: "Unable to cancel booking" }, 400);
348
348
  })
349
- // ==========================================================================
350
- // Participants
351
- // ==========================================================================
352
349
  // 12. GET /:id/allocations — List booking allocations
353
350
  .get("/:id/allocations", async (c) => {
354
351
  return c.json({ data: await bookingsService.listAllocations(c.get("db"), c.req.param("id")) });
355
352
  })
356
- // 13. GET /:id/participants — List participants
357
- .get("/:id/participants", async (c) => {
358
- return c.json({ data: await bookingsService.listParticipants(c.get("db"), c.req.param("id")) });
353
+ // ==========================================================================
354
+ // Travelers
355
+ // ==========================================================================
356
+ .get("/:id/travelers", async (c) => {
357
+ return c.json({ data: await bookingsService.listTravelers(c.get("db"), c.req.param("id")) });
359
358
  })
360
- // 13a. GET /:id/participants/:participantId/travel-details Read encrypted travel details
361
- .get("/:id/participants/:participantId/travel-details", async (c) => {
359
+ .get("/:id/travelers/:travelerId/travel-details", async (c) => {
362
360
  const auth = await authorizeBookingPiiAccess(c, {
363
361
  bookingId: c.req.param("id"),
364
- participantId: c.req.param("participantId"),
362
+ travelerId: c.req.param("travelerId"),
365
363
  action: "read",
366
364
  });
367
365
  if (!auth.allowed) {
368
366
  return auth.response;
369
367
  }
370
- const participant = await bookingsService.getParticipantById(c.get("db"), c.req.param("id"), c.req.param("participantId"));
371
- if (!participant) {
368
+ const traveler = await bookingsService.getTravelerRecordById(c.get("db"), c.req.param("id"), c.req.param("travelerId"));
369
+ if (!traveler) {
372
370
  await logBookingPiiAccess(c, {
373
371
  bookingId: c.req.param("id"),
374
- participantId: c.req.param("participantId"),
372
+ travelerId: c.req.param("travelerId"),
375
373
  action: "read",
376
374
  outcome: "denied",
377
375
  reason: "participant_not_found",
378
376
  });
379
- return c.json({ error: "Participant not found" }, 404);
377
+ return c.json({ error: "Traveler not found" }, 404);
380
378
  }
381
379
  try {
382
- const pii = createAuditedBookingPiiService(c, participant.bookingId);
383
- const details = await pii.getParticipantTravelDetails(c.get("db"), participant.id, c.get("userId"));
380
+ const pii = createAuditedBookingPiiService(c, traveler.bookingId);
381
+ const details = await pii.getTravelerTravelDetails(c.get("db"), traveler.id, c.get("userId"));
384
382
  if (!details) {
385
383
  await logBookingPiiAccess(c, {
386
- bookingId: participant.bookingId,
387
- participantId: participant.id,
384
+ bookingId: traveler.bookingId,
385
+ travelerId: traveler.id,
388
386
  action: "read",
389
387
  outcome: "denied",
390
388
  reason: "travel_details_not_found",
391
389
  });
392
- return c.json({ error: "Participant travel details not found" }, 404);
390
+ return c.json({ error: "Traveler travel details not found" }, 404);
393
391
  }
394
392
  return c.json({ data: details });
395
393
  }
@@ -397,40 +395,38 @@ export const bookingRoutes = new Hono()
397
395
  return handleKmsConfigError(c, error);
398
396
  }
399
397
  })
400
- // 9. POST /:id/participants Add participant
401
- .post("/:id/participants", async (c) => {
402
- const row = await bookingsService.createParticipant(c.get("db"), c.req.param("id"), await parseJsonBody(c, insertParticipantSchema), c.get("userId"));
398
+ .post("/:id/travelers", async (c) => {
399
+ const row = await bookingsService.createTraveler(c.get("db"), c.req.param("id"), await parseJsonBody(c, insertTravelerSchema), c.get("userId"));
403
400
  if (!row) {
404
401
  return c.json({ error: "Booking not found" }, 404);
405
402
  }
406
403
  return c.json({ data: row }, 201);
407
404
  })
408
- // 9a. PATCH /:id/participants/:participantId/travel-details Upsert encrypted travel details
409
- .patch("/:id/participants/:participantId/travel-details", async (c) => {
405
+ .patch("/:id/travelers/:travelerId/travel-details", async (c) => {
410
406
  const auth = await authorizeBookingPiiAccess(c, {
411
407
  bookingId: c.req.param("id"),
412
- participantId: c.req.param("participantId"),
408
+ travelerId: c.req.param("travelerId"),
413
409
  action: "update",
414
410
  });
415
411
  if (!auth.allowed) {
416
412
  return auth.response;
417
413
  }
418
- const participant = await bookingsService.getParticipantById(c.get("db"), c.req.param("id"), c.req.param("participantId"));
419
- if (!participant) {
414
+ const traveler = await bookingsService.getTravelerRecordById(c.get("db"), c.req.param("id"), c.req.param("travelerId"));
415
+ if (!traveler) {
420
416
  await logBookingPiiAccess(c, {
421
417
  bookingId: c.req.param("id"),
422
- participantId: c.req.param("participantId"),
418
+ travelerId: c.req.param("travelerId"),
423
419
  action: "update",
424
420
  outcome: "denied",
425
421
  reason: "participant_not_found",
426
422
  });
427
- return c.json({ error: "Participant not found" }, 404);
423
+ return c.json({ error: "Traveler not found" }, 404);
428
424
  }
429
425
  try {
430
- const pii = createAuditedBookingPiiService(c, participant.bookingId);
431
- const row = await pii.upsertParticipantTravelDetails(c.get("db"), participant.id, await parseJsonBody(c, upsertParticipantTravelDetailsSchema), c.get("userId"));
426
+ const pii = createAuditedBookingPiiService(c, traveler.bookingId);
427
+ const row = await pii.upsertTravelerTravelDetails(c.get("db"), traveler.id, await parseJsonBody(c, upsertTravelerTravelDetailsSchema), c.get("userId"));
432
428
  if (!row) {
433
- return c.json({ error: "Participant not found" }, 404);
429
+ return c.json({ error: "Traveler not found" }, 404);
434
430
  }
435
431
  return c.json({ data: row });
436
432
  }
@@ -438,40 +434,38 @@ export const bookingRoutes = new Hono()
438
434
  return handleKmsConfigError(c, error);
439
435
  }
440
436
  })
441
- // 10. PATCH /:id/participants/:participantId Update participant
442
- .patch("/:id/participants/:participantId", async (c) => {
443
- const row = await bookingsService.updateParticipant(c.get("db"), c.req.param("participantId"), await parseJsonBody(c, updateParticipantSchema));
437
+ .patch("/:id/travelers/:travelerId", async (c) => {
438
+ const row = await bookingsService.updateTraveler(c.get("db"), c.req.param("travelerId"), await parseJsonBody(c, updateTravelerSchema));
444
439
  if (!row) {
445
- return c.json({ error: "Participant not found" }, 404);
440
+ return c.json({ error: "Traveler not found" }, 404);
446
441
  }
447
442
  return c.json({ data: row });
448
443
  })
449
- // 10a. DELETE /:id/participants/:participantId/travel-details Delete encrypted travel details
450
- .delete("/:id/participants/:participantId/travel-details", async (c) => {
444
+ .delete("/:id/travelers/:travelerId/travel-details", async (c) => {
451
445
  const auth = await authorizeBookingPiiAccess(c, {
452
446
  bookingId: c.req.param("id"),
453
- participantId: c.req.param("participantId"),
447
+ travelerId: c.req.param("travelerId"),
454
448
  action: "delete",
455
449
  });
456
450
  if (!auth.allowed) {
457
451
  return auth.response;
458
452
  }
459
- const participant = await bookingsService.getParticipantById(c.get("db"), c.req.param("id"), c.req.param("participantId"));
460
- if (!participant) {
453
+ const traveler = await bookingsService.getTravelerRecordById(c.get("db"), c.req.param("id"), c.req.param("travelerId"));
454
+ if (!traveler) {
461
455
  await logBookingPiiAccess(c, {
462
456
  bookingId: c.req.param("id"),
463
- participantId: c.req.param("participantId"),
457
+ travelerId: c.req.param("travelerId"),
464
458
  action: "delete",
465
459
  outcome: "denied",
466
460
  reason: "participant_not_found",
467
461
  });
468
- return c.json({ error: "Participant not found" }, 404);
462
+ return c.json({ error: "Traveler not found" }, 404);
469
463
  }
470
464
  try {
471
- const pii = createAuditedBookingPiiService(c, participant.bookingId);
472
- const row = await pii.deleteParticipantTravelDetails(c.get("db"), participant.id, c.get("userId"));
465
+ const pii = createAuditedBookingPiiService(c, traveler.bookingId);
466
+ const row = await pii.deleteTravelerTravelDetails(c.get("db"), traveler.id, c.get("userId"));
473
467
  if (!row) {
474
- return c.json({ error: "Participant travel details not found" }, 404);
468
+ return c.json({ error: "Traveler travel details not found" }, 404);
475
469
  }
476
470
  return c.json({ success: true }, 200);
477
471
  }
@@ -479,42 +473,10 @@ export const bookingRoutes = new Hono()
479
473
  return handleKmsConfigError(c, error);
480
474
  }
481
475
  })
482
- // 11. DELETE /:id/participants/:participantId Delete participant
483
- .delete("/:id/participants/:participantId", async (c) => {
484
- const row = await bookingsService.deleteParticipant(c.get("db"), c.req.param("participantId"));
485
- if (!row) {
486
- return c.json({ error: "Participant not found" }, 404);
487
- }
488
- return c.json({ success: true }, 200);
489
- })
490
- // ==========================================================================
491
- // Passengers (legacy compatibility)
492
- // ==========================================================================
493
- // 12. GET /:id/passengers — List passengers
494
- .get("/:id/passengers", async (c) => {
495
- return c.json({ data: await bookingsService.listPassengers(c.get("db"), c.req.param("id")) });
496
- })
497
- // 13. POST /:id/passengers — Add passenger
498
- .post("/:id/passengers", async (c) => {
499
- const row = await bookingsService.createPassenger(c.get("db"), c.req.param("id"), await parseJsonBody(c, insertPassengerSchema), c.get("userId"));
500
- if (!row) {
501
- return c.json({ error: "Booking not found" }, 404);
502
- }
503
- return c.json({ data: row }, 201);
504
- })
505
- // 14. PATCH /:id/passengers/:passengerId — Update passenger
506
- .patch("/:id/passengers/:passengerId", async (c) => {
507
- const row = await bookingsService.updatePassenger(c.get("db"), c.req.param("passengerId"), await parseJsonBody(c, updatePassengerSchema));
508
- if (!row) {
509
- return c.json({ error: "Passenger not found" }, 404);
510
- }
511
- return c.json({ data: row });
512
- })
513
- // 15. DELETE /:id/passengers/:passengerId — Delete passenger
514
- .delete("/:id/passengers/:passengerId", async (c) => {
515
- const row = await bookingsService.deletePassenger(c.get("db"), c.req.param("passengerId"));
476
+ .delete("/:id/travelers/:travelerId", async (c) => {
477
+ const row = await bookingsService.deleteTraveler(c.get("db"), c.req.param("travelerId"));
516
478
  if (!row) {
517
- return c.json({ error: "Passenger not found" }, 404);
479
+ return c.json({ error: "Traveler not found" }, 404);
518
480
  }
519
481
  return c.json({ success: true }, 200);
520
482
  })
@@ -549,25 +511,25 @@ export const bookingRoutes = new Hono()
549
511
  }
550
512
  return c.json({ success: true }, 200);
551
513
  })
552
- // 20. GET /:id/items/:itemId/participants — List item participants
553
- .get("/:id/items/:itemId/participants", async (c) => {
514
+ // 20. GET /:id/items/:itemId/travelers — List item travelers
515
+ .get("/:id/items/:itemId/travelers", async (c) => {
554
516
  return c.json({
555
517
  data: await bookingsService.listItemParticipants(c.get("db"), c.req.param("itemId")),
556
518
  });
557
519
  })
558
- // 21. POST /:id/items/:itemId/participants — Link participant to item
559
- .post("/:id/items/:itemId/participants", async (c) => {
560
- const row = await bookingsService.addItemParticipant(c.get("db"), c.req.param("itemId"), await parseJsonBody(c, insertBookingItemParticipantSchema));
520
+ // 21. POST /:id/items/:itemId/travelers — Link traveler to item
521
+ .post("/:id/items/:itemId/travelers", async (c) => {
522
+ const row = await bookingsService.addItemParticipant(c.get("db"), c.req.param("itemId"), await parseJsonBody(c, insertBookingItemTravelerSchema));
561
523
  if (!row) {
562
- return c.json({ error: "Booking item or participant not found" }, 404);
524
+ return c.json({ error: "Booking item or traveler not found" }, 404);
563
525
  }
564
526
  return c.json({ data: row }, 201);
565
527
  })
566
- // 22. DELETE /:id/items/:itemId/participants/:linkId — Unlink participant from item
567
- .delete("/:id/items/:itemId/participants/:linkId", async (c) => {
528
+ // 22. DELETE /:id/items/:itemId/travelers/:linkId — Unlink traveler from item
529
+ .delete("/:id/items/:itemId/travelers/:linkId", async (c) => {
568
530
  const row = await bookingsService.removeItemParticipant(c.get("db"), c.req.param("linkId"));
569
531
  if (!row) {
570
- return c.json({ error: "Booking item participant link not found" }, 404);
532
+ return c.json({ error: "Booking item traveler link not found" }, 404);
571
533
  }
572
534
  return c.json({ success: true }, 200);
573
535
  })
@@ -602,14 +564,14 @@ export const bookingRoutes = new Hono()
602
564
  .post("/:id/fulfillments", async (c) => {
603
565
  const row = await bookingsService.issueFulfillment(c.get("db"), c.req.param("id"), await parseJsonBody(c, insertBookingFulfillmentSchema), c.get("userId"));
604
566
  if (!row) {
605
- return c.json({ error: "Booking, item, or participant not found" }, 404);
567
+ return c.json({ error: "Booking, item, or traveler not found" }, 404);
606
568
  }
607
569
  return c.json({ data: row }, 201);
608
570
  })
609
571
  .patch("/:id/fulfillments/:fulfillmentId", async (c) => {
610
572
  const row = await bookingsService.updateFulfillment(c.get("db"), c.req.param("id"), c.req.param("fulfillmentId"), await parseJsonBody(c, updateBookingFulfillmentSchema), c.get("userId"));
611
573
  if (!row) {
612
- return c.json({ error: "Fulfillment, item, or participant not found" }, 404);
574
+ return c.json({ error: "Fulfillment, item, or traveler not found" }, 404);
613
575
  }
614
576
  return c.json({ data: row });
615
577
  })
@@ -624,7 +586,7 @@ export const bookingRoutes = new Hono()
624
586
  .post("/:id/redemptions", async (c) => {
625
587
  const row = await bookingsService.recordRedemption(c.get("db"), c.req.param("id"), await parseJsonBody(c, recordBookingRedemptionSchema), c.get("userId"));
626
588
  if (!row) {
627
- return c.json({ error: "Booking, item, or participant not found" }, 404);
589
+ return c.json({ error: "Booking, item, or traveler not found" }, 404);
628
590
  }
629
591
  return c.json({ data: row }, 201);
630
592
  })
@@ -655,6 +617,14 @@ export const bookingRoutes = new Hono()
655
617
  return c.json({ error: "Booking not found" }, 404);
656
618
  }
657
619
  return c.json({ data: row }, 201);
620
+ })
621
+ // 28b. DELETE /:id/notes/:noteId — Delete note
622
+ .delete("/:id/notes/:noteId", async (c) => {
623
+ const row = await bookingsService.deleteNote(c.get("db"), c.req.param("noteId"));
624
+ if (!row) {
625
+ return c.json({ error: "Note not found" }, 404);
626
+ }
627
+ return c.json({ success: true }, 200);
658
628
  })
659
629
  // ==========================================================================
660
630
  // Documents
@@ -1,15 +1,15 @@
1
1
  import { z } from "zod";
2
- export declare const bookingParticipantIdentitySchema: z.ZodObject<{
2
+ export declare const bookingTravelerIdentitySchema: z.ZodObject<{
3
3
  nationality: z.ZodNullable<z.ZodOptional<z.ZodString>>;
4
4
  passportNumber: z.ZodNullable<z.ZodOptional<z.ZodString>>;
5
5
  passportExpiry: z.ZodNullable<z.ZodOptional<z.ZodString>>;
6
6
  dateOfBirth: z.ZodNullable<z.ZodOptional<z.ZodString>>;
7
7
  }, z.core.$strip>;
8
- export declare const bookingParticipantDietarySchema: z.ZodObject<{
8
+ export declare const bookingTravelerDietarySchema: z.ZodObject<{
9
9
  dietaryRequirements: z.ZodNullable<z.ZodOptional<z.ZodString>>;
10
10
  }, z.core.$strip>;
11
- export declare const decryptedBookingParticipantTravelDetailSchema: z.ZodObject<{
12
- participantId: z.ZodString;
11
+ export declare const decryptedBookingTravelerTravelDetailSchema: z.ZodObject<{
12
+ travelerId: z.ZodString;
13
13
  nationality: z.ZodNullable<z.ZodString>;
14
14
  passportNumber: z.ZodNullable<z.ZodString>;
15
15
  passportExpiry: z.ZodNullable<z.ZodString>;
@@ -19,13 +19,13 @@ export declare const decryptedBookingParticipantTravelDetailSchema: z.ZodObject<
19
19
  createdAt: z.ZodDate;
20
20
  updatedAt: z.ZodDate;
21
21
  }, z.core.$strip>;
22
- export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-core").PgTableWithColumns<{
23
- name: "booking_participant_travel_details";
22
+ export declare const bookingTravelerTravelDetails: import("drizzle-orm/pg-core").PgTableWithColumns<{
23
+ name: "booking_traveler_travel_details";
24
24
  schema: undefined;
25
25
  columns: {
26
- participantId: import("drizzle-orm/pg-core").PgColumn<{
27
- name: "participant_id";
28
- tableName: "booking_participant_travel_details";
26
+ travelerId: import("drizzle-orm/pg-core").PgColumn<{
27
+ name: "traveler_id";
28
+ tableName: "booking_traveler_travel_details";
29
29
  dataType: "string";
30
30
  columnType: "PgText";
31
31
  data: string;
@@ -42,7 +42,7 @@ export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-cor
42
42
  }, {}, {}>;
43
43
  identityEncrypted: import("drizzle-orm/pg-core").PgColumn<{
44
44
  name: "identity_encrypted";
45
- tableName: "booking_participant_travel_details";
45
+ tableName: "booking_traveler_travel_details";
46
46
  dataType: "json";
47
47
  columnType: "PgJsonb";
48
48
  data: {
@@ -65,7 +65,7 @@ export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-cor
65
65
  }>;
66
66
  dietaryEncrypted: import("drizzle-orm/pg-core").PgColumn<{
67
67
  name: "dietary_encrypted";
68
- tableName: "booking_participant_travel_details";
68
+ tableName: "booking_traveler_travel_details";
69
69
  dataType: "json";
70
70
  columnType: "PgJsonb";
71
71
  data: {
@@ -88,7 +88,7 @@ export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-cor
88
88
  }>;
89
89
  isLeadTraveler: import("drizzle-orm/pg-core").PgColumn<{
90
90
  name: "is_lead_traveler";
91
- tableName: "booking_participant_travel_details";
91
+ tableName: "booking_traveler_travel_details";
92
92
  dataType: "boolean";
93
93
  columnType: "PgBoolean";
94
94
  data: boolean;
@@ -105,7 +105,7 @@ export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-cor
105
105
  }, {}, {}>;
106
106
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
107
107
  name: "created_at";
108
- tableName: "booking_participant_travel_details";
108
+ tableName: "booking_traveler_travel_details";
109
109
  dataType: "date";
110
110
  columnType: "PgTimestamp";
111
111
  data: Date;
@@ -122,7 +122,7 @@ export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-cor
122
122
  }, {}, {}>;
123
123
  updatedAt: import("drizzle-orm/pg-core").PgColumn<{
124
124
  name: "updated_at";
125
- tableName: "booking_participant_travel_details";
125
+ tableName: "booking_traveler_travel_details";
126
126
  dataType: "date";
127
127
  columnType: "PgTimestamp";
128
128
  data: Date;
@@ -140,17 +140,17 @@ export declare const bookingParticipantTravelDetails: import("drizzle-orm/pg-cor
140
140
  };
141
141
  dialect: "pg";
142
142
  }>;
143
- export declare const bookingParticipantTravelDetailInsertSchema: z.ZodObject<{
144
- participantId: z.ZodString;
145
- identityEncrypted: z.ZodNullable<z.ZodOptional<z.ZodNullable<z.ZodObject<{
146
- enc: z.ZodString;
147
- }, z.core.$strip>>>>;
143
+ export declare const bookingTravelerTravelDetailInsertSchema: z.ZodObject<{
148
144
  dietaryEncrypted: z.ZodNullable<z.ZodOptional<z.ZodNullable<z.ZodObject<{
149
145
  enc: z.ZodString;
150
146
  }, z.core.$strip>>>>;
151
147
  isLeadTraveler: z.ZodDefault<z.ZodBoolean>;
148
+ identityEncrypted: z.ZodNullable<z.ZodOptional<z.ZodNullable<z.ZodObject<{
149
+ enc: z.ZodString;
150
+ }, z.core.$strip>>>>;
151
+ travelerId: z.ZodString;
152
152
  }, z.core.$strip>;
153
- export declare const bookingParticipantTravelDetailUpdateSchema: z.ZodObject<{
153
+ export declare const bookingTravelerTravelDetailUpdateSchema: z.ZodObject<{
154
154
  dietaryEncrypted: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNullable<z.ZodObject<{
155
155
  enc: z.ZodString;
156
156
  }, z.core.$strip>>>>>;
@@ -159,8 +159,8 @@ export declare const bookingParticipantTravelDetailUpdateSchema: z.ZodObject<{
159
159
  enc: z.ZodString;
160
160
  }, z.core.$strip>>>>>;
161
161
  }, z.core.$strip>;
162
- export declare const bookingParticipantTravelDetailSelectSchema: z.ZodObject<{
163
- participantId: z.ZodString;
162
+ export declare const bookingTravelerTravelDetailSelectSchema: z.ZodObject<{
163
+ travelerId: z.ZodString;
164
164
  identityEncrypted: z.ZodNullable<z.ZodOptional<z.ZodNullable<z.ZodObject<{
165
165
  enc: z.ZodString;
166
166
  }, z.core.$strip>>>>;
@@ -171,9 +171,9 @@ export declare const bookingParticipantTravelDetailSelectSchema: z.ZodObject<{
171
171
  createdAt: z.ZodDate;
172
172
  updatedAt: z.ZodDate;
173
173
  }, z.core.$strip>;
174
- export type BookingParticipantIdentity = z.infer<typeof bookingParticipantIdentitySchema>;
175
- export type BookingParticipantDietary = z.infer<typeof bookingParticipantDietarySchema>;
176
- export type BookingParticipantTravelDetail = typeof bookingParticipantTravelDetails.$inferSelect;
177
- export type NewBookingParticipantTravelDetail = typeof bookingParticipantTravelDetails.$inferInsert;
178
- export type DecryptedBookingParticipantTravelDetail = z.infer<typeof decryptedBookingParticipantTravelDetailSchema>;
174
+ export type BookingTravelerIdentity = z.infer<typeof bookingTravelerIdentitySchema>;
175
+ export type BookingTravelerDietary = z.infer<typeof bookingTravelerDietarySchema>;
176
+ export type BookingTravelerTravelDetail = z.infer<typeof bookingTravelerTravelDetailSelectSchema>;
177
+ export type NewBookingTravelerTravelDetail = z.infer<typeof bookingTravelerTravelDetailInsertSchema>;
178
+ export type DecryptedBookingTravelerTravelDetail = z.infer<typeof decryptedBookingTravelerTravelDetailSchema>;
179
179
  //# sourceMappingURL=travel-details.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"travel-details.d.ts","sourceRoot":"","sources":["../../src/schema/travel-details.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,gCAAgC;;;;;iBAK3C,CAAA;AAEF,eAAO,MAAM,+BAA+B;;iBAE1C,CAAA;AAEF,eAAO,MAAM,6CAA6C;;;;;;;;;;iBAUxD,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa3C,CAAA;AASD,eAAO,MAAM,0CAA0C;;;;;;;;;iBAA2C,CAAA;AAClG,eAAO,MAAM,0CAA0C;;;;;;;;iBAEvB,CAAA;AAChC,eAAO,MAAM,0CAA0C;;;;;;;;;;;iBAInD,CAAA;AAEJ,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AACzF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AACvF,MAAM,MAAM,8BAA8B,GAAG,OAAO,+BAA+B,CAAC,YAAY,CAAA;AAChG,MAAM,MAAM,iCAAiC,GAAG,OAAO,+BAA+B,CAAC,YAAY,CAAA;AACnG,MAAM,MAAM,uCAAuC,GAAG,CAAC,CAAC,KAAK,CAC3D,OAAO,6CAA6C,CACrD,CAAA"}
1
+ {"version":3,"file":"travel-details.d.ts","sourceRoot":"","sources":["../../src/schema/travel-details.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,6BAA6B;;;;;iBAKxC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;iBAEvC,CAAA;AAcF,eAAO,MAAM,0CAA0C;;;;;;;;;;iBACL,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaxC,CAAA;AASD,eAAO,MAAM,uCAAuC;;;;;;;;;iBAIhD,CAAA;AAEJ,eAAO,MAAM,uCAAuC;;;;;;;;iBAEvB,CAAA;AAE7B,eAAO,MAAM,uCAAuC;;;;;;;;;;;iBAIhD,CAAA;AAEJ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACjF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAA;AACjG,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAA;AACpG,MAAM,MAAM,oCAAoC,GAAG,CAAC,CAAC,KAAK,CACxD,OAAO,0CAA0C,CAClD,CAAA"}
@@ -1,18 +1,18 @@
1
1
  import { kmsEnvelopeSchema } from "@voyantjs/db/schema/iam";
2
2
  import { boolean, index, jsonb, pgTable, text, timestamp } from "drizzle-orm/pg-core";
3
3
  import { z } from "zod";
4
- import { bookingParticipants } from "../schema.js";
5
- export const bookingParticipantIdentitySchema = z.object({
4
+ import { bookingTravelers } from "../schema.js";
5
+ export const bookingTravelerIdentitySchema = z.object({
6
6
  nationality: z.string().optional().nullable(),
7
7
  passportNumber: z.string().optional().nullable(),
8
8
  passportExpiry: z.string().optional().nullable(),
9
9
  dateOfBirth: z.string().optional().nullable(),
10
10
  });
11
- export const bookingParticipantDietarySchema = z.object({
11
+ export const bookingTravelerDietarySchema = z.object({
12
12
  dietaryRequirements: z.string().optional().nullable(),
13
13
  });
14
- export const decryptedBookingParticipantTravelDetailSchema = z.object({
15
- participantId: z.string(),
14
+ const decryptedBookingTravelerTravelDetailRecordSchema = z.object({
15
+ travelerId: z.string(),
16
16
  nationality: z.string().nullable(),
17
17
  passportNumber: z.string().nullable(),
18
18
  passportExpiry: z.string().nullable(),
@@ -22,27 +22,32 @@ export const decryptedBookingParticipantTravelDetailSchema = z.object({
22
22
  createdAt: z.date(),
23
23
  updatedAt: z.date(),
24
24
  });
25
- export const bookingParticipantTravelDetails = pgTable("booking_participant_travel_details", {
26
- participantId: text("participant_id")
25
+ export const decryptedBookingTravelerTravelDetailSchema = decryptedBookingTravelerTravelDetailRecordSchema;
26
+ export const bookingTravelerTravelDetails = pgTable("booking_traveler_travel_details", {
27
+ travelerId: text("traveler_id")
27
28
  .primaryKey()
28
- .references(() => bookingParticipants.id, { onDelete: "cascade" }),
29
+ .references(() => bookingTravelers.id, { onDelete: "cascade" }),
29
30
  identityEncrypted: jsonb("identity_encrypted").$type(),
30
31
  dietaryEncrypted: jsonb("dietary_encrypted").$type(),
31
32
  isLeadTraveler: boolean("is_lead_traveler").notNull().default(false),
32
33
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
33
34
  updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
34
35
  }, (t) => [index("idx_bptd_lead_traveler").on(t.isLeadTraveler)]);
35
- const bookingParticipantTravelDetailCoreSchema = z.object({
36
- participantId: z.string().min(1),
36
+ const bookingTravelerTravelDetailRecordCoreSchema = z.object({
37
+ travelerId: z.string().min(1),
37
38
  identityEncrypted: kmsEnvelopeSchema.optional().nullable(),
38
39
  dietaryEncrypted: kmsEnvelopeSchema.optional().nullable(),
39
40
  isLeadTraveler: z.boolean().default(false),
40
41
  });
41
- export const bookingParticipantTravelDetailInsertSchema = bookingParticipantTravelDetailCoreSchema;
42
- export const bookingParticipantTravelDetailUpdateSchema = bookingParticipantTravelDetailCoreSchema
42
+ export const bookingTravelerTravelDetailInsertSchema = bookingTravelerTravelDetailRecordCoreSchema
43
+ .omit({ travelerId: true })
44
+ .extend({
45
+ travelerId: z.string().min(1),
46
+ });
47
+ export const bookingTravelerTravelDetailUpdateSchema = bookingTravelerTravelDetailRecordCoreSchema
43
48
  .partial()
44
- .omit({ participantId: true });
45
- export const bookingParticipantTravelDetailSelectSchema = bookingParticipantTravelDetailCoreSchema.extend({
49
+ .omit({ travelerId: true });
50
+ export const bookingTravelerTravelDetailSelectSchema = bookingTravelerTravelDetailRecordCoreSchema.extend({
46
51
  createdAt: z.date(),
47
52
  updatedAt: z.date(),
48
53
  });