diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx
index ccda720a2..a91aa9cb0 100644
--- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx
+++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx
@@ -1,4 +1,5 @@
import {
+ getPackages,
getProfileSafely,
getSelectedRoomAvailability,
} from "@/lib/trpc/memoizedRequests"
@@ -22,7 +23,13 @@ export default async function SummaryPage({
const { hotel, rooms, fromDate, toDate } =
getQueryParamsForEnterDetails(selectRoomParams)
- const { adults, children, roomTypeCode, rateCode } = rooms[0] // TODO: Handle multiple rooms
+ const {
+ adults,
+ children,
+ roomTypeCode,
+ rateCode,
+ packages: packageCodes,
+ } = rooms[0] // TODO: Handle multiple rooms
const availability = await getSelectedRoomAvailability({
hotelId: hotel,
@@ -34,6 +41,14 @@ export default async function SummaryPage({
roomTypeCode,
})
const user = await getProfileSafely()
+ const packages = await getPackages({
+ hotelId: hotel,
+ startDate: fromDate,
+ endDate: toDate,
+ adults,
+ children: children?.length,
+ packageCodes,
+ })
if (!availability) {
console.error("No hotel or availability data", availability)
@@ -64,6 +79,7 @@ export default async function SummaryPage({
},
}
+ console.log({ packages })
return (
<>
diff --git a/lib/trpc/memoizedRequests/index.ts b/lib/trpc/memoizedRequests/index.ts
index a90dc6907..407175703 100644
--- a/lib/trpc/memoizedRequests/index.ts
+++ b/lib/trpc/memoizedRequests/index.ts
@@ -8,7 +8,10 @@ import {
import { serverClient } from "../server"
-import type { BreackfastPackagesInput } from "@/types/requests/packages"
+import type {
+ BreackfastPackagesInput,
+ PackagesInput,
+} from "@/types/requests/packages"
export const getLocations = cache(async function getMemoizedLocations() {
return serverClient().hotel.locations.get()
@@ -144,6 +147,12 @@ export const getBreakfastPackages = cache(async function getMemoizedPackages(
return serverClient().hotel.packages.breakfast(input)
})
+export const getPackages = cache(async function getMemoizedPackages(
+ input: PackagesInput
+) {
+ return serverClient().hotel.packages.get(input)
+})
+
export const getBookingConfirmation = cache(
function getMemoizedBookingConfirmation(confirmationNumber: string) {
return serverClient().booking.confirmation({ confirmationNumber })
diff --git a/server/routers/hotels/input.ts b/server/routers/hotels/input.ts
index 6b52918f7..f6b78f1ac 100644
--- a/server/routers/hotels/input.ts
+++ b/server/routers/hotels/input.ts
@@ -68,3 +68,12 @@ export const getBreakfastPackageInputSchema = z.object({
.min(1, { message: "toDate is required" })
.pipe(z.coerce.date()),
})
+
+export const getRoomPackagesInputSchema = z.object({
+ hotelId: z.string(),
+ startDate: z.string(),
+ endDate: z.string(),
+ adults: z.number(),
+ children: z.number().optional().default(0),
+ packageCodes: z.array(z.string()).optional().default([]),
+})
diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts
index 32640cf62..aaacd60ae 100644
--- a/server/routers/hotels/output.ts
+++ b/server/routers/hotels/output.ts
@@ -825,7 +825,7 @@ export const apiLocationsSchema = z.object({
),
})
-const breakfastPackagePriceSchema = z.object({
+export const packagePriceSchema = z.object({
currency: z.nativeEnum(CurrencyEnum),
price: z.string(),
totalPrice: z.string(),
@@ -834,8 +834,8 @@ const breakfastPackagePriceSchema = z.object({
export const breakfastPackageSchema = z.object({
code: z.string(),
description: z.string(),
- localPrice: breakfastPackagePriceSchema,
- requestedPrice: breakfastPackagePriceSchema,
+ localPrice: packagePriceSchema,
+ requestedPrice: packagePriceSchema,
packageType: z.literal(PackageTypeEnum.BreakfastAdult),
})
@@ -852,3 +852,40 @@ export const breakfastPackagesSchema = z
.transform(({ data }) =>
data.attributes.packages.filter((pkg) => pkg.code.match(/^(BRF\d+)$/gm))
)
+
+export const packagesSchema = z.object({
+ code: z.nativeEnum(RoomPackageCodeEnum),
+ itemCode: z.string(),
+ description: z.string(),
+ localPrice: packagePriceSchema,
+ requestedPrice: packagePriceSchema,
+ inventories: z.array(
+ z.object({
+ date: z.string(),
+ total: z.number(),
+ available: z.number(),
+ })
+ ),
+})
+
+export const getRoomPackagesSchema = z
+ .object({
+ data: z.object({
+ attributes: z.object({
+ hotelId: z.number(),
+ packages: z.array(packagesSchema),
+ }),
+ relationships: z
+ .object({
+ links: z.array(
+ z.object({
+ url: z.string(),
+ type: z.string(),
+ })
+ ),
+ })
+ .optional(),
+ type: z.string(),
+ }),
+ })
+ .transform((data) => data.data.attributes.packages)
diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts
index d8a6ec2bc..9b0b97d59 100644
--- a/server/routers/hotels/query.ts
+++ b/server/routers/hotels/query.ts
@@ -28,15 +28,12 @@ import {
validateHotelPageRefs,
} from "../contentstack/hotelPage/utils"
import { getVerifiedUser, parsedUser } from "../user/query"
-import {
- getRoomPackagesInputSchema,
- getRoomPackagesSchema,
-} from "./schemas/packages"
import {
getBreakfastPackageInputSchema,
getHotelDataInputSchema,
getHotelsAvailabilityInputSchema,
getRatesInputSchema,
+ getRoomPackagesInputSchema,
getRoomsAvailabilityInputSchema,
getSelectedRoomAvailabilityInputSchema,
type HotelDataInput,
@@ -46,6 +43,7 @@ import {
getHotelDataSchema,
getHotelsAvailabilitySchema,
getRatesSchema,
+ getRoomPackagesSchema,
getRoomsAvailabilitySchema,
} from "./output"
import tempRatesData from "./tempRatesData.json"
diff --git a/server/routers/hotels/schemas/packages.ts b/server/routers/hotels/schemas/packages.ts
deleted file mode 100644
index 738da80ce..000000000
--- a/server/routers/hotels/schemas/packages.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { z } from "zod"
-
-import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
-import { CurrencyEnum } from "@/types/enums/currency"
-
-export const getRoomPackagesInputSchema = z.object({
- hotelId: z.string(),
- startDate: z.string(),
- endDate: z.string(),
- adults: z.number(),
- children: z.number().optional().default(0),
- packageCodes: z.array(z.string()).optional().default([]),
-})
-
-export const packagePriceSchema = z
- .object({
- currency: z.nativeEnum(CurrencyEnum),
- price: z.string(),
- totalPrice: z.string(),
- })
- .optional()
- .default({
- currency: CurrencyEnum.SEK,
- price: "0",
- totalPrice: "0",
- }) // TODO: Remove optional and default when the API change has been deployed
-
-export const packagesSchema = z.object({
- code: z.nativeEnum(RoomPackageCodeEnum),
- itemCode: z.string(),
- description: z.string(),
- localPrice: packagePriceSchema,
- requestedPrice: packagePriceSchema,
- inventories: z.array(
- z.object({
- date: z.string(),
- total: z.number(),
- available: z.number(),
- })
- ),
-})
-
-export const getRoomPackagesSchema = z
- .object({
- data: z.object({
- attributes: z.object({
- hotelId: z.number(),
- packages: z.array(packagesSchema),
- }),
- relationships: z
- .object({
- links: z.array(
- z.object({
- url: z.string(),
- type: z.string(),
- })
- ),
- })
- .optional(),
- type: z.string(),
- }),
- })
- .transform((data) => data.data.attributes.packages)
diff --git a/types/components/hotelReservation/selectRate/roomCard.ts b/types/components/hotelReservation/selectRate/roomCard.ts
index caf025524..0f76afb56 100644
--- a/types/components/hotelReservation/selectRate/roomCard.ts
+++ b/types/components/hotelReservation/selectRate/roomCard.ts
@@ -1,10 +1,10 @@
import { z } from "zod"
import {
+ packagePriceSchema,
RateDefinition,
RoomConfiguration,
} from "@/server/routers/hotels/output"
-import { packagePriceSchema } from "@/server/routers/hotels/schemas/packages"
import { RoomPriceSchema } from "./flexibilityOption"
import { Rate } from "./selectRate"
diff --git a/types/components/hotelReservation/selectRate/roomFilter.ts b/types/components/hotelReservation/selectRate/roomFilter.ts
index 8250e7f32..78980be83 100644
--- a/types/components/hotelReservation/selectRate/roomFilter.ts
+++ b/types/components/hotelReservation/selectRate/roomFilter.ts
@@ -3,7 +3,7 @@ import { z } from "zod"
import {
getRoomPackagesSchema,
packagesSchema,
-} from "@/server/routers/hotels/schemas/packages"
+} from "@/server/routers/hotels/output"
export enum RoomPackageCodeEnum {
PET_ROOM = "PETR",
diff --git a/types/requests/packages.ts b/types/requests/packages.ts
index 3d794e0f3..222a4970f 100644
--- a/types/requests/packages.ts
+++ b/types/requests/packages.ts
@@ -1,6 +1,12 @@
import { z } from "zod"
-import { getBreakfastPackageInputSchema } from "@/server/routers/hotels/input"
+import {
+ getBreakfastPackageInputSchema,
+ getRoomPackagesInputSchema,
+} from "@/server/routers/hotels/input"
export interface BreackfastPackagesInput
extends z.input {}
+
+export interface PackagesInput
+ extends z.input {}