Merged in fix/metadata-schema (pull request #2893)

fix: Updated metadata schema to handle transformed hotel data

* fix: Updated metadata schema to handle transformed hotel data


Approved-by: Linus Flood
This commit is contained in:
Erik Tiekstra
2025-10-01 11:33:58 +00:00
committed by Linus Flood
parent 57315baf97
commit 4f151b143e
4 changed files with 134 additions and 77 deletions

View File

@@ -7,11 +7,8 @@ import {
import { myStay } from "@scandic-hotels/common/constants/routes/myStay"
import { transformedImageVaultAssetSchema } from "@scandic-hotels/common/utils/imageVault"
import { attributesSchema as hotelAttributesSchema } from "../../../routers/hotels/schemas/hotel"
import { Country } from "../../../types/country"
import { RTETypeEnum } from "../../../types/RTEenums"
import { additionalDataAttributesSchema } from "../../hotels/schemas/hotel/include/additionalData"
import { imageSchema } from "../../hotels/schemas/image"
import { destinationFilterSchema } from "../schemas/destinationFilters"
import { systemSchema } from "../schemas/system"
@@ -42,15 +39,110 @@ const metaDataBlocksSchema = z
.object({
json: metaDataJsonSchema,
})
.optional()
.nullable(),
.nullish(),
})
.optional()
.nullable(),
.nullish(),
})
)
.optional()
.nullable()
.nullish()
const metaDataImageSchema = z.object({
src: z.string().nullish(),
altText: z.string().nullish(),
altText_En: z.string().nullish(),
})
const metaDataHotelDataSchema = z
.object({
name: z.string(),
detailedFacilities: z
.array(
z.object({
name: z.string(),
})
)
.nullish(),
healthFacilities: z
.array(
z
.object({
content: z
.object({
images: z.array(metaDataImageSchema),
})
.nullish(),
})
.nullish()
)
.nullish(),
translatedCityName: z.string(),
})
.nullish()
const metaDataAdditionalHotelDataSchema = z
.object({
gallery: z
.object({
heroImages: z.array(metaDataImageSchema).nullish(),
smallerImages: z.array(metaDataImageSchema).nullish(),
})
.nullish(),
hotelParking: z
.object({
nameInUrl: z.string().nullish(),
elevatorPitch: z.string().nullish(),
})
.nullish(),
healthAndFitness: z
.object({
nameInUrl: z.string().nullish(),
elevatorPitch: z.string().nullish(),
})
.nullish(),
hotelSpecialNeeds: z
.object({
nameInUrl: z.string().nullish(),
elevatorPitch: z.string().nullish(),
})
.nullish(),
meetingRooms: z
.object({
nameInUrl: z.string().nullish(),
elevatorPitch: z.string().nullish(),
})
.nullish(),
parkingImages: z
.object({
heroImages: z.array(metaDataImageSchema).nullish(),
})
.nullish(),
accessibility: z
.object({
heroImages: z.array(metaDataImageSchema).nullish(),
})
.nullish(),
conferencesAndMeetings: z
.object({
heroImages: z.array(metaDataImageSchema).nullish(),
})
.nullish(),
})
.nullish()
const metaDataHotelRestaurantsSchema = z
.array(
z.object({
nameInUrl: z.string().nullish(),
elevatorPitch: z.string().nullish(),
name: z.string().nullish(),
content: z
.object({
images: z.array(metaDataImageSchema).nullish(),
})
.nullish(),
})
)
.nullish()
export const seoMetadataSchema = z
.object({
@@ -120,45 +212,9 @@ export const rawMetadataSchema = z.object({
.string()
.nullish()
.transform((id) => id?.trim() || null),
hotelData: hotelAttributesSchema
.pick({
name: true,
detailedFacilities: true,
hotelContent: true,
healthFacilities: true,
})
.merge(
z.object({
translatedCityName: z.string(),
})
)
.nullish(),
additionalHotelData: additionalDataAttributesSchema
.pick({
gallery: true,
hotelParking: true,
healthAndFitness: true,
hotelSpecialNeeds: true,
meetingRooms: true,
parkingImages: true,
accessibility: true,
conferencesAndMeetings: true,
})
.nullish(),
hotelRestaurants: z
.array(
z.object({
nameInUrl: z.string().nullish(),
elevatorPitch: z.string().nullish(),
name: z.string().nullish(),
content: z
.object({
images: z.array(imageSchema).nullish(),
})
.nullish(),
})
)
.nullish(),
hotelData: metaDataHotelDataSchema,
additionalHotelData: metaDataAdditionalHotelDataSchema,
hotelRestaurants: metaDataHotelRestaurantsSchema,
subpageUrl: z.string().nullish(),
destinationData: z
.object({