Merged in feat/SW-1540-Fetch-correct-data-from-the-API (pull request #1309)

feat(SW-1551): Update schema for booking

* feat(SW-1551): Update schema for booking

* feat(SW-1551): Non breaking changes


Approved-by: Michael Zetterberg
This commit is contained in:
Pontus Dreij
2025-02-11 15:37:28 +00:00
parent 72e8e7f1ab
commit 3ad5b9e73d

View File

@@ -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,
}))