feat: Graphql queries and TRPC route setup for Hotel Page Component
This commit is contained in:
5
server/routers/contentstack/hotelPage/index.ts
Normal file
5
server/routers/contentstack/hotelPage/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { mergeRouters } from "@/server/trpc"
|
||||
|
||||
import { hotelPageQueryRouter } from "./query"
|
||||
|
||||
export const hotelPageRouter = mergeRouters(hotelPageQueryRouter)
|
||||
16
server/routers/contentstack/hotelPage/output.ts
Normal file
16
server/routers/contentstack/hotelPage/output.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { z } from "zod"
|
||||
|
||||
export const validateHotelPageSchema = z.object({
|
||||
hotel_page: z.object({
|
||||
hotel_page_id: z.string(),
|
||||
title: z.string(),
|
||||
url: z.string(),
|
||||
}),
|
||||
})
|
||||
|
||||
// Will be extended once we introduce more functionality to our entries.
|
||||
export type HotelPageDataRaw = z.infer<typeof validateHotelPageSchema>
|
||||
|
||||
type HotelPageRaw = HotelPageDataRaw["hotel_page"]
|
||||
|
||||
export type HotelPage = HotelPageRaw
|
||||
35
server/routers/contentstack/hotelPage/query.ts
Normal file
35
server/routers/contentstack/hotelPage/query.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { GetHotelPage } from "@/lib/graphql/Query/HotelPage.graphql"
|
||||
import { request } from "@/lib/graphql/request"
|
||||
import { notFound } from "@/server/errors/trpc"
|
||||
import { contentstackBaseProcedure, router } from "@/server/trpc"
|
||||
|
||||
import { HotelPage, HotelPageDataRaw, validateHotelPageSchema } from "./output"
|
||||
|
||||
export const hotelPageQueryRouter = router({
|
||||
get: contentstackBaseProcedure.query(async ({ ctx }) => {
|
||||
const { lang, uid } = ctx
|
||||
const response = await request<HotelPageDataRaw>(GetHotelPage, {
|
||||
locale: lang,
|
||||
uid,
|
||||
})
|
||||
if (!response.data) {
|
||||
throw notFound(response)
|
||||
}
|
||||
|
||||
const validatedHotelPage = validateHotelPageSchema.safeParse(response.data)
|
||||
|
||||
if (!validatedHotelPage.success) {
|
||||
console.info(
|
||||
`Failed to validate Hotel Page - (uid: ${uid}, lang: ${lang})`
|
||||
)
|
||||
console.error(validatedHotelPage.error)
|
||||
return null
|
||||
}
|
||||
|
||||
const hotelPage = {
|
||||
...validatedHotelPage.data.hotel_page,
|
||||
} as HotelPage
|
||||
|
||||
return hotelPage
|
||||
}),
|
||||
})
|
||||
@@ -3,6 +3,7 @@ import { router } from "@/server/trpc"
|
||||
import { accountPageRouter } from "./accountPage"
|
||||
import { baseRouter } from "./base"
|
||||
import { breadcrumbsRouter } from "./breadcrumbs"
|
||||
import { hotelPageRouter } from "./hotelPage"
|
||||
import { languageSwitcherRouter } from "./languageSwitcher"
|
||||
import { loyaltyPageRouter } from "./loyaltyPage"
|
||||
import { myPagesRouter } from "./myPages"
|
||||
@@ -11,6 +12,7 @@ export const contentstackRouter = router({
|
||||
accountPage: accountPageRouter,
|
||||
base: baseRouter,
|
||||
breadcrumbs: breadcrumbsRouter,
|
||||
hotelPage: hotelPageRouter,
|
||||
languageSwitcher: languageSwitcherRouter,
|
||||
loyaltyPage: loyaltyPageRouter,
|
||||
myPages: myPagesRouter,
|
||||
|
||||
Reference in New Issue
Block a user