56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
|
|
|
|
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([]),
|
|
})
|
|
|
|
const packagesSchema = z.array(
|
|
z.object({
|
|
code: z.enum([
|
|
RoomPackageCodeEnum.PETR,
|
|
RoomPackageCodeEnum.ALLG,
|
|
RoomPackageCodeEnum.ACCE,
|
|
]),
|
|
itemCode: z.string(),
|
|
description: z.string(),
|
|
currency: z.string(),
|
|
calculatedPrice: z.number(),
|
|
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: 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)
|