Merged in fix/move-sas-comparison-to-dynamic-content (pull request #1279)
Move SASTierComparison block to DynamicContent Approved-by: Erik Tiekstra
This commit is contained in:
@@ -19,7 +19,6 @@ import {
|
||||
dynamicContentSchema as blockDynamicContentSchema,
|
||||
} from "../schemas/blocks/dynamicContent"
|
||||
import { hotelListingSchema } from "../schemas/blocks/hotelListing"
|
||||
import { sasTierComparisonSchema } from "../schemas/blocks/sasTierComparison"
|
||||
import {
|
||||
shortcutsRefsSchema,
|
||||
shortcutsSchema,
|
||||
@@ -106,14 +105,6 @@ export const contentPageAccordion = z
|
||||
})
|
||||
.merge(accordionSchema)
|
||||
|
||||
export const contentPageLoyaltyTierComparison = z
|
||||
.object({
|
||||
__typename: z.literal(
|
||||
ContentPageEnum.ContentStack.blocks.SasTierComparison
|
||||
),
|
||||
})
|
||||
.merge(sasTierComparisonSchema)
|
||||
|
||||
export const contentPageHotelListing = z
|
||||
.object({
|
||||
__typename: z.literal(ContentPageEnum.ContentStack.blocks.HotelListing),
|
||||
@@ -129,7 +120,6 @@ export const blocksSchema = z.discriminatedUnion("__typename", [
|
||||
contentPageTable,
|
||||
contentPageTextCols,
|
||||
contentPageUspGrid,
|
||||
contentPageLoyaltyTierComparison,
|
||||
contentPageHotelListing,
|
||||
])
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ import {
|
||||
GetContentPage,
|
||||
GetContentPageBlocksBatch1,
|
||||
GetContentPageBlocksBatch2,
|
||||
GetContentPageBlocksBatch3,
|
||||
} from "@/lib/graphql/Query/ContentPage/ContentPage.graphql"
|
||||
import { contentstackExtendedProcedureUID, router } from "@/server/trpc"
|
||||
|
||||
@@ -73,17 +72,6 @@ export const contentPageQueryRouter = router({
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
document: GetContentPageBlocksBatch3,
|
||||
variables: { locale: lang, uid },
|
||||
options: {
|
||||
cache: "force-cache",
|
||||
next: {
|
||||
tags,
|
||||
},
|
||||
},
|
||||
},
|
||||
])
|
||||
|
||||
const contentPage = contentPageSchema.safeParse(contentPageRequest.data)
|
||||
|
||||
@@ -15,6 +15,7 @@ import { loyaltyLevelRouter } from "./loyaltyLevel"
|
||||
import { loyaltyPageRouter } from "./loyaltyPage"
|
||||
import { metadataRouter } from "./metadata"
|
||||
import { myPagesRouter } from "./myPages"
|
||||
import { partnerRouter } from "./partner"
|
||||
import { rewardRouter } from "./reward"
|
||||
import { startPageRouter } from "./startPage"
|
||||
|
||||
@@ -36,4 +37,5 @@ export const contentstackRouter = router({
|
||||
rewards: rewardRouter,
|
||||
loyaltyLevels: loyaltyLevelRouter,
|
||||
startPage: startPageRouter,
|
||||
partner: partnerRouter,
|
||||
})
|
||||
|
||||
5
server/routers/contentstack/partner/index.ts
Normal file
5
server/routers/contentstack/partner/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { mergeRouters } from "@/server/trpc"
|
||||
|
||||
import { partnerQueryRouter } from "./query"
|
||||
|
||||
export const partnerRouter = mergeRouters(partnerQueryRouter)
|
||||
31
server/routers/contentstack/partner/output.ts
Normal file
31
server/routers/contentstack/partner/output.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { z } from "zod"
|
||||
|
||||
const link = z.object({
|
||||
href: z.string(),
|
||||
title: z.string(),
|
||||
})
|
||||
|
||||
export const validateSasTierComparisonSchema = z
|
||||
.object({
|
||||
all_sas_tier_comparison: z.object({
|
||||
items: z.array(
|
||||
z.object({
|
||||
scandic_column_title: z.string(),
|
||||
sas_column_title: z.string(),
|
||||
tier_matches: z.array(
|
||||
z.object({
|
||||
scandic_friends_tier_name: z.string(),
|
||||
sas_eb_tier_name: z.string(),
|
||||
title: z.string(),
|
||||
content: z.object({
|
||||
json: z.any(), // json
|
||||
}),
|
||||
link: link.optional(),
|
||||
})
|
||||
),
|
||||
cta: link.optional(),
|
||||
})
|
||||
),
|
||||
}),
|
||||
})
|
||||
.transform((data) => data.all_sas_tier_comparison.items.at(0))
|
||||
86
server/routers/contentstack/partner/query.ts
Normal file
86
server/routers/contentstack/partner/query.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import { metrics } from "@opentelemetry/api"
|
||||
import { cache } from "react"
|
||||
|
||||
import { GetAllSasTierComparison } from "@/lib/graphql/Query/SASTierComparison.graphql"
|
||||
import { request } from "@/lib/graphql/request"
|
||||
import { notFound } from "@/server/errors/trpc"
|
||||
import { contentstackBaseProcedure, router } from "@/server/trpc"
|
||||
|
||||
import { validateSasTierComparisonSchema } from "./output"
|
||||
|
||||
import type { SasTierComparisonResponse } from "@/types/trpc/routers/contentstack/partner"
|
||||
import type { Context } from "@/server/context"
|
||||
|
||||
const meter = metrics.getMeter("trpc.partner")
|
||||
const getSasTierComparisonCounter = meter.createCounter(
|
||||
"trpc.contentstack.partner.getSasTierComparison"
|
||||
)
|
||||
|
||||
const getSasTierComparisonSuccessCounter = meter.createCounter(
|
||||
"trpc.contentstack.partner.getSasTierComparison-success"
|
||||
)
|
||||
const getSasTierComparisonFailCounter = meter.createCounter(
|
||||
"trpc.contentstack.partner.getSasTierComparison-fail"
|
||||
)
|
||||
|
||||
export const getSasTierComparison = cache(async (ctx: Context) => {
|
||||
getSasTierComparisonCounter.add(1)
|
||||
|
||||
const tag = `${ctx.lang}:sas_tier_comparison`
|
||||
const sasTierComparisonConfigResponse =
|
||||
await request<SasTierComparisonResponse>(
|
||||
GetAllSasTierComparison,
|
||||
{ lang: ctx.lang },
|
||||
{
|
||||
next: {
|
||||
tags: [tag],
|
||||
},
|
||||
cache: "force-cache",
|
||||
}
|
||||
)
|
||||
|
||||
if (!sasTierComparisonConfigResponse.data) {
|
||||
getSasTierComparisonFailCounter.add(1)
|
||||
const notFoundError = notFound(sasTierComparisonConfigResponse)
|
||||
console.error(
|
||||
"contentstack.sas not found error",
|
||||
JSON.stringify({
|
||||
query: {
|
||||
lang: ctx.lang,
|
||||
},
|
||||
error: { code: notFoundError.code },
|
||||
})
|
||||
)
|
||||
throw notFoundError
|
||||
}
|
||||
|
||||
const validatedSasTierComparison = validateSasTierComparisonSchema.safeParse(
|
||||
sasTierComparisonConfigResponse.data
|
||||
)
|
||||
|
||||
if (!validatedSasTierComparison.success) {
|
||||
getSasTierComparisonFailCounter.add(1)
|
||||
console.error(validatedSasTierComparison.error)
|
||||
console.error(
|
||||
"contentstack.sas validation error",
|
||||
JSON.stringify({
|
||||
query: {
|
||||
lang: ctx.lang,
|
||||
},
|
||||
error: validatedSasTierComparison.error,
|
||||
})
|
||||
)
|
||||
return null
|
||||
}
|
||||
|
||||
getSasTierComparisonSuccessCounter.add(1)
|
||||
return validatedSasTierComparison.data
|
||||
})
|
||||
|
||||
export const partnerQueryRouter = router({
|
||||
getSasTierComparison: contentstackBaseProcedure.query(async function ({
|
||||
ctx,
|
||||
}) {
|
||||
return getSasTierComparison(ctx)
|
||||
}),
|
||||
})
|
||||
@@ -1,49 +0,0 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { MembershipLevelEnum } from "@/constants/membershipLevels"
|
||||
|
||||
import { BlocksEnums } from "@/types/enums/blocks"
|
||||
|
||||
const link = z.object({
|
||||
href: z.string(),
|
||||
title: z.string(),
|
||||
})
|
||||
|
||||
export const sasTierComparisonSchema = z.object({
|
||||
typename: z
|
||||
.literal(BlocksEnums.block.SasTierComparison)
|
||||
.optional()
|
||||
.default(BlocksEnums.block.SasTierComparison),
|
||||
sas_tier_comparison: z
|
||||
.object({
|
||||
comparisonConnection: z.object({
|
||||
edges: z.array(
|
||||
z.object({
|
||||
node: z.object({
|
||||
title: z.string(),
|
||||
preamble: z.string().optional(),
|
||||
scandic_column_title: z.string(),
|
||||
sas_column_title: z.string(),
|
||||
tier_matches: z.array(
|
||||
z.object({
|
||||
scandic_friends_tier_name: z.string(),
|
||||
sas_eb_tier_name: z.string(),
|
||||
title: z.string(),
|
||||
content: z.object({
|
||||
json: z.any(), // json
|
||||
}),
|
||||
link: link.optional(),
|
||||
})
|
||||
),
|
||||
cta: link.optional(),
|
||||
}),
|
||||
})
|
||||
),
|
||||
}),
|
||||
})
|
||||
.transform((data) => {
|
||||
return {
|
||||
sasTierComparison: data.comparisonConnection.edges.at(0)?.node ?? null,
|
||||
}
|
||||
}),
|
||||
})
|
||||
Reference in New Issue
Block a user