diff --git a/server/routers/booking/output.ts b/server/routers/booking/output.ts index 07dfee4e1..88c0ea40f 100644 --- a/server/routers/booking/output.ts +++ b/server/routers/booking/output.ts @@ -63,9 +63,10 @@ export const createBookingSchema = z })) // QUERY -const extraBedTypesSchema = z.object({ +const childBedPreferencesSchema = z.object({ bedType: z.nativeEnum(ChildBedTypeEnum), quantity: z.number().int(), + code: z.string().nullable().default(""), }) const guestSchema = z.object({ @@ -76,13 +77,33 @@ const guestSchema = z.object({ phoneNumber: phoneValidator().nullable().default(""), }) -const packageSchema = z.object({ - code: z.string().nullable().default(""), - currency: z.string(), - quantity: z.number().int(), - totalPrice: z.number(), - totalQuantity: z.number().int(), - unitPrice: z.number(), +const packageSchema = z + .object({ + description: z.string().nullable().default(""), + code: z.string().nullable().default(""), + price: z.object({ + unit: z.number().int().nullable(), + unitPrice: z.number(), + totalPrice: z.number().nullable(), + totalUnit: z.number().int().nullable(), + currency: z.string().default(""), + points: z.number().int().nullable(), + }), + }) + .transform((packageData) => ({ + description: packageData.description, + code: packageData.code, + currency: packageData.price.currency, + points: packageData.price.points, + totalPrice: packageData.price.totalPrice ?? 0, + totalUnit: packageData.price.totalUnit ?? 0, + unit: packageData.price.unit ?? 0, + unitPrice: packageData.price.unitPrice, + })) + +const ancillarySchema = z.object({ + comment: z.string().default(""), + deliveryTime: z.string().default(""), }) const rateDefinitionSchema = z.object({ @@ -96,20 +117,37 @@ const rateDefinitionSchema = z.object({ title: z.string().nullable().default(""), }) +const linkedReservationsSchema = z.object({ + confirmationNumber: z.string().default(""), + hotelId: z.string().default(""), + checkInDate: z.string().datetime(), + checkOutDate: z.string().datetime(), + cancellationNumber: z.string().default(""), + roomTypeCode: z.string().default(""), + adults: z.number().int(), + children: z.number().int(), + guaranteeCode: z.array(z.string()).default([]), + profileId: z.string().default(""), +}) + export const bookingConfirmationSchema = z .object({ data: z.object({ attributes: z.object({ adults: z.number().int(), + ancillary: ancillarySchema, checkInDate: z.date({ coerce: true }), checkOutDate: z.date({ coerce: true }), - createDateTime: z.date({ coerce: true }), + childBedPreferences: z.array(childBedPreferencesSchema).default([]), childrenAges: z.array(z.number().int()).default([]), - extraBedTypes: z.array(extraBedTypesSchema).default([]), + canChangeDate: z.boolean(), computedReservationStatus: z.string().nullable().default(""), confirmationNumber: z.string().nullable().default(""), + createDateTime: z.date({ coerce: true }), currencyCode: z.string(), guest: guestSchema, + isGuaranteedForLateArrival: z.boolean(), + linkedReservations: z.array(linkedReservationsSchema).default([]), hotelId: z.string(), packages: z.array(packageSchema).default([]), rateDefinition: rateDefinitionSchema, @@ -125,4 +163,7 @@ export const bookingConfirmationSchema = z type: z.literal("booking"), }), }) - .transform(({ data }) => data.attributes) + .transform(({ data }) => ({ + ...data.attributes, + extraBedTypes: data.attributes.childBedPreferences, + }))