@voyantjs/cruises 0.40.1 → 0.41.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.
package/README.md CHANGED
@@ -7,3 +7,16 @@ See [docs/architecture/cruises-module.md](../../docs/architecture/cruises-module
7
7
  ## Status
8
8
 
9
9
  Early development. Phase 1 (canonical schema + core service for self-managed cruises) is in progress.
10
+
11
+ ## Domain Events
12
+
13
+ `@voyantjs/cruises` exports stable cruise lifecycle event constants for catalog
14
+ and search subscribers:
15
+
16
+ - `CRUISE_CREATED_EVENT` = `cruise.created`
17
+ - `CRUISE_UPDATED_EVENT` = `cruise.updated`
18
+ - `CRUISE_DELETED_EVENT` = `cruise.deleted`
19
+
20
+ Each event carries `{ id }`, where `id` is the local cruise id. Treat the
21
+ payload as an invalidation trigger and re-read current cruise state before
22
+ updating downstream indexes.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Cruise domain events.
3
+ *
4
+ * Emitted after successful local cruise mutations. Subscribers should treat
5
+ * these payloads as invalidation triggers and re-read current cruise state
6
+ * before updating catalog/search projections.
7
+ */
8
+ import type { EventBus } from "@voyantjs/core";
9
+ /** Stable string identifier for local cruise creation. */
10
+ export declare const CRUISE_CREATED_EVENT: "cruise.created";
11
+ /** Stable string identifier for local cruise updates. */
12
+ export declare const CRUISE_UPDATED_EVENT: "cruise.updated";
13
+ /** Stable string identifier for local cruise deletion/archive. */
14
+ export declare const CRUISE_DELETED_EVENT: "cruise.deleted";
15
+ export type CruiseLifecycleEventName = typeof CRUISE_CREATED_EVENT | typeof CRUISE_UPDATED_EVENT | typeof CRUISE_DELETED_EVENT;
16
+ export interface CruiseLifecycleEvent {
17
+ /** Cruise id whose lifecycle changed. */
18
+ id: string;
19
+ }
20
+ export declare function emitCruiseLifecycleEvent(eventBus: EventBus | undefined, event: CruiseLifecycleEventName, payload: CruiseLifecycleEvent): Promise<void>;
21
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAA;AAE7D,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAA;AAE7D,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAA;AAE7D,MAAM,MAAM,wBAAwB,GAChC,OAAO,oBAAoB,GAC3B,OAAO,oBAAoB,GAC3B,OAAO,oBAAoB,CAAA;AAE/B,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAA;CACX;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,KAAK,EAAE,wBAAwB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf"}
package/dist/events.js ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Cruise domain events.
3
+ *
4
+ * Emitted after successful local cruise mutations. Subscribers should treat
5
+ * these payloads as invalidation triggers and re-read current cruise state
6
+ * before updating catalog/search projections.
7
+ */
8
+ /** Stable string identifier for local cruise creation. */
9
+ export const CRUISE_CREATED_EVENT = "cruise.created";
10
+ /** Stable string identifier for local cruise updates. */
11
+ export const CRUISE_UPDATED_EVENT = "cruise.updated";
12
+ /** Stable string identifier for local cruise deletion/archive. */
13
+ export const CRUISE_DELETED_EVENT = "cruise.deleted";
14
+ export async function emitCruiseLifecycleEvent(eventBus, event, payload) {
15
+ if (!eventBus)
16
+ return;
17
+ await eventBus.emit(event, payload, {
18
+ category: "domain",
19
+ source: "service",
20
+ });
21
+ }
package/dist/index.d.ts CHANGED
@@ -5,11 +5,12 @@ export { type MemoizeOptions, memoizeCruiseAdapter } from "./adapters/memoize.js
5
5
  export { MockCruiseAdapter, type MockCruiseAdapterOptions } from "./adapters/mock.js";
6
6
  export { clearCruiseAdapters, hasCruiseAdapter, listCruiseAdapters, registerCruiseAdapter, resolveCruiseAdapter, unregisterCruiseAdapter, } from "./adapters/registry.js";
7
7
  export { type BookingCruiseDetail, type BookingGroupCruiseDetail, bookingCruiseDetails, bookingCruiseDetailsService, bookingGroupCruiseDetails, bookingGroupCruiseDetailsService, cruiseBookingModeEnum, cruisesBookingExtension, cruisesBookingExtensionRoutes, type NewBookingCruiseDetail, type NewBookingGroupCruiseDetail, } from "./booking-extension.js";
8
+ export { CRUISE_CREATED_EVENT, CRUISE_DELETED_EVENT, CRUISE_UPDATED_EVENT, type CruiseLifecycleEvent, type CruiseLifecycleEventName, emitCruiseLifecycleEvent, } from "./events.js";
8
9
  export type { CruiseAdminRoutes } from "./routes.js";
9
10
  export { cruiseAdminRoutes } from "./routes.js";
10
11
  export type { CruisePublicRoutes } from "./routes-public.js";
11
12
  export { cruisePublicRoutes } from "./routes-public.js";
12
- export type { EffectiveItineraryDay } from "./service.js";
13
+ export type { CruiseMutationRuntime, EffectiveItineraryDay } from "./service.js";
13
14
  export { cruisesService } from "./service.js";
14
15
  export { type CreateCruiseBookingInput, type CreateCruiseBookingResult, type CreateCruisePartyBookingInput, type CreateCruisePartyBookingResult, type CreateExternalCruiseBookingInput, type CruiseBookingContact, type CruiseBookingMode, type CruiseBookingPassenger, type CruisePartyCabinEntry, cruisesBookingService, } from "./service-bookings.js";
15
16
  export { detachExternalCruise } from "./service-detach.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export { memoizeCruiseAdapter } from "./adapters/memoize.js";
4
4
  export { MockCruiseAdapter } from "./adapters/mock.js";
5
5
  export { clearCruiseAdapters, hasCruiseAdapter, listCruiseAdapters, registerCruiseAdapter, resolveCruiseAdapter, unregisterCruiseAdapter, } from "./adapters/registry.js";
6
6
  export { bookingCruiseDetails, bookingCruiseDetailsService, bookingGroupCruiseDetails, bookingGroupCruiseDetailsService, cruiseBookingModeEnum, cruisesBookingExtension, cruisesBookingExtensionRoutes, } from "./booking-extension.js";
7
+ export { CRUISE_CREATED_EVENT, CRUISE_DELETED_EVENT, CRUISE_UPDATED_EVENT, emitCruiseLifecycleEvent, } from "./events.js";
7
8
  export { cruiseAdminRoutes } from "./routes.js";
8
9
  export { cruisePublicRoutes } from "./routes-public.js";
9
10
  export { cruisesService } from "./service.js";
package/dist/routes.d.ts CHANGED
@@ -1,9 +1,11 @@
1
+ import type { EventBus } from "@voyantjs/core";
1
2
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
2
3
  import type { SourceAdapterRegistry } from "@voyantjs/catalog/booking-engine";
3
4
  type Env = {
4
5
  Variables: {
5
6
  db: PostgresJsDatabase;
6
7
  userId?: string;
8
+ eventBus?: EventBus;
7
9
  /**
8
10
  * Catalog source-adapter registry. Required for the `/:key`
9
11
  * external branch — the route dispatches through `getCruiseContent`
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AA8CjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAE7E,KAAK,GAAG,GAAG;IACT,SAAS,EAAE;QACT,EAAE,EAAE,kBAAkB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf;;;;;;;;;;;;WAYG;QACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;KAC9C,CAAA;CACF,CAAA;AAuND,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAyBhB,UAAU;oCACF,MAAM;;;;;;yBAEjB,MAAM;;;;;;;6BAGyB,MAAM;2BAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAisB3D,CAAA;AAEJ,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAA"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AA8CjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAE7E,KAAK,GAAG,GAAG;IACT,SAAS,EAAE;QACT,EAAE,EAAE,kBAAkB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB;;;;;;;;;;;;WAYG;QACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;KAC9C,CAAA;CACF,CAAA;AAuND,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAyBhB,UAAU;oCACF,MAAM;;;;;;yBAEjB,MAAM;;;;;;;6BAGyB,MAAM;2BAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAusB3D,CAAA;AAEJ,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAA"}
package/dist/routes.js CHANGED
@@ -252,7 +252,9 @@ export const cruiseAdminRoutes = new Hono()
252
252
  })
253
253
  .post("/", async (c) => {
254
254
  const data = await parseJsonBody(c, insertCruiseSchema);
255
- const row = await cruisesService.createCruise(c.get("db"), data);
255
+ const row = await cruisesService.createCruise(c.get("db"), data, {
256
+ eventBus: c.get("eventBus"),
257
+ });
256
258
  return c.json({ data: row }, 201);
257
259
  })
258
260
  // --- per-cruise (parses unified key, dispatches local or external) ---
@@ -327,7 +329,9 @@ export const cruiseAdminRoutes = new Hono()
327
329
  if (parsed.kind === "invalid")
328
330
  return c.json(invalidKey(parsed.raw), 400);
329
331
  const data = await parseJsonBody(c, updateCruiseSchema);
330
- const row = await cruisesService.updateCruise(c.get("db"), parsed.id, data);
332
+ const row = await cruisesService.updateCruise(c.get("db"), parsed.id, data, {
333
+ eventBus: c.get("eventBus"),
334
+ });
331
335
  if (!row)
332
336
  return c.json({ error: "not_found" }, 404);
333
337
  return c.json({ data: row });
@@ -342,7 +346,9 @@ export const cruiseAdminRoutes = new Hono()
342
346
  }
343
347
  if (parsed.kind === "invalid")
344
348
  return c.json(invalidKey(parsed.raw), 400);
345
- const row = await cruisesService.archiveCruise(c.get("db"), parsed.id);
349
+ const row = await cruisesService.archiveCruise(c.get("db"), parsed.id, {
350
+ eventBus: c.get("eventBus"),
351
+ });
346
352
  if (!row)
347
353
  return c.json({ error: "not_found" }, 404);
348
354
  return c.json({ data: row });
package/dist/service.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { EventBus } from "@voyantjs/core";
1
2
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
2
3
  import { type CruiseCabin, type CruiseCabinCategory, type CruiseDeck, type CruiseShip } from "./schema-cabins.js";
3
4
  import { type CruiseEnrichmentProgram } from "./schema-content.js";
@@ -9,6 +10,9 @@ import type { InsertEnrichmentProgram, ReplaceEnrichmentPrograms, UpdateEnrichme
9
10
  import type { CruiseListQuery, InsertCruise, InsertSailing, SailingListQuery, UpdateCruise, UpdateSailing } from "./validation-core.js";
10
11
  import type { ReplaceCruiseDays, ReplaceSailingDays } from "./validation-itinerary.js";
11
12
  import type { InsertPrice, InsertPriceComponent, PriceListQuery, UpdatePrice } from "./validation-pricing.js";
13
+ export interface CruiseMutationRuntime {
14
+ eventBus?: EventBus;
15
+ }
12
16
  export declare const cruisesService: {
13
17
  listCruises(db: PostgresJsDatabase, query: CruiseListQuery): Promise<{
14
18
  data: {
@@ -51,9 +55,9 @@ export declare const cruisesService: {
51
55
  sailings?: CruiseSailing[];
52
56
  days?: CruiseDay[];
53
57
  }) | null>;
54
- createCruise(db: PostgresJsDatabase, data: InsertCruise): Promise<Cruise>;
55
- updateCruise(db: PostgresJsDatabase, id: string, data: UpdateCruise): Promise<Cruise | null>;
56
- archiveCruise(db: PostgresJsDatabase, id: string): Promise<Cruise | null>;
58
+ createCruise(db: PostgresJsDatabase, data: InsertCruise, runtime?: CruiseMutationRuntime): Promise<Cruise>;
59
+ updateCruise(db: PostgresJsDatabase, id: string, data: UpdateCruise, runtime?: CruiseMutationRuntime): Promise<Cruise | null>;
60
+ archiveCruise(db: PostgresJsDatabase, id: string, runtime?: CruiseMutationRuntime): Promise<Cruise | null>;
57
61
  recomputeCruiseAggregates(db: PostgresJsDatabase, cruiseId: string): Promise<Cruise | null>;
58
62
  listSailings(db: PostgresJsDatabase, query: SailingListQuery): Promise<{
59
63
  data: {
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/dist/service.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { and, asc, count, desc, eq, gte, ilike, inArray, lte, or, sql } from "drizzle-orm";
2
+ import { CRUISE_CREATED_EVENT, CRUISE_DELETED_EVENT, CRUISE_UPDATED_EVENT, emitCruiseLifecycleEvent, } from "./events.js";
2
3
  import { cruiseCabinCategories, cruiseCabins, cruiseDecks, cruiseShips, } from "./schema-cabins.js";
3
4
  import { cruiseEnrichmentPrograms } from "./schema-content.js";
4
5
  import { cruiseSailings, cruises, } from "./schema-core.js";
@@ -85,7 +86,7 @@ export const cruisesService = {
85
86
  }
86
87
  return out;
87
88
  },
88
- async createCruise(db, data) {
89
+ async createCruise(db, data, runtime = {}) {
89
90
  const [row] = await db
90
91
  .insert(cruises)
91
92
  .values(data)
@@ -93,26 +94,31 @@ export const cruisesService = {
93
94
  if (!row)
94
95
  throw new Error("Failed to create cruise");
95
96
  await reprojectIfPossible(db, row.id);
97
+ await emitCruiseLifecycleEvent(runtime.eventBus, CRUISE_CREATED_EVENT, { id: row.id });
96
98
  return row;
97
99
  },
98
- async updateCruise(db, id, data) {
100
+ async updateCruise(db, id, data, runtime = {}) {
99
101
  const [row] = await db
100
102
  .update(cruises)
101
103
  .set({ ...data, ...setUpdated })
102
104
  .where(eq(cruises.id, id))
103
105
  .returning();
104
- if (row)
106
+ if (row) {
105
107
  await reprojectIfPossible(db, row.id);
108
+ await emitCruiseLifecycleEvent(runtime.eventBus, CRUISE_UPDATED_EVENT, { id: row.id });
109
+ }
106
110
  return row ?? null;
107
111
  },
108
- async archiveCruise(db, id) {
112
+ async archiveCruise(db, id, runtime = {}) {
109
113
  const [row] = await db
110
114
  .update(cruises)
111
115
  .set({ status: "archived", ...setUpdated })
112
116
  .where(eq(cruises.id, id))
113
117
  .returning();
114
- if (row)
118
+ if (row) {
115
119
  await reprojectIfPossible(db, row.id);
120
+ await emitCruiseLifecycleEvent(runtime.eventBus, CRUISE_DELETED_EVENT, { id: row.id });
121
+ }
116
122
  return row ?? null;
117
123
  },
118
124
  async recomputeCruiseAggregates(db, cruiseId) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/cruises",
3
- "version": "0.40.1",
3
+ "version": "0.41.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -89,11 +89,11 @@
89
89
  "drizzle-orm": "^0.45.2",
90
90
  "hono": "^4.12.10",
91
91
  "zod": "^4.3.6",
92
- "@voyantjs/bookings": "0.40.1",
93
- "@voyantjs/core": "0.40.1",
94
- "@voyantjs/db": "0.40.1",
95
- "@voyantjs/hono": "0.40.1",
96
- "@voyantjs/catalog": "0.40.1"
92
+ "@voyantjs/bookings": "0.41.0",
93
+ "@voyantjs/core": "0.41.0",
94
+ "@voyantjs/db": "0.41.0",
95
+ "@voyantjs/hono": "0.41.0",
96
+ "@voyantjs/catalog": "0.41.0"
97
97
  },
98
98
  "devDependencies": {
99
99
  "typescript": "^6.0.2",