fix/SW-902-update-response-city-availability (pull request #917)

Fix/SW-902 update response city availability

* fix(SW-902): update response for API changes

* fix(SW-902): add total row for pricePerStay

* fix(SW-902): fix optional requestedPrice

* fix(SW-902): fix bookingCode output

* feat(SW-903): fix sorting


Approved-by: Pontus Dreij
Approved-by: Niclas Edenvin
This commit is contained in:
Bianca Widstam
2024-11-18 15:08:12 +00:00
committed by Joakim Jäderberg
parent e078c59ac1
commit d49e301634
27 changed files with 217 additions and 227 deletions

View File

@@ -8,9 +8,7 @@ export const getHotelsAvailabilityInputSchema = z.object({
roomStayEndDate: z.string(),
adults: z.number(),
children: z.string().optional(),
promotionCode: z.string().optional().default(""),
reservationProfileType: z.string().optional().default(""),
attachedProfileId: z.string().optional().default(""),
bookingCode: z.string().optional().default(""),
})
export const getRoomsAvailabilityInputSchema = z.object({
@@ -19,9 +17,7 @@ export const getRoomsAvailabilityInputSchema = z.object({
roomStayEndDate: z.string(),
adults: z.number(),
children: z.string().optional(),
promotionCode: z.string().optional(),
reservationProfileType: z.string().optional().default(""),
attachedProfileId: z.string().optional().default(""),
bookingCode: z.string().optional(),
rateCode: z.string().optional(),
})
@@ -31,9 +27,7 @@ export const getSelectedRoomAvailabilityInputSchema = z.object({
roomStayEndDate: z.string(),
adults: z.number(),
children: z.string().optional(),
promotionCode: z.string().optional(),
reservationProfileType: z.string().optional().default(""),
attachedProfileId: z.string().optional().default(""),
bookingCode: z.string().optional(),
rateCode: z.string(),
roomTypeCode: z.string(),
packageCodes: z.array(z.nativeEnum(RoomPackageCodeEnum)).optional(),

View File

@@ -491,22 +491,6 @@ const occupancySchema = z.object({
children: z.array(childrenSchema),
})
const bestPricePerStaySchema = z.object({
currency: z.string(),
// TODO: remove optional when API is ready
regularAmount: z.string().optional(),
// TODO: remove optional when API is ready
memberAmount: z.string().optional(),
})
const bestPricePerNightSchema = z.object({
currency: z.string(),
// TODO: remove optional when API is ready
regularAmount: z.string().optional(),
// TODO: remove optional when API is ready
memberAmount: z.string().optional(),
})
const linksSchema = z.object({
links: z.array(
z.object({
@@ -516,30 +500,6 @@ const linksSchema = z.object({
),
})
const hotelsAvailabilitySchema = z.object({
data: z.array(
z.object({
attributes: z.object({
checkInDate: z.string(),
checkOutDate: z.string(),
occupancy: occupancySchema.optional(),
status: z.string(),
hotelId: z.number(),
ratePlanSet: z.string().optional(),
bestPricePerStay: bestPricePerStaySchema.optional(),
bestPricePerNight: bestPricePerNightSchema.optional(),
}),
relationships: linksSchema.optional(),
type: z.string().optional(),
})
),
})
export const getHotelsAvailabilitySchema = hotelsAvailabilitySchema
export type HotelsAvailability = z.infer<typeof hotelsAvailabilitySchema>
export type HotelsAvailabilityPrices =
HotelsAvailability["data"][number]["attributes"]["bestPricePerNight"]
export const priceSchema = z.object({
pricePerNight: z.coerce.number(),
pricePerStay: z.coerce.number(),
@@ -550,7 +510,7 @@ export const productTypePriceSchema = z.object({
rateCode: z.string(),
rateType: z.string().optional(),
localPrice: priceSchema,
requestedPrice: priceSchema,
requestedPrice: priceSchema.optional(),
})
const productSchema = z.object({
@@ -560,6 +520,34 @@ const productSchema = z.object({
}),
})
const hotelsAvailabilitySchema = z.object({
data: z.array(
z.object({
attributes: z.object({
checkInDate: z.string(),
checkOutDate: z.string(),
occupancy: occupancySchema,
status: z.string(),
hotelId: z.number(),
productType: z
.object({
public: productTypePriceSchema.optional(),
member: productTypePriceSchema.optional(),
})
.optional(),
}),
relationships: linksSchema.optional(),
type: z.string().optional(),
})
),
})
export const getHotelsAvailabilitySchema = hotelsAvailabilitySchema
export type HotelsAvailability = z.infer<typeof hotelsAvailabilitySchema>
export type ProductType =
HotelsAvailability["data"][number]["attributes"]["productType"]
export type ProductTypePrices = z.infer<typeof productTypePriceSchema>
const roomConfigurationSchema = z.object({
status: z.string(),
roomTypeCode: z.string(),

View File

@@ -369,9 +369,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
attachedProfileId,
bookingCode,
} = input
const params: Record<string, string | number> = {
@@ -379,9 +377,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
...(children && { children }),
promotionCode,
reservationProfileType,
attachedProfileId,
bookingCode,
language: apiLang,
}
hotelsAvailabilityCounter.add(1, {
@@ -390,8 +386,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
})
console.info(
"api.hotels.hotelsAvailability start",
@@ -414,8 +409,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
error_type: "http_error",
error: JSON.stringify({
status: apiResponse.status,
@@ -446,8 +440,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
error_type: "validation_error",
error: JSON.stringify(validateAvailabilityData.error),
})
@@ -466,8 +459,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
})
console.info(
"api.hotels.hotelsAvailability success",
@@ -493,9 +485,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
attachedProfileId,
bookingCode,
rateCode,
} = input
@@ -504,9 +494,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
...(children && { children }),
promotionCode,
reservationProfileType,
attachedProfileId,
bookingCode,
}
roomsAvailabilityCounter.add(1, {
@@ -515,8 +503,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
})
console.info(
"api.hotels.roomsAvailability start",
@@ -540,8 +527,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
error_type: "http_error",
error: JSON.stringify({
status: apiResponse.status,
@@ -572,8 +558,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
error_type: "validation_error",
error: JSON.stringify(validateAvailabilityData.error),
})
@@ -592,8 +577,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
})
console.info(
"api.hotels.roomsAvailability success",
@@ -620,9 +604,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
attachedProfileId,
bookingCode,
rateCode,
roomTypeCode,
packageCodes,
@@ -633,9 +615,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
...(children && { children }),
promotionCode,
reservationProfileType,
attachedProfileId,
bookingCode,
language: toApiLang(ctx.lang),
}
@@ -645,8 +625,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
})
console.info(
"api.hotels.selectedRoomAvailability start",
@@ -670,8 +649,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
error_type: "http_error",
error: JSON.stringify({
status: apiResponseAvailability.status,
@@ -702,8 +680,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
error_type: "validation_error",
error: JSON.stringify(validateAvailabilityData.error),
})
@@ -797,8 +774,7 @@ export const hotelQueryRouter = router({
roomStayEndDate,
adults,
children,
promotionCode,
reservationProfileType,
bookingCode,
})
console.info(
"api.hotels.selectedRoomAvailability success",