diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index 97a811508..bf6fbeca7 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -3,11 +3,7 @@ import { z } from "zod" import { ChildBedTypeEnum, type PaymentMethodEnum } from "@/constants/booking" import { toLang } from "@/server/utils" -import { - imageMetaDataSchema, - imageSchema, - imageSizesSchema, -} from "./schemas/image" +import { imageSchema } from "./schemas/image" import { restaurantSchema } from "./schemas/restaurants" import { roomSchema } from "./schemas/room" import { specialAlertsSchema } from "./schemas/specialAlerts" @@ -104,25 +100,7 @@ const locationSchema = z.object({ }) const hotelContentSchema = z.object({ - images: z - .object({ - metaData: imageMetaDataSchema, - imageSizes: imageSizesSchema, - }) - .default({ - metaData: { - title: "default image", - altText: "default image", - altText_En: "default image", - copyRight: "default image", - }, - imageSizes: { - tiny: "https://placehold.co/1280x720", - small: "https://placehold.co/1280x720", - medium: "https://placehold.co/1280x720", - large: "https://placehold.co/1280x720", - }, - }), + images: imageSchema, texts: z.object({ facilityInformation: z.string().optional(), surroundingInformation: z.string(), @@ -156,12 +134,7 @@ const detailedFacilitySchema = z.object({ export const facilitySchema = z.object({ headingText: z.string().default(""), - heroImages: z.array( - z.object({ - metaData: imageMetaDataSchema, - imageSizes: imageSizesSchema, - }) - ), + heroImages: z.array(imageSchema), }) export const gallerySchema = z.object({ diff --git a/server/routers/hotels/schemas/image.ts b/server/routers/hotels/schemas/image.ts index 03f092d3a..2674c1d89 100644 --- a/server/routers/hotels/schemas/image.ts +++ b/server/routers/hotels/schemas/image.ts @@ -1,20 +1,44 @@ import { z } from "zod" -export const imageSizesSchema = z.object({ +const imageSizesSchema = z.object({ tiny: z.string(), small: z.string(), medium: z.string(), large: z.string(), }) -export const imageMetaDataSchema = z.object({ +const imageMetaDataSchema = z.object({ title: z.string(), altText: z.string(), altText_En: z.string(), copyRight: z.string(), }) -export const imageSchema = z.object({ - metaData: imageMetaDataSchema, - imageSizes: imageSizesSchema, -}) +const DEFAULT_IMAGE_OBJ = { + metaData: { + title: "Default image", + altText: "Default image", + altText_En: "Default image", + copyRight: "Default image", + }, + imageSizes: { + tiny: "https://placehold.co/1280x720", + small: "https://placehold.co/1280x720", + medium: "https://placehold.co/1280x720", + large: "https://placehold.co/1280x720", + }, +} + +export const imageSchema = z + .object({ + metaData: imageMetaDataSchema, + imageSizes: imageSizesSchema, + }) + .default(DEFAULT_IMAGE_OBJ) + .nullable() + .transform((val) => { + if (!val) { + return DEFAULT_IMAGE_OBJ + } + return val + }) diff --git a/server/routers/hotels/schemas/room.ts b/server/routers/hotels/schemas/room.ts index bf8947412..a9e972d06 100644 --- a/server/routers/hotels/schemas/room.ts +++ b/server/routers/hotels/schemas/room.ts @@ -1,14 +1,9 @@ import { z } from "zod" -import { imageMetaDataSchema, imageSizesSchema } from "./image" +import { imageSchema } from "./image" const roomContentSchema = z.object({ - images: z.array( - z.object({ - metaData: imageMetaDataSchema, - imageSizes: imageSizesSchema, - }) - ), + images: z.array(imageSchema), texts: z.object({ descriptions: z.object({ short: z.string().optional(), diff --git a/server/routers/user/output.ts b/server/routers/user/output.ts index b37962aab..815120881 100644 --- a/server/routers/user/output.ts +++ b/server/routers/user/output.ts @@ -3,6 +3,8 @@ import { z } from "zod" import { countriesMap } from "@/components/TempDesignSystem/Form/Country/countries" import { getMembership } from "@/utils/user" +import { imageSchema } from "../hotels/schemas/image" + export const membershipSchema = z.object({ currentPoints: z.number(), expirationDate: z.string(), @@ -60,20 +62,7 @@ export const getStaysSchema = z.object({ hotelOperaId: z.string(), hotelInformation: z.object({ hotelContent: z.object({ - images: z.object({ - metaData: z.object({ - title: z.string(), - altText: z.string(), - altText_En: z.string(), - copyRight: z.string(), - }), - imageSizes: z.object({ - tiny: z.string(), - small: z.string(), - medium: z.string(), - large: z.string(), - }), - }), + images: imageSchema, }), hotelName: z.string(), cityName: z.string().nullable(), @@ -140,20 +129,7 @@ export const getFriendTransactionsSchema = z.object({ city: z.string().default(""), name: z.string().default(""), hotelContent: z.object({ - images: z.object({ - metaData: z.object({ - title: z.string(), - altText: z.string(), - altText_En: z.string(), - copyRight: z.string(), - }), - imageSizes: z.object({ - tiny: z.string(), - small: z.string(), - medium: z.string(), - large: z.string(), - }), - }), + images: imageSchema, }), }) .optional(), diff --git a/types/components/hotelReservation/selectHotel/map.ts b/types/components/hotelReservation/selectHotel/map.ts index 30153aac0..cb7cfbcc0 100644 --- a/types/components/hotelReservation/selectHotel/map.ts +++ b/types/components/hotelReservation/selectHotel/map.ts @@ -2,10 +2,7 @@ import type { z } from "zod" import type { Coordinates } from "@/types/components/maps/coordinates" import type { Location } from "@/types/trpc/routers/hotel/locations" -import type { - imageMetaDataSchema, - imageSizesSchema, -} from "@/server/routers/hotels/schemas/image" +import type { imageSchema } from "@/server/routers/hotels/schemas/image" import type { Child } from "../../bookingWidget/guestsRoomsPicker" import type { HotelData } from "./hotelCardListingProps" import type { CategorizedFilters, Filter } from "./hotelFilters" @@ -24,8 +21,8 @@ export interface SelectHotelMapProps { cityCoordinates: Coordinates } -type ImageSizes = z.infer -type ImageMetaData = z.infer +type ImageSizes = z.infer["imageSizes"] +type ImageMetaData = z.infer["metaData"] export type HotelPin = { name: string diff --git a/types/hotel.ts b/types/hotel.ts index 78b79bea7..0ccdaecf7 100644 --- a/types/hotel.ts +++ b/types/hotel.ts @@ -1,19 +1,19 @@ -import { z } from "zod" +import type { z } from "zod" -import { +import type { checkinSchema, facilitySchema, getHotelDataSchema, parkingSchema, pointOfInterestSchema, } from "@/server/routers/hotels/output" -import { imageSchema } from "@/server/routers/hotels/schemas/image" -import { +import type { imageSchema } from "@/server/routers/hotels/schemas/image" +import type { restaurantDaySchema, restaurantOpeningHoursSchema, restaurantSchema, } from "@/server/routers/hotels/schemas/restaurants" -import { roomSchema } from "@/server/routers/hotels/schemas/room" +import type { roomSchema } from "@/server/routers/hotels/schemas/room" export type HotelData = z.output