import { z } from "zod" import { BedTypeEnum } from "@/constants/booking" // MUTATION export const createBookingSchema = z .object({ data: z.object({ attributes: z.object({ confirmationNumber: z.string(), cancellationNumber: z.string().nullable(), reservationStatus: z.string(), paymentUrl: z.string().nullable(), metadata: z.any(), // TODO: define metadata schema (not sure what it does) }), type: z.string(), id: z.string(), links: z.object({ self: z.object({ href: z.string().url(), meta: z.object({ method: z.string(), }), }), }), }), }) .transform((d) => ({ id: d.data.id, links: d.data.links, type: d.data.type, confirmationNumber: d.data.attributes.confirmationNumber, cancellationNumber: d.data.attributes.cancellationNumber, reservationStatus: d.data.attributes.reservationStatus, paymentUrl: d.data.attributes.paymentUrl, })) // QUERY const childrenAgesSchema = z.object({ age: z.number(), bedType: z.nativeEnum(BedTypeEnum), }) const guestSchema = z.object({ firstName: z.string(), lastName: z.string(), }) const packagesSchema = z.object({ accessibility: z.boolean(), allergyFriendly: z.boolean(), breakfast: z.boolean(), petFriendly: z.boolean(), }) export const bookingConfirmationSchema = z .object({ data: z.object({ attributes: z.object({ adults: z.number(), checkInDate: z.date({ coerce: true }), checkOutDate: z.date({ coerce: true }), createDateTime: z.date({ coerce: true }), childrenAges: z.array(childrenAgesSchema), computedReservationStatus: z.string(), confirmationNumber: z.string(), currencyCode: z.string(), guest: guestSchema, hasPayRouting: z.boolean(), hotelId: z.string(), packages: packagesSchema, rateCode: z.string(), reservationStatus: z.string(), totalPrice: z.number(), }), id: z.string(), type: z.literal("booking"), }), }) .transform(({ data }) => data.attributes)