@voyant-travel/mice 0.2.0 → 0.4.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.
Files changed (44) hide show
  1. package/dist/booking-extension.d.ts +130 -0
  2. package/dist/booking-extension.d.ts.map +1 -0
  3. package/dist/booking-extension.js +83 -0
  4. package/dist/index.d.ts +14 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +37 -0
  7. package/dist/routes.d.ts +856 -5
  8. package/dist/routes.d.ts.map +1 -1
  9. package/dist/routes.js +167 -0
  10. package/dist/schema-delegates.d.ts +340 -0
  11. package/dist/schema-delegates.d.ts.map +1 -0
  12. package/dist/schema-delegates.js +76 -0
  13. package/dist/schema-rfp.d.ts +790 -0
  14. package/dist/schema-rfp.d.ts.map +1 -0
  15. package/dist/schema-rfp.js +104 -0
  16. package/dist/schema-rooming.d.ts +333 -0
  17. package/dist/schema-rooming.d.ts.map +1 -0
  18. package/dist/schema-rooming.js +47 -0
  19. package/dist/schema.d.ts +5 -0
  20. package/dist/schema.d.ts.map +1 -1
  21. package/dist/schema.js +4 -0
  22. package/dist/service-delegates.d.ts +40 -0
  23. package/dist/service-delegates.d.ts.map +1 -0
  24. package/dist/service-delegates.js +107 -0
  25. package/dist/service-rfp.d.ts +89 -0
  26. package/dist/service-rfp.d.ts.map +1 -0
  27. package/dist/service-rfp.js +198 -0
  28. package/dist/service-rooming.d.ts +50 -0
  29. package/dist/service-rooming.d.ts.map +1 -0
  30. package/dist/service-rooming.js +102 -0
  31. package/dist/validation-delegates.d.ts +109 -0
  32. package/dist/validation-delegates.d.ts.map +1 -0
  33. package/dist/validation-delegates.js +41 -0
  34. package/dist/validation-rfp.d.ts +110 -0
  35. package/dist/validation-rfp.d.ts.map +1 -0
  36. package/dist/validation-rfp.js +61 -0
  37. package/dist/validation-rooming.d.ts +37 -0
  38. package/dist/validation-rooming.d.ts.map +1 -0
  39. package/dist/validation-rooming.js +28 -0
  40. package/dist/validation-sessions.d.ts +1 -1
  41. package/migrations/0002_mice_baseline.sql +86 -0
  42. package/migrations/0003_mice_baseline.sql +84 -0
  43. package/migrations/meta/_journal.json +14 -0
  44. package/package.json +8 -3
@@ -0,0 +1,110 @@
1
+ import { z } from "zod";
2
+ export declare const rfpStatusSchema: z.ZodEnum<{
3
+ cancelled: "cancelled";
4
+ draft: "draft";
5
+ issued: "issued";
6
+ closed: "closed";
7
+ awarded: "awarded";
8
+ }>;
9
+ export declare const bidStatusSchema: z.ZodEnum<{
10
+ draft: "draft";
11
+ submitted: "submitted";
12
+ under_review: "under_review";
13
+ accepted: "accepted";
14
+ rejected: "rejected";
15
+ }>;
16
+ export declare const createRfpSchema: z.ZodObject<{
17
+ programId: z.ZodString;
18
+ title: z.ZodString;
19
+ requirements: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
20
+ status: z.ZodDefault<z.ZodEnum<{
21
+ cancelled: "cancelled";
22
+ draft: "draft";
23
+ issued: "issued";
24
+ closed: "closed";
25
+ }>>;
26
+ issuedAt: z.ZodOptional<z.ZodString>;
27
+ dueAt: z.ZodOptional<z.ZodString>;
28
+ notes: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strip>;
30
+ export declare const updateRfpSchema: z.ZodObject<{
31
+ status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
32
+ cancelled: "cancelled";
33
+ draft: "draft";
34
+ issued: "issued";
35
+ closed: "closed";
36
+ }>>>;
37
+ notes: z.ZodOptional<z.ZodOptional<z.ZodString>>;
38
+ title: z.ZodOptional<z.ZodString>;
39
+ requirements: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
40
+ issuedAt: z.ZodOptional<z.ZodOptional<z.ZodString>>;
41
+ dueAt: z.ZodOptional<z.ZodOptional<z.ZodString>>;
42
+ }, z.core.$strip>;
43
+ export declare const rfpListQuerySchema: z.ZodObject<{
44
+ programId: z.ZodString;
45
+ status: z.ZodOptional<z.ZodEnum<{
46
+ cancelled: "cancelled";
47
+ draft: "draft";
48
+ issued: "issued";
49
+ closed: "closed";
50
+ awarded: "awarded";
51
+ }>>;
52
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
53
+ offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
54
+ }, z.core.$strip>;
55
+ export declare const inviteSupplierSchema: z.ZodObject<{
56
+ supplierId: z.ZodString;
57
+ }, z.core.$strip>;
58
+ export declare const createBidSchema: z.ZodObject<{
59
+ supplierId: z.ZodString;
60
+ status: z.ZodDefault<z.ZodEnum<{
61
+ draft: "draft";
62
+ submitted: "submitted";
63
+ under_review: "under_review";
64
+ }>>;
65
+ totalCents: z.ZodOptional<z.ZodNumber>;
66
+ currency: z.ZodOptional<z.ZodString>;
67
+ proposalDoc: z.ZodOptional<z.ZodString>;
68
+ validUntil: z.ZodOptional<z.ZodString>;
69
+ notes: z.ZodOptional<z.ZodString>;
70
+ }, z.core.$strip>;
71
+ export declare const updateBidSchema: z.ZodObject<{
72
+ currency: z.ZodOptional<z.ZodOptional<z.ZodString>>;
73
+ status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
74
+ draft: "draft";
75
+ submitted: "submitted";
76
+ under_review: "under_review";
77
+ }>>>;
78
+ notes: z.ZodOptional<z.ZodOptional<z.ZodString>>;
79
+ totalCents: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
80
+ proposalDoc: z.ZodOptional<z.ZodOptional<z.ZodString>>;
81
+ validUntil: z.ZodOptional<z.ZodOptional<z.ZodString>>;
82
+ }, z.core.$strip>;
83
+ export declare const setBidLinesSchema: z.ZodObject<{
84
+ lines: z.ZodArray<z.ZodObject<{
85
+ requirementRef: z.ZodOptional<z.ZodString>;
86
+ description: z.ZodOptional<z.ZodString>;
87
+ quantity: z.ZodDefault<z.ZodNumber>;
88
+ unitCents: z.ZodOptional<z.ZodNumber>;
89
+ totalCents: z.ZodOptional<z.ZodNumber>;
90
+ }, z.core.$strip>>;
91
+ }, z.core.$strip>;
92
+ export declare const addBidEvaluationSchema: z.ZodObject<{
93
+ criterion: z.ZodString;
94
+ weight: z.ZodOptional<z.ZodNumber>;
95
+ score: z.ZodOptional<z.ZodNumber>;
96
+ notes: z.ZodOptional<z.ZodString>;
97
+ evaluatedBy: z.ZodOptional<z.ZodString>;
98
+ }, z.core.$strip>;
99
+ export declare const awardRfpSchema: z.ZodObject<{
100
+ bidId: z.ZodString;
101
+ }, z.core.$strip>;
102
+ export type CreateRfpBody = z.infer<typeof createRfpSchema>;
103
+ export type UpdateRfpBody = z.infer<typeof updateRfpSchema>;
104
+ export type RfpListQuery = z.infer<typeof rfpListQuerySchema>;
105
+ export type InviteSupplierBody = z.infer<typeof inviteSupplierSchema>;
106
+ export type CreateBidBody = z.infer<typeof createBidSchema>;
107
+ export type UpdateBidBody = z.infer<typeof updateBidSchema>;
108
+ export type SetBidLinesBody = z.infer<typeof setBidLinesSchema>;
109
+ export type AddBidEvaluationBody = z.infer<typeof addBidEvaluationSchema>;
110
+ //# sourceMappingURL=validation-rfp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-rfp.d.ts","sourceRoot":"","sources":["../src/validation-rfp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,eAAe;;;;;;EAAgE,CAAA;AAC5F,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAA;AAOF,eAAO,MAAM,eAAe;;;;;;;;;;;;;iBAQ1B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;iBAAsD,CAAA;AAElF,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAK7B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;iBAE/B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;iBAQ1B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;iBAAuD,CAAA;AAEnF,eAAO,MAAM,iBAAiB;;;;;;;;iBAU5B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;iBAMjC,CAAA;AAEF,eAAO,MAAM,cAAc;;iBAEzB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACrE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC/D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ export const rfpStatusSchema = z.enum(["draft", "issued", "closed", "awarded", "cancelled"]);
3
+ export const bidStatusSchema = z.enum([
4
+ "draft",
5
+ "submitted",
6
+ "under_review",
7
+ "accepted",
8
+ "rejected",
9
+ ]);
10
+ // `awarded` (RFP) and `accepted`/`rejected` (bid) are award-controlled — they may
11
+ // only be reached through the atomic `awardRfp` flow, never generic create/update.
12
+ const rfpEditableStatusSchema = z.enum(["draft", "issued", "closed", "cancelled"]);
13
+ const bidEditableStatusSchema = z.enum(["draft", "submitted", "under_review"]);
14
+ export const createRfpSchema = z.object({
15
+ programId: z.string().min(1),
16
+ title: z.string().min(1),
17
+ requirements: z.record(z.string(), z.unknown()).optional(),
18
+ status: rfpEditableStatusSchema.default("draft"),
19
+ issuedAt: z.string().datetime().optional(),
20
+ dueAt: z.string().datetime().optional(),
21
+ notes: z.string().optional(),
22
+ });
23
+ export const updateRfpSchema = createRfpSchema.partial().omit({ programId: true });
24
+ export const rfpListQuerySchema = z.object({
25
+ programId: z.string().min(1),
26
+ status: rfpStatusSchema.optional(),
27
+ limit: z.coerce.number().int().min(1).max(200).default(50),
28
+ offset: z.coerce.number().int().min(0).default(0),
29
+ });
30
+ export const inviteSupplierSchema = z.object({
31
+ supplierId: z.string().min(1),
32
+ });
33
+ export const createBidSchema = z.object({
34
+ supplierId: z.string().min(1),
35
+ status: bidEditableStatusSchema.default("draft"),
36
+ totalCents: z.number().int().min(0).optional(),
37
+ currency: z.string().optional(),
38
+ proposalDoc: z.string().optional(),
39
+ validUntil: z.string().datetime().optional(),
40
+ notes: z.string().optional(),
41
+ });
42
+ export const updateBidSchema = createBidSchema.partial().omit({ supplierId: true });
43
+ export const setBidLinesSchema = z.object({
44
+ lines: z.array(z.object({
45
+ requirementRef: z.string().optional(),
46
+ description: z.string().optional(),
47
+ quantity: z.number().int().min(1).default(1),
48
+ unitCents: z.number().int().min(0).optional(),
49
+ totalCents: z.number().int().min(0).optional(),
50
+ })),
51
+ });
52
+ export const addBidEvaluationSchema = z.object({
53
+ criterion: z.string().min(1),
54
+ weight: z.number().int().min(0).optional(),
55
+ score: z.number().int().min(0).optional(),
56
+ notes: z.string().optional(),
57
+ evaluatedBy: z.string().optional(),
58
+ });
59
+ export const awardRfpSchema = z.object({
60
+ bidId: z.string().min(1),
61
+ });
@@ -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");
@@ -0,0 +1,84 @@
1
+ DO $$ BEGIN
2
+ CREATE TYPE "public"."mice_bid_status" AS ENUM('draft', 'submitted', 'under_review', 'accepted', 'rejected');
3
+ EXCEPTION WHEN duplicate_object THEN null;
4
+ END $$;--> statement-breakpoint
5
+ DO $$ BEGIN
6
+ CREATE TYPE "public"."mice_rfp_invitation_status" AS ENUM('invited', 'viewed', 'declined', 'responded');
7
+ EXCEPTION WHEN duplicate_object THEN null;
8
+ END $$;--> statement-breakpoint
9
+ DO $$ BEGIN
10
+ CREATE TYPE "public"."mice_rfp_status" AS ENUM('draft', 'issued', 'closed', 'awarded', 'cancelled');
11
+ EXCEPTION WHEN duplicate_object THEN null;
12
+ END $$;--> statement-breakpoint
13
+ CREATE TABLE "mice_bid_evaluations" (
14
+ "id" text PRIMARY KEY NOT NULL,
15
+ "bid_id" text NOT NULL,
16
+ "criterion" text NOT NULL,
17
+ "weight" integer,
18
+ "score" integer,
19
+ "notes" text,
20
+ "evaluated_by" text,
21
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
22
+ );
23
+ --> statement-breakpoint
24
+ CREATE TABLE "mice_bid_lines" (
25
+ "id" text PRIMARY KEY NOT NULL,
26
+ "bid_id" text NOT NULL,
27
+ "requirement_ref" text,
28
+ "description" text,
29
+ "quantity" integer DEFAULT 1 NOT NULL,
30
+ "unit_cents" integer,
31
+ "total_cents" integer,
32
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
33
+ );
34
+ --> statement-breakpoint
35
+ CREATE TABLE "mice_bids" (
36
+ "id" text PRIMARY KEY NOT NULL,
37
+ "rfp_id" text NOT NULL,
38
+ "supplier_id" text NOT NULL,
39
+ "status" "mice_bid_status" DEFAULT 'draft' NOT NULL,
40
+ "total_cents" integer,
41
+ "currency" text,
42
+ "proposal_doc" text,
43
+ "valid_until" timestamp with time zone,
44
+ "notes" text,
45
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
46
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
47
+ );
48
+ --> statement-breakpoint
49
+ CREATE TABLE "mice_rfp_invitations" (
50
+ "id" text PRIMARY KEY NOT NULL,
51
+ "rfp_id" text NOT NULL,
52
+ "supplier_id" text NOT NULL,
53
+ "status" "mice_rfp_invitation_status" DEFAULT 'invited' NOT NULL,
54
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
55
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
56
+ );
57
+ --> statement-breakpoint
58
+ CREATE TABLE "mice_rfps" (
59
+ "id" text PRIMARY KEY NOT NULL,
60
+ "program_id" text NOT NULL,
61
+ "title" text NOT NULL,
62
+ "requirements" jsonb,
63
+ "status" "mice_rfp_status" DEFAULT 'draft' NOT NULL,
64
+ "issued_at" timestamp with time zone,
65
+ "due_at" timestamp with time zone,
66
+ "notes" text,
67
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
68
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
69
+ );
70
+ --> statement-breakpoint
71
+ ALTER TABLE "mice_bid_evaluations" ADD CONSTRAINT "mice_bid_evaluations_bid_id_mice_bids_id_fk" FOREIGN KEY ("bid_id") REFERENCES "public"."mice_bids"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
72
+ ALTER TABLE "mice_bid_lines" ADD CONSTRAINT "mice_bid_lines_bid_id_mice_bids_id_fk" FOREIGN KEY ("bid_id") REFERENCES "public"."mice_bids"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
73
+ ALTER TABLE "mice_bids" ADD CONSTRAINT "mice_bids_rfp_id_mice_rfps_id_fk" FOREIGN KEY ("rfp_id") REFERENCES "public"."mice_rfps"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
74
+ ALTER TABLE "mice_rfp_invitations" ADD CONSTRAINT "mice_rfp_invitations_rfp_id_mice_rfps_id_fk" FOREIGN KEY ("rfp_id") REFERENCES "public"."mice_rfps"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
75
+ ALTER TABLE "mice_rfps" ADD CONSTRAINT "mice_rfps_program_id_mice_programs_id_fk" FOREIGN KEY ("program_id") REFERENCES "public"."mice_programs"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
76
+ CREATE INDEX "idx_mice_bid_evaluations_bid" ON "mice_bid_evaluations" USING btree ("bid_id");--> statement-breakpoint
77
+ CREATE INDEX "idx_mice_bid_lines_bid" ON "mice_bid_lines" USING btree ("bid_id");--> statement-breakpoint
78
+ CREATE INDEX "idx_mice_bids_rfp" ON "mice_bids" USING btree ("rfp_id");--> statement-breakpoint
79
+ CREATE INDEX "idx_mice_bids_supplier" ON "mice_bids" USING btree ("supplier_id");--> statement-breakpoint
80
+ CREATE INDEX "idx_mice_bids_status" ON "mice_bids" USING btree ("status");--> statement-breakpoint
81
+ CREATE INDEX "idx_mice_rfp_invitations_supplier" ON "mice_rfp_invitations" USING btree ("supplier_id");--> statement-breakpoint
82
+ CREATE UNIQUE INDEX "uidx_mice_rfp_invitations_rfp_supplier" ON "mice_rfp_invitations" USING btree ("rfp_id","supplier_id");--> statement-breakpoint
83
+ CREATE INDEX "idx_mice_rfps_program" ON "mice_rfps" USING btree ("program_id");--> statement-breakpoint
84
+ CREATE INDEX "idx_mice_rfps_status" ON "mice_rfps" USING btree ("status");
@@ -15,6 +15,20 @@
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
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "7",
29
+ "when": 1782181473510,
30
+ "tag": "0003_mice_baseline",
31
+ "breakpoints": true
18
32
  }
19
33
  ]
20
34
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/mice",
3
- "version": "0.2.0",
3
+ "version": "0.4.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/db": "^0.109.4",
39
+ "@voyant-travel/hono": "^0.116.1"
35
40
  },
36
41
  "devDependencies": {
37
42
  "drizzle-kit": "^0.31.10",