feat: add router for filters

This commit is contained in:
Fredrik Thorsson
2024-07-12 12:10:54 +02:00
parent 10bb946a90
commit ebfe4d45dc
9 changed files with 109 additions and 16 deletions

View File

@@ -13,3 +13,7 @@ export const getHotelInputSchema = z.object({
export const getRatesInputSchema = z.object({
hotelId: z.string(),
})
export const getFiltersInputSchema = z.object({
hotelId: z.string(),
})

View File

@@ -481,3 +481,14 @@ const Rate = z.object({
export const getRatesSchema = z.array(Rate)
export type Rate = z.infer<typeof Rate>
const HotelFilter = z.object({
filter: z.object({
roomFacilities: z.array(z.string()),
hotelFacilities: z.array(z.string()),
hotelSurroundings: z.array(z.string()),
}),
})
export const getFiltersSchema = z.array(HotelFilter)
export type Filter = z.infer<typeof HotelFilter>

View File

@@ -2,8 +2,18 @@ import * as api from "@/lib/api"
import { badRequestError } from "@/server/errors/trpc"
import { publicProcedure, router } from "@/server/trpc"
import { getHotelInputSchema, getRatesInputSchema } from "./input"
import { getHotelDataSchema, getRatesSchema, RoomSchema } from "./output"
import {
getFiltersInputSchema,
getHotelInputSchema,
getRatesInputSchema,
} from "./input"
import {
getFiltersSchema,
getHotelDataSchema,
getRatesSchema,
RoomSchema,
} from "./output"
import tempFilterData from "./tempFilterData.json"
import tempHotelData from "./tempHotelData.json"
import tempRatesData from "./tempRatesData.json"
import { toApiLang } from "./utils"
@@ -90,4 +100,17 @@ export const hotelQueryRouter = router({
return validatedHotelData.data
}),
getFilters: publicProcedure
.input(getFiltersInputSchema)
.query(async ({ input, ctx }) => {
const validateFilterData = getFiltersSchema.safeParse(tempFilterData)
if (!validateFilterData.success) {
console.info(`Get Individual Rates Data - Verified Data Error`)
console.error(validateFilterData.error)
throw badRequestError()
}
return validateFilterData.data
}),
})

View File

@@ -0,0 +1,26 @@
[
{
"filter": {
"roomFacilities": ["Balcony", "Bathub", "View", "Conntecting doors"],
"hotelFacilities": [
"Parking inside",
"Parking outside",
"Parking electric",
"Sauna",
"Pool",
"Restaurant",
"Bar",
"Sky/rooftop bar",
"Gym",
"Coworking"
],
"hotelSurroundings": [
"Beach",
"Lake or sea",
"Hiking",
"Mountains",
"Golf course"
]
}
}
]