fix(SW-2659): pass input to userTrackingInfo since lang needs to be passed from client

This commit is contained in:
Arvid Norlin
2025-05-08 12:02:59 +02:00
committed by Michael Zetterberg
parent 8cb63c4947
commit aaffcba94a
3 changed files with 66 additions and 54 deletions

View File

@@ -7,6 +7,7 @@ import { trpc } from "@/lib/trpc/client"
import useRouterTransitionStore from "@/stores/router-transition"
import useTrackingStore from "@/stores/tracking"
import useLang from "@/hooks/useLang"
import { useSessionId } from "@/hooks/useSessionId"
import { promiseWithTimeout } from "@/utils/promiseWithTimeout"
import { createSDKPageObject, trackPageView } from "@/utils/tracking"
@@ -31,11 +32,12 @@ export const useTrackHardNavigation = ({
paymentInfo,
ancillaries,
}: TrackingSDKProps) => {
const lang = useLang()
const {
data: userTrackingData,
isPending,
isError,
} = trpc.user.userTrackingInfo.useQuery()
} = trpc.user.userTrackingInfo.useQuery({ lang })
const sessionId = useSessionId()
const pathName = usePathname()
@@ -93,11 +95,12 @@ export const useTrackSoftNavigation = ({
paymentInfo,
ancillaries,
}: TrackingSDKProps) => {
const lang = useLang()
const {
data: userTrackingData,
isPending,
isError,
} = trpc.user.userTrackingInfo.useQuery()
} = trpc.user.userTrackingInfo.useQuery({ lang })
const [status, setStatus] = useState<TransitionStatus>(
TransitionStatusEnum.NotRun

View File

@@ -5,6 +5,9 @@ import { Lang } from "@/constants/languages"
import { signUpSchema } from "@/components/Forms/Signup/schema"
// Query
export const userTrackingInput = z.object({
lang: z.nativeEnum(Lang).optional(),
})
export const staysInput = z
.object({
cursor: z

View File

@@ -15,6 +15,7 @@ import {
friendTransactionsInput,
getSavedPaymentCardsInput,
staysInput,
userTrackingInput,
} from "./input"
import { getFriendTransactionsSchema } from "./output"
import {
@@ -124,72 +125,77 @@ export const userQueryRouter = router({
const membershipLevel = getFriendsMembership(verifiedData.data.loyalty)
return membershipLevel
}),
userTrackingInfo: safeProtectedProcedure.query(async function ({ ctx }) {
const userTrackingInfoCounter = createCounter("user", "userTrackingInfo")
const metricsUserTrackingInfo = userTrackingInfoCounter.init()
userTrackingInfo: safeProtectedProcedure
.input(userTrackingInput)
.query(async function ({ ctx, input }) {
const { lang } = input
const language = lang || ctx.lang
metricsUserTrackingInfo.start()
const userTrackingInfoCounter = createCounter("user", "userTrackingInfo")
const metricsUserTrackingInfo = userTrackingInfoCounter.init()
const notLoggedInUserTrackingData: TrackingSDKUserData = {
loginStatus: "Non-logged in",
}
metricsUserTrackingInfo.start()
if (!isValidSession(ctx.session)) {
metricsUserTrackingInfo.success({
reason: "invalid session",
data: notLoggedInUserTrackingData,
})
return notLoggedInUserTrackingData
}
const notLoggedInUserTrackingData: TrackingSDKUserData = {
loginStatus: "Non-logged in",
}
try {
const verifiedUserData = await getVerifiedUser({ session: ctx.session })
if (!verifiedUserData || "error" in verifiedUserData) {
if (!isValidSession(ctx.session)) {
metricsUserTrackingInfo.success({
reason: "invalid user data",
reason: "invalid session",
data: notLoggedInUserTrackingData,
})
return notLoggedInUserTrackingData
}
const previousStaysData = await getPreviousStays(
ctx.session.token.access_token,
1,
ctx.lang
)
if (!previousStaysData) {
try {
const verifiedUserData = await getVerifiedUser({ session: ctx.session })
if (!verifiedUserData || "error" in verifiedUserData) {
metricsUserTrackingInfo.success({
reason: "invalid user data",
data: notLoggedInUserTrackingData,
})
return notLoggedInUserTrackingData
}
const previousStaysData = await getPreviousStays(
ctx.session.token.access_token,
1,
language
)
if (!previousStaysData) {
metricsUserTrackingInfo.success({
reason: "no previous stays data",
data: notLoggedInUserTrackingData,
})
return notLoggedInUserTrackingData
}
const membership = getFriendsMembership(verifiedUserData.data.loyalty)
const loggedInUserTrackingData: TrackingSDKUserData = {
loginStatus: "logged in",
loginType: ctx.session.token.loginType as LoginType,
memberId: verifiedUserData.data.profileId,
membershipNumber: membership?.membershipNumber,
memberLevel: membership?.membershipLevel,
noOfNightsStayed: previousStaysData.links?.totalCount ?? 0,
totalPointsAvailableToSpend: membership?.currentPoints,
loginAction: "login success",
}
metricsUserTrackingInfo.success({
reason: "no previous stays data",
data: notLoggedInUserTrackingData,
reason: "valid logged in",
data: loggedInUserTrackingData,
})
return loggedInUserTrackingData
} catch (error) {
metricsUserTrackingInfo.fail(error)
return notLoggedInUserTrackingData
}
const membership = getFriendsMembership(verifiedUserData.data.loyalty)
const loggedInUserTrackingData: TrackingSDKUserData = {
loginStatus: "logged in",
loginType: ctx.session.token.loginType as LoginType,
memberId: verifiedUserData.data.profileId,
membershipNumber: membership?.membershipNumber,
memberLevel: membership?.membershipLevel,
noOfNightsStayed: previousStaysData.links?.totalCount ?? 0,
totalPointsAvailableToSpend: membership?.currentPoints,
loginAction: "login success",
}
metricsUserTrackingInfo.success({
reason: "valid logged in",
data: loggedInUserTrackingData,
})
return loggedInUserTrackingData
} catch (error) {
metricsUserTrackingInfo.fail(error)
return notLoggedInUserTrackingData
}
}),
}),
stays: router({
previous: languageProtectedProcedure