fix: refactor tracking requests
This commit is contained in:
@@ -12,16 +12,14 @@ import type { LangParams, PageArgs } from "@/types/params"
|
||||
export default async function MyPages({
|
||||
params,
|
||||
}: PageArgs<LangParams & { path: string[] }>) {
|
||||
const accountPage = await serverClient().contentstack.accountPage.get()
|
||||
const accountPageRes = await serverClient().contentstack.accountPage.get()
|
||||
const { formatMessage } = await getIntl()
|
||||
|
||||
if (!accountPage) {
|
||||
if (!accountPageRes) {
|
||||
return null
|
||||
}
|
||||
|
||||
const accountPageTracking = serverClient().contentstack.accountPage.tracking()
|
||||
const userTrackingData = serverClient().user.tracking()
|
||||
|
||||
const { tracking, accountPage } = accountPageRes
|
||||
return (
|
||||
<main className={styles.blocks}>
|
||||
<Title>{accountPage.heading}</Title>
|
||||
@@ -30,10 +28,7 @@ export default async function MyPages({
|
||||
) : (
|
||||
<p>{formatMessage({ id: "No content published" })}</p>
|
||||
)}
|
||||
<TrackingSDK
|
||||
pageDataPromise={accountPageTracking}
|
||||
userDataPromise={userTrackingData}
|
||||
/>
|
||||
<TrackingSDK pageData={tracking} />
|
||||
</main>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -5,13 +5,11 @@ import { serverClient } from "@/lib/trpc/server"
|
||||
import TrackingSDK from "@/components/TrackingSDK"
|
||||
|
||||
export default async function ProfilePage() {
|
||||
const accountPageTracking = serverClient().contentstack.accountPage.tracking()
|
||||
const userTrackingData = serverClient().user.tracking()
|
||||
const accountPage = await serverClient().contentstack.accountPage.get()
|
||||
|
||||
return (
|
||||
<TrackingSDK
|
||||
pageDataPromise={accountPageTracking}
|
||||
userDataPromise={userTrackingData}
|
||||
/>
|
||||
)
|
||||
if (!accountPage) {
|
||||
return null
|
||||
}
|
||||
|
||||
return <TrackingSDK pageData={accountPage.tracking} />
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import TrpcProvider from "@/lib/trpc/Provider"
|
||||
import AdobeSDKScript from "@/components/Current/AdobeSDKScript"
|
||||
import Footer from "@/components/Current/Footer"
|
||||
import VwoScript from "@/components/Current/VwoScript"
|
||||
import { preloadUserTracking } from "@/components/TrackingSDK"
|
||||
import { getIntl } from "@/i18n"
|
||||
import ServerIntlProvider from "@/i18n/Provider"
|
||||
|
||||
@@ -29,6 +30,8 @@ export default async function RootLayout({
|
||||
header: React.ReactNode
|
||||
}
|
||||
>) {
|
||||
preloadUserTracking()
|
||||
|
||||
const { defaultLocale, locale, messages } = await getIntl()
|
||||
return (
|
||||
<html lang={params.lang}>
|
||||
|
||||
@@ -11,14 +11,14 @@ import styles from "./loyaltyPage.module.css"
|
||||
import type { LangParams } from "@/types/params"
|
||||
|
||||
export default async function LoyaltyPage({ lang }: LangParams) {
|
||||
const loyaltyPage = await serverClient().contentstack.loyaltyPage.get()
|
||||
const loyaltyPageRes = await serverClient().contentstack.loyaltyPage.get()
|
||||
|
||||
if (!loyaltyPage) {
|
||||
if (!loyaltyPageRes) {
|
||||
return null
|
||||
}
|
||||
|
||||
const loyaltyPageTracking = serverClient().contentstack.loyaltyPage.tracking()
|
||||
const userTracking = serverClient().user.tracking()
|
||||
const { tracking, loyaltyPage } = loyaltyPageRes
|
||||
|
||||
return (
|
||||
<section className={styles.content}>
|
||||
{loyaltyPage.sidebar.length ? (
|
||||
@@ -31,10 +31,7 @@ export default async function LoyaltyPage({ lang }: LangParams) {
|
||||
<Blocks blocks={loyaltyPage.blocks} lang={lang} />
|
||||
) : null}
|
||||
</MaxWidth>
|
||||
<TrackingSDK
|
||||
pageDataPromise={loyaltyPageTracking}
|
||||
userDataPromise={userTracking}
|
||||
/>
|
||||
<TrackingSDK pageData={tracking} />
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,14 +14,13 @@ import styles from "./accountPage.module.css"
|
||||
import { LangParams } from "@/types/params"
|
||||
|
||||
export default async function MyPages({ lang }: LangParams) {
|
||||
const accountPage = await serverClient().contentstack.accountPage.get()
|
||||
const accountPageRes = await serverClient().contentstack.accountPage.get()
|
||||
|
||||
if (!accountPage) {
|
||||
if (!accountPageRes) {
|
||||
return null
|
||||
}
|
||||
|
||||
const accountPageTracking = serverClient().contentstack.accountPage.tracking()
|
||||
const userTrackingData = serverClient().user.tracking()
|
||||
const { tracking, accountPage } = accountPageRes
|
||||
|
||||
const linkToOverview = `/${lang}/webview${accountPage.url}` !== overview[lang]
|
||||
|
||||
@@ -29,10 +28,7 @@ export default async function MyPages({ lang }: LangParams) {
|
||||
<MaxWidth className={styles.blocks} tag="main">
|
||||
{linkToOverview ? <LinkToOverview lang={lang} /> : null}
|
||||
<Content lang={lang} content={accountPage.content} />
|
||||
<TrackingSDK
|
||||
pageDataPromise={accountPageTracking}
|
||||
userDataPromise={userTrackingData}
|
||||
/>
|
||||
<TrackingSDK pageData={tracking} />
|
||||
</MaxWidth>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -11,15 +11,13 @@ import styles from "./loyaltyPage.module.css"
|
||||
import { LangParams } from "@/types/params"
|
||||
|
||||
export default async function AboutScandicFriends({ lang }: LangParams) {
|
||||
const loyaltyPage = await serverClient().contentstack.loyaltyPage.get()
|
||||
const loyaltyPageRes = await serverClient().contentstack.loyaltyPage.get()
|
||||
|
||||
if (!loyaltyPage) {
|
||||
if (!loyaltyPageRes) {
|
||||
return null
|
||||
}
|
||||
|
||||
const loyaltyPageTracking = serverClient().contentstack.loyaltyPage.tracking()
|
||||
const userTrackingData = serverClient().user.tracking()
|
||||
|
||||
const { tracking, loyaltyPage } = loyaltyPageRes
|
||||
return (
|
||||
<section className={styles.content}>
|
||||
<LinkToOverview lang={lang} />
|
||||
@@ -27,10 +25,7 @@ export default async function AboutScandicFriends({ lang }: LangParams) {
|
||||
<Title>{loyaltyPage.heading}</Title>
|
||||
<Blocks blocks={loyaltyPage.blocks} lang={lang} />
|
||||
</MaxWidth>
|
||||
<TrackingSDK
|
||||
pageDataPromise={loyaltyPageTracking}
|
||||
userDataPromise={userTrackingData}
|
||||
/>
|
||||
<TrackingSDK pageData={tracking} />
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
import { serverClient } from "@/lib/trpc/server"
|
||||
|
||||
import TrackingSDKClient from "./Client"
|
||||
|
||||
import { TrackingSDKProps } from "@/types/components/tracking"
|
||||
import { TrackingSDKPageData } from "@/types/components/tracking"
|
||||
|
||||
export const preloadUserTracking = () => {
|
||||
void serverClient().user.tracking()
|
||||
}
|
||||
|
||||
export default async function TrackingSDK({
|
||||
pageDataPromise,
|
||||
userDataPromise,
|
||||
pageData,
|
||||
}: {
|
||||
pageDataPromise: Promise<TrackingSDKProps["pageData"]>
|
||||
userDataPromise: Promise<TrackingSDKProps["userData"]>
|
||||
pageData: TrackingSDKPageData
|
||||
}) {
|
||||
const pageData = await pageDataPromise
|
||||
const userData = await userDataPromise
|
||||
const userTrackingData = await serverClient().user.tracking()
|
||||
|
||||
return <TrackingSDKClient pageData={pageData} userData={userData} />
|
||||
return <TrackingSDKClient pageData={pageData} userData={userTrackingData} />
|
||||
}
|
||||
|
||||
@@ -18,6 +18,12 @@ query GetAccountPage($locale: String!, $uid: String!) {
|
||||
...AccountPageContentShortcuts
|
||||
...AccountPageContentTextContent
|
||||
}
|
||||
system {
|
||||
uid
|
||||
created_at
|
||||
updated_at
|
||||
locale
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,15 +105,3 @@ query GetFiNoSvUrlsAccountPage($uid: String!) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query GetTrackingAccountPage($locale: String!, $uid: String!) {
|
||||
account_page(locale: $locale, uid: $uid) {
|
||||
system {
|
||||
locale
|
||||
created_at
|
||||
uid
|
||||
updated_at
|
||||
}
|
||||
title
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,6 +172,7 @@ query GetLoyaltyPage($locale: String!, $uid: String!) {
|
||||
uid
|
||||
created_at
|
||||
updated_at
|
||||
locale
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -362,14 +363,3 @@ query GetFiNoSvUrlsLoyaltyPage($uid: String!) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query GetTrackingLoyaltyPage($locale: String!, $uid: String!) {
|
||||
loyalty_page(locale: $locale, uid: $uid) {
|
||||
system {
|
||||
locale
|
||||
created_at
|
||||
uid
|
||||
updated_at
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,6 +125,12 @@ export const validateAccountPageSchema = z.object({
|
||||
url: z.string(),
|
||||
title: z.string(),
|
||||
content: z.array(accountPageContentItem),
|
||||
system: z.object({
|
||||
uid: z.string(),
|
||||
locale: z.nativeEnum(Lang),
|
||||
created_at: z.string(),
|
||||
updated_at: z.string(),
|
||||
}),
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -189,18 +195,3 @@ export const validateAccountPageRefsSchema = z.object({
|
||||
export type AccountPageRefsDataRaw = z.infer<
|
||||
typeof validateAccountPageRefsSchema
|
||||
>
|
||||
|
||||
//Tracking
|
||||
const validateAccountTrackingData = z.object({
|
||||
account_page: z.object({
|
||||
system: z.object({
|
||||
uid: z.string(),
|
||||
locale: z.string(),
|
||||
updated_at: z.string(),
|
||||
created_at: z.string(),
|
||||
}),
|
||||
title: z.string().nullable(),
|
||||
}),
|
||||
})
|
||||
|
||||
export type AccountPageTackingData = z.infer<typeof validateAccountTrackingData>
|
||||
|
||||
@@ -2,7 +2,6 @@ import { Lang } from "@/constants/languages"
|
||||
import {
|
||||
GetAccountPage,
|
||||
GetAccountPageRefs,
|
||||
GetTrackingAccountPage,
|
||||
} from "@/lib/graphql/Query/AccountPage.graphql"
|
||||
import { request } from "@/lib/graphql/request"
|
||||
import { notFound } from "@/server/errors/trpc"
|
||||
@@ -19,7 +18,6 @@ import {
|
||||
type AccountPage,
|
||||
AccountPageDataRaw,
|
||||
AccountPageRefsDataRaw,
|
||||
AccountPageTackingData,
|
||||
validateAccountPageRefsSchema,
|
||||
validateAccountPageSchema,
|
||||
} from "./output"
|
||||
@@ -136,32 +134,18 @@ export const accountPageQueryRouter = router({
|
||||
content,
|
||||
} as AccountPage
|
||||
|
||||
return accountPage
|
||||
}),
|
||||
tracking: contentstackExtendedProcedureUID.query(async ({ ctx }) => {
|
||||
const { lang, uid } = ctx
|
||||
|
||||
const response = await request<AccountPageTackingData>(
|
||||
GetTrackingAccountPage,
|
||||
{
|
||||
locale: lang,
|
||||
uid,
|
||||
}
|
||||
)
|
||||
|
||||
if (!response.data) {
|
||||
throw notFound(response)
|
||||
}
|
||||
|
||||
const accountTrackingData: TrackingSDKPageData = {
|
||||
pageId: response.data.account_page.system.uid,
|
||||
lang: response.data.account_page.system.locale as Lang,
|
||||
publishedDate: response.data.account_page.system.updated_at,
|
||||
createdDate: response.data.account_page.system.created_at,
|
||||
const tracking: TrackingSDKPageData = {
|
||||
pageId: validatedAccountPage.data.account_page.system.uid,
|
||||
lang: validatedAccountPage.data.account_page.system.locale as Lang,
|
||||
publishedDate: validatedAccountPage.data.account_page.system.updated_at,
|
||||
createdDate: validatedAccountPage.data.account_page.system.created_at,
|
||||
channel: TrackingChannelEnum["scandic-friends"],
|
||||
pageType: `member${response.data.account_page.title}page`,
|
||||
}
|
||||
|
||||
return accountTrackingData
|
||||
return {
|
||||
accountPage,
|
||||
tracking,
|
||||
}
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -193,7 +193,12 @@ export const validateLoyaltyPageSchema = z.object({
|
||||
heading: z.string().nullable(),
|
||||
blocks: z.array(loyaltyPageBlockItem).nullable(),
|
||||
sidebar: z.array(loyaltyPageSidebarItem).nullable(),
|
||||
system: z.object({ uid: z.string() }),
|
||||
system: z.object({
|
||||
uid: z.string(),
|
||||
locale: z.nativeEnum(Lang),
|
||||
created_at: z.string(),
|
||||
updated_at: z.string(),
|
||||
}),
|
||||
})
|
||||
|
||||
// Block types
|
||||
@@ -417,17 +422,3 @@ export const validateLoyaltyPageRefsSchema = z.object({
|
||||
export type LoyaltyPageRefsDataRaw = z.infer<
|
||||
typeof validateLoyaltyPageRefsSchema
|
||||
>
|
||||
|
||||
//Tracking
|
||||
const validateLoyaltyTrackingData = z.object({
|
||||
loyalty_page: z.object({
|
||||
system: z.object({
|
||||
uid: z.string(),
|
||||
locale: z.string(),
|
||||
updated_at: z.string(),
|
||||
created_at: z.string(),
|
||||
}),
|
||||
}),
|
||||
})
|
||||
|
||||
export type LoyaltyPageTackingData = z.infer<typeof validateLoyaltyTrackingData>
|
||||
|
||||
@@ -2,7 +2,6 @@ import { Lang } from "@/constants/languages"
|
||||
import {
|
||||
GetLoyaltyPage,
|
||||
GetLoyaltyPageRefs,
|
||||
GetTrackingLoyaltyPage,
|
||||
} from "@/lib/graphql/Query/LoyaltyPage.graphql"
|
||||
import { request } from "@/lib/graphql/request"
|
||||
import { notFound } from "@/server/errors/trpc"
|
||||
@@ -20,7 +19,6 @@ import { removeEmptyObjects } from "../../utils"
|
||||
import {
|
||||
LoyaltyPage,
|
||||
type LoyaltyPageRefsDataRaw,
|
||||
LoyaltyPageTackingData,
|
||||
validateLoyaltyPageRefsSchema,
|
||||
validateLoyaltyPageSchema,
|
||||
} from "./output"
|
||||
@@ -228,24 +226,6 @@ export const loyaltyPageQueryRouter = router({
|
||||
return null
|
||||
}
|
||||
|
||||
// Assert LoyaltyPage type to get correct typings for RTE fields
|
||||
return validatedLoyaltyPage.data as LoyaltyPage
|
||||
}),
|
||||
tracking: contentstackExtendedProcedureUID.query(async ({ ctx }) => {
|
||||
const { lang, uid } = ctx
|
||||
|
||||
const response = await request<LoyaltyPageTackingData>(
|
||||
GetTrackingLoyaltyPage,
|
||||
{
|
||||
locale: lang,
|
||||
uid,
|
||||
}
|
||||
)
|
||||
|
||||
if (!response.data) {
|
||||
throw notFound(response)
|
||||
}
|
||||
|
||||
const loyaltyTrackingData: TrackingSDKPageData = {
|
||||
pageId: response.data.loyalty_page.system.uid,
|
||||
lang: response.data.loyalty_page.system.locale as Lang,
|
||||
@@ -255,6 +235,10 @@ export const loyaltyPageQueryRouter = router({
|
||||
pageType: "loyaltycontentpage",
|
||||
}
|
||||
|
||||
return loyaltyTrackingData
|
||||
// Assert LoyaltyPage type to get correct typings for RTE fields
|
||||
return {
|
||||
loyaltyPage: validatedLoyaltyPage.data as LoyaltyPage,
|
||||
tracking: loyaltyTrackingData,
|
||||
}
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -248,18 +248,9 @@ export const userQueryRouter = router({
|
||||
)
|
||||
|
||||
if (!previousStaysResponse.ok) {
|
||||
// switch (apiResponse.status) {
|
||||
// case 400:
|
||||
// throw badRequestError(apiResponse)
|
||||
// case 401:
|
||||
// throw unauthorizedError(apiResponse)
|
||||
// case 403:
|
||||
// throw forbiddenError(apiResponse)
|
||||
// default:
|
||||
// throw internalServerError(apiResponse)
|
||||
// }
|
||||
console.info(`API Response Failed - Getting Previous Stays`)
|
||||
console.info(`User: (${JSON.stringify(ctx.session.user)})`)
|
||||
console.info(
|
||||
`API Response Failed - Getting Previous Stays for tracking user`
|
||||
)
|
||||
console.error(previousStaysResponse)
|
||||
return notLoggedInUserTrackingData
|
||||
}
|
||||
@@ -268,8 +259,7 @@ export const userQueryRouter = router({
|
||||
const verifiedPreviousStaysData =
|
||||
getStaysSchema.safeParse(previousStaysApiJson)
|
||||
if (!verifiedPreviousStaysData.success) {
|
||||
console.info(`Failed to validate Previous Stays Data`)
|
||||
console.info(`User: (${JSON.stringify(ctx.session.user)})`)
|
||||
console.info(`Failed to validate Previous Stays Data for tracking user`)
|
||||
console.error(verifiedPreviousStaysData.error)
|
||||
return notLoggedInUserTrackingData
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user