@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 +13 -0
- package/dist/events.d.ts +21 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +21 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/routes.d.ts +2 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +9 -3
- package/dist/service.d.ts +7 -3
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +11 -5
- package/package.json +6 -6
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.
|
package/dist/events.d.ts
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
|
+
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AASvD,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,GACjC,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;
|
|
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`
|
package/dist/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"
|
|
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: {
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"
|
|
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.
|
|
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.
|
|
93
|
-
"@voyantjs/core": "0.
|
|
94
|
-
"@voyantjs/db": "0.
|
|
95
|
-
"@voyantjs/hono": "0.
|
|
96
|
-
"@voyantjs/catalog": "0.
|
|
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",
|