feat(SW-70): Create TRPC route to get rates
This commit is contained in:
@@ -6,3 +6,7 @@ export const getHotelInputSchema = z.object({
|
||||
hotelId: z.string(),
|
||||
language: z.nativeEnum(Lang),
|
||||
})
|
||||
|
||||
export const getRatesInputSchema = z.object({
|
||||
hotelId: z.string(),
|
||||
})
|
||||
|
||||
@@ -391,3 +391,17 @@ export const getHotelDataSchema = z.object({
|
||||
// - Example "included" data available in our tempHotelData file.
|
||||
// included: z.any(),
|
||||
})
|
||||
|
||||
const Rate = z.object({
|
||||
id: z.number(),
|
||||
name: z.string(),
|
||||
description: z.string(),
|
||||
size: z.string(),
|
||||
pricePerNight: z.number(),
|
||||
currency: z.string(),
|
||||
imageSrc: z.string(),
|
||||
})
|
||||
|
||||
export const getRatesSchema = z.array(Rate)
|
||||
|
||||
export type Rate = z.infer<typeof Rate>
|
||||
|
||||
@@ -2,9 +2,10 @@ import * as api from "@/lib/api"
|
||||
import { badRequestError } from "@/server/errors/trpc"
|
||||
import { publicProcedure, router } from "@/server/trpc"
|
||||
|
||||
import { getHotelInputSchema } from "./input"
|
||||
import { getHotelDataSchema } from "./output"
|
||||
import { getHotelInputSchema, getRatesInputSchema } from "./input"
|
||||
import { getHotelDataSchema, getRatesSchema } from "./output"
|
||||
import tempHotelData from "./tempHotelData.json"
|
||||
import tempRatesData from "./tempRatesData.json"
|
||||
import { toApiLang } from "./utils"
|
||||
|
||||
export const hotelQueryRouter = router({
|
||||
@@ -49,4 +50,25 @@ export const hotelQueryRouter = router({
|
||||
|
||||
return validatedHotelData.data.data.attributes
|
||||
}),
|
||||
getRates: publicProcedure
|
||||
.input(getRatesInputSchema)
|
||||
.query(async ({ input, ctx }) => {
|
||||
// TODO: Do a real API call when the endpoint is ready
|
||||
// const { hotelId } = input
|
||||
|
||||
// const params = new URLSearchParams()
|
||||
// const apiLang = toApiLang(language)
|
||||
// params.set("hotelId", hotelId.toString())
|
||||
// params.set("language", apiLang)
|
||||
|
||||
const validatedHotelData = getRatesSchema.safeParse(tempRatesData)
|
||||
|
||||
if (!validatedHotelData.success) {
|
||||
console.info(`Get Individual Rates Data - Verified Data Error`)
|
||||
console.error(validatedHotelData.error)
|
||||
throw badRequestError()
|
||||
}
|
||||
|
||||
return validatedHotelData.data
|
||||
}),
|
||||
})
|
||||
|
||||
56
server/routers/hotels/tempRatesData.json
Normal file
56
server/routers/hotels/tempRatesData.json
Normal file
@@ -0,0 +1,56 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Cabin",
|
||||
"description": "Stylish, peaceful and air-conditioned room. The rooms have small clerestory windows.",
|
||||
"size": "17 - 24 m² (1 - 2 persons)",
|
||||
"pricePerNight": 1348,
|
||||
"currency": "SEK",
|
||||
"imageSrc": "https://www.scandichotels.se/imageVault/publishedmedia/xnmqnmz6mz0uhuat0917/scandic-helsinki-hub-room-standard-KR-7.jpg"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Standard",
|
||||
"description": "Stylish, peaceful and air-conditioned room. The rooms have small clerestory windows.",
|
||||
"size": "19 - 30 m² (1 - 2 persons)",
|
||||
"pricePerNight": 1548,
|
||||
"currency": "SEK",
|
||||
"imageSrc": "https://www.scandichotels.se/imageVault/publishedmedia/xnmqnmz6mz0uhuat0917/scandic-helsinki-hub-room-standard-KR-7.jpg"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Superior",
|
||||
"description": "Stylish, peaceful and air-conditioned room. The rooms have small clerestory windows.",
|
||||
"size": "22 - 40 m² (1 - 3 persons)",
|
||||
"pricePerNight": 1744,
|
||||
"currency": "SEK",
|
||||
"imageSrc": "https://www.scandichotels.se/imageVault/publishedmedia/xnmqnmz6mz0uhuat0917/scandic-helsinki-hub-room-standard-KR-7.jpg"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "Superior Family",
|
||||
"description": "Stylish, peaceful and air-conditioned room. The rooms have small clerestory windows.",
|
||||
"size": "29 - 49 m² (3 - 4 persons)",
|
||||
"pricePerNight": 2032,
|
||||
"currency": "SEK",
|
||||
"imageSrc": "https://www.scandichotels.se/imageVault/publishedmedia/xnmqnmz6mz0uhuat0917/scandic-helsinki-hub-room-standard-KR-7.jpg"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Superior PLUS",
|
||||
"description": "Stylish, peaceful and air-conditioned room. The rooms have small clerestory windows.",
|
||||
"size": "21 - 28 m² (2 - 3 persons)",
|
||||
"pricePerNight": 2065,
|
||||
"currency": "SEK",
|
||||
"imageSrc": "https://www.scandichotels.se/imageVault/publishedmedia/xnmqnmz6mz0uhuat0917/scandic-helsinki-hub-room-standard-KR-7.jpg"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "Junior Suite",
|
||||
"description": "Stylish, peaceful and air-conditioned room. The rooms have small clerestory windows.",
|
||||
"size": "35 - 43 m² (2 - 4 persons)",
|
||||
"pricePerNight": 3012,
|
||||
"currency": "SEK",
|
||||
"imageSrc": "https://www.scandichotels.se/imageVault/publishedmedia/xnmqnmz6mz0uhuat0917/scandic-helsinki-hub-room-standard-KR-7.jpg"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user