@voyant-travel/mice 0.2.0 → 0.3.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.
@@ -0,0 +1,102 @@
1
+ import { asc, eq, inArray } from "drizzle-orm";
2
+ import { programs } from "./schema.js";
3
+ import { programDelegates } from "./schema-delegates.js";
4
+ import { roomingAssignmentDelegates, roomingAssignments, } from "./schema-rooming.js";
5
+ export async function createRoomingAssignment(db, input) {
6
+ const [program] = await db
7
+ .select({ id: programs.id })
8
+ .from(programs)
9
+ .where(eq(programs.id, input.programId))
10
+ .limit(1);
11
+ if (!program)
12
+ return { status: "program_not_found" };
13
+ const [assignment] = await db.insert(roomingAssignments).values(input).returning();
14
+ if (!assignment)
15
+ throw new Error("createRoomingAssignment: insert returned no rows");
16
+ return { status: "ok", assignment };
17
+ }
18
+ export async function getRoomingAssignment(db, id) {
19
+ const [assignment] = await db
20
+ .select()
21
+ .from(roomingAssignments)
22
+ .where(eq(roomingAssignments.id, id))
23
+ .limit(1);
24
+ if (!assignment)
25
+ return null;
26
+ const delegates = await db
27
+ .select()
28
+ .from(roomingAssignmentDelegates)
29
+ .where(eq(roomingAssignmentDelegates.roomingAssignmentId, id));
30
+ return { ...assignment, delegates };
31
+ }
32
+ export async function listRoomingAssignments(db, query) {
33
+ const data = await db
34
+ .select()
35
+ .from(roomingAssignments)
36
+ .where(eq(roomingAssignments.programId, query.programId))
37
+ .orderBy(asc(roomingAssignments.createdAt))
38
+ .limit(query.limit)
39
+ .offset(query.offset);
40
+ return { data, limit: query.limit, offset: query.offset };
41
+ }
42
+ export async function updateRoomingAssignment(db, id, input) {
43
+ const [assignment] = await db
44
+ .update(roomingAssignments)
45
+ .set({ ...input, updatedAt: new Date() })
46
+ .where(eq(roomingAssignments.id, id))
47
+ .returning();
48
+ return assignment ?? null;
49
+ }
50
+ /**
51
+ * Replace the occupants of a rooming assignment (full replace). Validates the
52
+ * assignment and that every delegate exists AND belongs to the assignment's
53
+ * program before touching the join — a stale id is a 4xx (not an FK 500) and a
54
+ * cross-program delegate can't corrupt the program-scoped manifest.
55
+ */
56
+ export async function setRoomingDelegates(db, assignmentId, delegates) {
57
+ return db.transaction(async (tx) => {
58
+ const [assignment] = await tx
59
+ .select({ id: roomingAssignments.id, programId: roomingAssignments.programId })
60
+ .from(roomingAssignments)
61
+ .where(eq(roomingAssignments.id, assignmentId))
62
+ .limit(1);
63
+ if (!assignment)
64
+ return { status: "assignment_not_found" };
65
+ const ids = delegates.map((d) => d.delegateId);
66
+ if (ids.length) {
67
+ const found = await tx
68
+ .select({ id: programDelegates.id, programId: programDelegates.programId })
69
+ .from(programDelegates)
70
+ .where(inArray(programDelegates.id, ids));
71
+ const byId = new Map(found.map((r) => [r.id, r.programId]));
72
+ const missing = ids.filter((id) => !byId.has(id));
73
+ if (missing.length)
74
+ return { status: "delegate_not_found", missing };
75
+ const offending = ids.filter((id) => byId.get(id) !== assignment.programId);
76
+ if (offending.length)
77
+ return { status: "program_mismatch", offending };
78
+ }
79
+ await tx
80
+ .delete(roomingAssignmentDelegates)
81
+ .where(eq(roomingAssignmentDelegates.roomingAssignmentId, assignmentId));
82
+ if (delegates.length === 0)
83
+ return { status: "ok", delegates: [] };
84
+ const rows = await tx
85
+ .insert(roomingAssignmentDelegates)
86
+ .values(delegates.map((d) => ({
87
+ roomingAssignmentId: assignmentId,
88
+ delegateId: d.delegateId,
89
+ isPrimary: d.isPrimary ?? false,
90
+ bedLabel: d.bedLabel,
91
+ })))
92
+ .returning();
93
+ return { status: "ok", delegates: rows };
94
+ });
95
+ }
96
+ export const roomingService = {
97
+ createRoomingAssignment,
98
+ getRoomingAssignment,
99
+ listRoomingAssignments,
100
+ updateRoomingAssignment,
101
+ setRoomingDelegates,
102
+ };
@@ -0,0 +1,109 @@
1
+ import { z } from "zod";
2
+ export declare const delegateRoleSchema: z.ZodEnum<{
3
+ staff: "staff";
4
+ attendee: "attendee";
5
+ speaker: "speaker";
6
+ sponsor: "sponsor";
7
+ vip: "vip";
8
+ exhibitor: "exhibitor";
9
+ organizer: "organizer";
10
+ }>;
11
+ export declare const delegateStatusSchema: z.ZodEnum<{
12
+ cancelled: "cancelled";
13
+ invited: "invited";
14
+ registered: "registered";
15
+ confirmed: "confirmed";
16
+ checked_in: "checked_in";
17
+ no_show: "no_show";
18
+ }>;
19
+ export declare const enrollmentStatusSchema: z.ZodEnum<{
20
+ cancelled: "cancelled";
21
+ registered: "registered";
22
+ waitlisted: "waitlisted";
23
+ attended: "attended";
24
+ }>;
25
+ export declare const createDelegateSchema: z.ZodObject<{
26
+ programId: z.ZodString;
27
+ personId: z.ZodOptional<z.ZodString>;
28
+ bookingId: z.ZodOptional<z.ZodString>;
29
+ role: z.ZodDefault<z.ZodEnum<{
30
+ staff: "staff";
31
+ attendee: "attendee";
32
+ speaker: "speaker";
33
+ sponsor: "sponsor";
34
+ vip: "vip";
35
+ exhibitor: "exhibitor";
36
+ organizer: "organizer";
37
+ }>>;
38
+ status: z.ZodDefault<z.ZodEnum<{
39
+ cancelled: "cancelled";
40
+ invited: "invited";
41
+ registered: "registered";
42
+ confirmed: "confirmed";
43
+ checked_in: "checked_in";
44
+ no_show: "no_show";
45
+ }>>;
46
+ arrivalAt: z.ZodOptional<z.ZodString>;
47
+ departureAt: z.ZodOptional<z.ZodString>;
48
+ notes: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$strip>;
50
+ export declare const updateDelegateSchema: z.ZodObject<{
51
+ status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
52
+ cancelled: "cancelled";
53
+ invited: "invited";
54
+ registered: "registered";
55
+ confirmed: "confirmed";
56
+ checked_in: "checked_in";
57
+ no_show: "no_show";
58
+ }>>>;
59
+ role: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
60
+ staff: "staff";
61
+ attendee: "attendee";
62
+ speaker: "speaker";
63
+ sponsor: "sponsor";
64
+ vip: "vip";
65
+ exhibitor: "exhibitor";
66
+ organizer: "organizer";
67
+ }>>>;
68
+ notes: z.ZodOptional<z.ZodOptional<z.ZodString>>;
69
+ bookingId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
70
+ personId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
71
+ arrivalAt: z.ZodOptional<z.ZodOptional<z.ZodString>>;
72
+ departureAt: z.ZodOptional<z.ZodOptional<z.ZodString>>;
73
+ }, z.core.$strip>;
74
+ export declare const delegateListQuerySchema: z.ZodObject<{
75
+ programId: z.ZodString;
76
+ status: z.ZodOptional<z.ZodEnum<{
77
+ cancelled: "cancelled";
78
+ invited: "invited";
79
+ registered: "registered";
80
+ confirmed: "confirmed";
81
+ checked_in: "checked_in";
82
+ no_show: "no_show";
83
+ }>>;
84
+ role: z.ZodOptional<z.ZodEnum<{
85
+ staff: "staff";
86
+ attendee: "attendee";
87
+ speaker: "speaker";
88
+ sponsor: "sponsor";
89
+ vip: "vip";
90
+ exhibitor: "exhibitor";
91
+ organizer: "organizer";
92
+ }>>;
93
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
94
+ offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
95
+ }, z.core.$strip>;
96
+ export declare const enrollDelegateSchema: z.ZodObject<{
97
+ sessionId: z.ZodString;
98
+ status: z.ZodDefault<z.ZodEnum<{
99
+ cancelled: "cancelled";
100
+ registered: "registered";
101
+ waitlisted: "waitlisted";
102
+ attended: "attended";
103
+ }>>;
104
+ }, z.core.$strip>;
105
+ export type CreateDelegateBody = z.infer<typeof createDelegateSchema>;
106
+ export type UpdateDelegateBody = z.infer<typeof updateDelegateSchema>;
107
+ export type DelegateListQuery = z.infer<typeof delegateListQuerySchema>;
108
+ export type EnrollDelegateBody = z.infer<typeof enrollDelegateSchema>;
109
+ //# sourceMappingURL=validation-delegates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-delegates.d.ts","sourceRoot":"","sources":["../src/validation-delegates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,kBAAkB;;;;;;;;EAQ7B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;EAO/B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;EAAgE,CAAA;AAEnG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;iBAS/B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;iBAA2D,CAAA;AAE5F,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;iBAMlC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;iBAG/B,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACrE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACrE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ export const delegateRoleSchema = z.enum([
3
+ "attendee",
4
+ "speaker",
5
+ "sponsor",
6
+ "vip",
7
+ "staff",
8
+ "exhibitor",
9
+ "organizer",
10
+ ]);
11
+ export const delegateStatusSchema = z.enum([
12
+ "invited",
13
+ "registered",
14
+ "confirmed",
15
+ "checked_in",
16
+ "no_show",
17
+ "cancelled",
18
+ ]);
19
+ export const enrollmentStatusSchema = z.enum(["registered", "waitlisted", "attended", "cancelled"]);
20
+ export const createDelegateSchema = z.object({
21
+ programId: z.string().min(1),
22
+ personId: z.string().min(1).optional(),
23
+ bookingId: z.string().min(1).optional(),
24
+ role: delegateRoleSchema.default("attendee"),
25
+ status: delegateStatusSchema.default("invited"),
26
+ arrivalAt: z.string().datetime().optional(),
27
+ departureAt: z.string().datetime().optional(),
28
+ notes: z.string().optional(),
29
+ });
30
+ export const updateDelegateSchema = createDelegateSchema.partial().omit({ programId: true });
31
+ export const delegateListQuerySchema = z.object({
32
+ programId: z.string().min(1),
33
+ status: delegateStatusSchema.optional(),
34
+ role: delegateRoleSchema.optional(),
35
+ limit: z.coerce.number().int().min(1).max(500).default(100),
36
+ offset: z.coerce.number().int().min(0).default(0),
37
+ });
38
+ export const enrollDelegateSchema = z.object({
39
+ sessionId: z.string().min(1),
40
+ status: enrollmentStatusSchema.default("registered"),
41
+ });
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ export declare const createRoomingAssignmentSchema: z.ZodObject<{
3
+ programId: z.ZodString;
4
+ roomBlockId: z.ZodOptional<z.ZodString>;
5
+ roomTypeId: z.ZodOptional<z.ZodString>;
6
+ bedConfig: z.ZodOptional<z.ZodString>;
7
+ sharingGroupId: z.ZodOptional<z.ZodString>;
8
+ checkIn: z.ZodOptional<z.ZodString>;
9
+ checkOut: z.ZodOptional<z.ZodString>;
10
+ specialRequests: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export declare const updateRoomingAssignmentSchema: z.ZodObject<{
13
+ roomBlockId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
14
+ roomTypeId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
15
+ bedConfig: z.ZodOptional<z.ZodOptional<z.ZodString>>;
16
+ sharingGroupId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
17
+ checkIn: z.ZodOptional<z.ZodOptional<z.ZodString>>;
18
+ checkOut: z.ZodOptional<z.ZodOptional<z.ZodString>>;
19
+ specialRequests: z.ZodOptional<z.ZodOptional<z.ZodString>>;
20
+ }, z.core.$strip>;
21
+ export declare const roomingListQuerySchema: z.ZodObject<{
22
+ programId: z.ZodString;
23
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
24
+ offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
25
+ }, z.core.$strip>;
26
+ export declare const setRoomingDelegatesSchema: z.ZodObject<{
27
+ delegates: z.ZodArray<z.ZodObject<{
28
+ delegateId: z.ZodString;
29
+ isPrimary: z.ZodOptional<z.ZodBoolean>;
30
+ bedLabel: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>;
33
+ export type CreateRoomingAssignmentBody = z.infer<typeof createRoomingAssignmentSchema>;
34
+ export type UpdateRoomingAssignmentBody = z.infer<typeof updateRoomingAssignmentSchema>;
35
+ export type RoomingListQuery = z.infer<typeof roomingListQuerySchema>;
36
+ export type RoomingDelegateInput = z.infer<typeof setRoomingDelegatesSchema>["delegates"][number];
37
+ //# sourceMappingURL=validation-rooming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-rooming.d.ts","sourceRoot":"","sources":["../src/validation-rooming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,6BAA6B;;;;;;;;;iBASxC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;iBAEd,CAAA;AAE5B,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;iBASpC,CAAA;AAEF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACvF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACvF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ const isoDate = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "expected YYYY-MM-DD");
3
+ export const createRoomingAssignmentSchema = z.object({
4
+ programId: z.string().min(1),
5
+ roomBlockId: z.string().min(1).optional(),
6
+ roomTypeId: z.string().min(1).optional(),
7
+ bedConfig: z.string().optional(),
8
+ sharingGroupId: z.string().optional(),
9
+ checkIn: isoDate.optional(),
10
+ checkOut: isoDate.optional(),
11
+ specialRequests: z.string().optional(),
12
+ });
13
+ export const updateRoomingAssignmentSchema = createRoomingAssignmentSchema
14
+ .partial()
15
+ .omit({ programId: true });
16
+ export const roomingListQuerySchema = z.object({
17
+ programId: z.string().min(1),
18
+ limit: z.coerce.number().int().min(1).max(500).default(100),
19
+ offset: z.coerce.number().int().min(0).default(0),
20
+ });
21
+ export const setRoomingDelegatesSchema = z.object({
22
+ // Full replace of occupants; an empty array clears the room.
23
+ delegates: z.array(z.object({
24
+ delegateId: z.string().min(1),
25
+ isPrimary: z.boolean().optional(),
26
+ bedLabel: z.string().optional(),
27
+ })),
28
+ });
@@ -39,8 +39,8 @@ export declare const createSessionSchema: z.ZodObject<{
39
39
  export declare const updateSessionSchema: z.ZodObject<{
40
40
  notes: z.ZodOptional<z.ZodOptional<z.ZodString>>;
41
41
  capacity: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
42
- functionSpaceId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
43
42
  title: z.ZodOptional<z.ZodString>;
43
+ functionSpaceId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
44
44
  sessionType: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
45
45
  keynote: "keynote";
46
46
  breakout: "breakout";
@@ -0,0 +1,86 @@
1
+ DO $$ BEGIN
2
+ CREATE TYPE "public"."mice_delegate_role" AS ENUM('attendee', 'speaker', 'sponsor', 'vip', 'staff', 'exhibitor', 'organizer');
3
+ EXCEPTION WHEN duplicate_object THEN null;
4
+ END $$;--> statement-breakpoint
5
+ DO $$ BEGIN
6
+ CREATE TYPE "public"."mice_delegate_status" AS ENUM('invited', 'registered', 'confirmed', 'checked_in', 'no_show', 'cancelled');
7
+ EXCEPTION WHEN duplicate_object THEN null;
8
+ END $$;--> statement-breakpoint
9
+ DO $$ BEGIN
10
+ CREATE TYPE "public"."mice_enrollment_status" AS ENUM('registered', 'waitlisted', 'attended', 'cancelled');
11
+ EXCEPTION WHEN duplicate_object THEN null;
12
+ END $$;--> statement-breakpoint
13
+ CREATE TABLE "booking_mice_details" (
14
+ "booking_id" text PRIMARY KEY NOT NULL,
15
+ "program_id" text,
16
+ "delegate_id" text,
17
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
18
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
19
+ );
20
+ --> statement-breakpoint
21
+ CREATE TABLE "mice_delegate_session_enrollments" (
22
+ "id" text PRIMARY KEY NOT NULL,
23
+ "delegate_id" text NOT NULL,
24
+ "session_id" text NOT NULL,
25
+ "status" "mice_enrollment_status" DEFAULT 'registered' NOT NULL,
26
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
27
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
28
+ );
29
+ --> statement-breakpoint
30
+ CREATE TABLE "mice_program_delegates" (
31
+ "id" text PRIMARY KEY NOT NULL,
32
+ "program_id" text NOT NULL,
33
+ "person_id" text,
34
+ "booking_id" text,
35
+ "role" "mice_delegate_role" DEFAULT 'attendee' NOT NULL,
36
+ "status" "mice_delegate_status" DEFAULT 'invited' NOT NULL,
37
+ "arrival_at" timestamp with time zone,
38
+ "departure_at" timestamp with time zone,
39
+ "notes" text,
40
+ "metadata" jsonb,
41
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
42
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
43
+ );
44
+ --> statement-breakpoint
45
+ CREATE TABLE "mice_rooming_assignment_delegates" (
46
+ "id" text PRIMARY KEY NOT NULL,
47
+ "rooming_assignment_id" text NOT NULL,
48
+ "delegate_id" text NOT NULL,
49
+ "is_primary" boolean DEFAULT false NOT NULL,
50
+ "bed_label" text,
51
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
52
+ );
53
+ --> statement-breakpoint
54
+ CREATE TABLE "mice_rooming_assignments" (
55
+ "id" text PRIMARY KEY NOT NULL,
56
+ "program_id" text NOT NULL,
57
+ "room_block_id" text,
58
+ "room_type_id" text,
59
+ "bed_config" text,
60
+ "sharing_group_id" text,
61
+ "check_in" date,
62
+ "check_out" date,
63
+ "special_requests" text,
64
+ "metadata" jsonb,
65
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
66
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
67
+ );
68
+ --> statement-breakpoint
69
+ ALTER TABLE "mice_delegate_session_enrollments" ADD CONSTRAINT "mice_delegate_session_enrollments_delegate_id_mice_program_delegates_id_fk" FOREIGN KEY ("delegate_id") REFERENCES "public"."mice_program_delegates"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
70
+ ALTER TABLE "mice_delegate_session_enrollments" ADD CONSTRAINT "mice_delegate_session_enrollments_session_id_mice_program_sessions_id_fk" FOREIGN KEY ("session_id") REFERENCES "public"."mice_program_sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
71
+ ALTER TABLE "mice_program_delegates" ADD CONSTRAINT "mice_program_delegates_program_id_mice_programs_id_fk" FOREIGN KEY ("program_id") REFERENCES "public"."mice_programs"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
72
+ ALTER TABLE "mice_rooming_assignment_delegates" ADD CONSTRAINT "mice_rooming_assignment_delegates_rooming_assignment_id_mice_rooming_assignments_id_fk" FOREIGN KEY ("rooming_assignment_id") REFERENCES "public"."mice_rooming_assignments"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
73
+ ALTER TABLE "mice_rooming_assignment_delegates" ADD CONSTRAINT "mice_rooming_assignment_delegates_delegate_id_mice_program_delegates_id_fk" FOREIGN KEY ("delegate_id") REFERENCES "public"."mice_program_delegates"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
74
+ ALTER TABLE "mice_rooming_assignments" ADD CONSTRAINT "mice_rooming_assignments_program_id_mice_programs_id_fk" FOREIGN KEY ("program_id") REFERENCES "public"."mice_programs"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
75
+ CREATE INDEX "idx_bkmd_program" ON "booking_mice_details" USING btree ("program_id");--> statement-breakpoint
76
+ CREATE INDEX "idx_bkmd_delegate" ON "booking_mice_details" USING btree ("delegate_id");--> statement-breakpoint
77
+ CREATE INDEX "idx_mice_enrollments_session" ON "mice_delegate_session_enrollments" USING btree ("session_id");--> statement-breakpoint
78
+ CREATE UNIQUE INDEX "uidx_mice_enrollments_delegate_session" ON "mice_delegate_session_enrollments" USING btree ("delegate_id","session_id");--> statement-breakpoint
79
+ CREATE INDEX "idx_mice_program_delegates_program" ON "mice_program_delegates" USING btree ("program_id");--> statement-breakpoint
80
+ CREATE INDEX "idx_mice_program_delegates_program_status" ON "mice_program_delegates" USING btree ("program_id","status");--> statement-breakpoint
81
+ CREATE INDEX "idx_mice_program_delegates_person" ON "mice_program_delegates" USING btree ("person_id");--> statement-breakpoint
82
+ CREATE INDEX "idx_mice_program_delegates_booking" ON "mice_program_delegates" USING btree ("booking_id");--> statement-breakpoint
83
+ CREATE INDEX "idx_mice_rooming_assignment_delegates_assignment" ON "mice_rooming_assignment_delegates" USING btree ("rooming_assignment_id");--> statement-breakpoint
84
+ CREATE UNIQUE INDEX "uidx_mice_rooming_assignment_delegates_pair" ON "mice_rooming_assignment_delegates" USING btree ("rooming_assignment_id","delegate_id");--> statement-breakpoint
85
+ CREATE INDEX "idx_mice_rooming_assignments_program" ON "mice_rooming_assignments" USING btree ("program_id");--> statement-breakpoint
86
+ CREATE INDEX "idx_mice_rooming_assignments_room_block" ON "mice_rooming_assignments" USING btree ("room_block_id");
@@ -15,6 +15,13 @@
15
15
  "when": 1782153566121,
16
16
  "tag": "0001_mice_baseline",
17
17
  "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 2,
21
+ "version": "7",
22
+ "when": 1782157604027,
23
+ "tag": "0002_mice_baseline",
24
+ "breakpoints": true
18
25
  }
19
26
  ]
20
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/mice",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -23,6 +23,11 @@
23
23
  "types": "./dist/routes.d.ts",
24
24
  "import": "./dist/routes.js",
25
25
  "default": "./dist/routes.js"
26
+ },
27
+ "./booking-extension": {
28
+ "types": "./dist/booking-extension.d.ts",
29
+ "import": "./dist/booking-extension.js",
30
+ "default": "./dist/booking-extension.js"
26
31
  }
27
32
  },
28
33
  "dependencies": {
@@ -30,8 +35,8 @@
30
35
  "hono": "^4.12.10",
31
36
  "zod": "^4.3.6",
32
37
  "@voyant-travel/core": "^0.111.0",
33
- "@voyant-travel/db": "^0.109.1",
34
- "@voyant-travel/hono": "^0.116.0"
38
+ "@voyant-travel/hono": "^0.116.1",
39
+ "@voyant-travel/db": "^0.109.3"
35
40
  },
36
41
  "devDependencies": {
37
42
  "drizzle-kit": "^0.31.10",