From eea21e67d927ebc33033da6f3f1c6ad3f95e011e Mon Sep 17 00:00:00 2001 From: Anton Gunnarsson Date: Thu, 30 Oct 2025 12:26:57 +0000 Subject: [PATCH] Merged in feat/sw-3556-sas-userinfo-scandic-keys (pull request #3033) feat(SW-3556): Add Scandic user details to tracking userinfo if linked * Add scandic details to userinfo if linked Approved-by: Hrishikesh Vaipurkar --- packages/trpc/lib/routers/types.ts | 3 ++ .../routers/user/query/userTrackingInfo.ts | 42 ++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/packages/trpc/lib/routers/types.ts b/packages/trpc/lib/routers/types.ts index bcd4298e4..732152f8d 100644 --- a/packages/trpc/lib/routers/types.ts +++ b/packages/trpc/lib/routers/types.ts @@ -55,6 +55,9 @@ type UserDataEurobonusLoggedIn = { linkStatus?: string loginAction?: "login success" memberType: "sas-eurobonus" + memberId?: string + membershipNumber?: string + memberLevel?: MembershipLevel } export type TrackingUserData = diff --git a/packages/trpc/lib/routers/user/query/userTrackingInfo.ts b/packages/trpc/lib/routers/user/query/userTrackingInfo.ts index f56397d0f..add01ea40 100644 --- a/packages/trpc/lib/routers/user/query/userTrackingInfo.ts +++ b/packages/trpc/lib/routers/user/query/userTrackingInfo.ts @@ -15,7 +15,8 @@ export const userTrackingInfo = safeProtectedProcedure.query(async function ({ ctx, }) { if (ctx.app === "partner-sas") { - return getSasEurobonusUserTrackingData(ctx.session) + const scandicUserToken = await ctx.getScandicUserToken() + return getSasEurobonusUserTrackingData(ctx.session, scandicUserToken) } if (ctx.app === "scandic-web") { @@ -81,7 +82,10 @@ async function getScandicFriendsUserTrackingData(session: Session | null) { } } -async function getSasEurobonusUserTrackingData(session: Session | null) { +async function getSasEurobonusUserTrackingData( + session: Session | null, + scandicUserToken: string | null +) { const notLoggedInUserTrackingData: TrackingUserData = { loginStatus: "Non-logged in", memberType: "sas-eurobonus", @@ -92,10 +96,13 @@ async function getSasEurobonusUserTrackingData(session: Session | null) { } try { - const eurobonusProfile = await getEuroBonusProfileData({ - accessToken: session.token.access_token, - loginType: "eurobonus", - }) + const [eurobonusProfile, scandicData] = await Promise.all([ + getEuroBonusProfileData({ + accessToken: session.token.access_token, + loginType: "eurobonus", + }), + getScandicFriendsDataHelper(scandicUserToken), + ]) const loggedInUserTrackingData: TrackingUserData = { loginStatus: "logged in", @@ -105,6 +112,9 @@ async function getSasEurobonusUserTrackingData(session: Session | null) { eurobonusNumber: eurobonusProfile.eurobonusNumber, tier: eurobonusProfile.tier, linkStatus: eurobonusProfile.linkStatus, + memberId: scandicData?.memberId, + membershipNumber: scandicData?.membershipNumber, + memberLevel: scandicData?.memberLevel, } return loggedInUserTrackingData @@ -112,3 +122,23 @@ async function getSasEurobonusUserTrackingData(session: Session | null) { return notLoggedInUserTrackingData } } + +async function getScandicFriendsDataHelper(scandicUserToken: string | null) { + if (!scandicUserToken) return null + + const verifiedUserData = await getVerifiedUser({ + token: { access_token: scandicUserToken }, + }) + + if (!verifiedUserData || !verifiedUserData.loyalty) { + return null + } + + const membership = getFriendsMembership(verifiedUserData.loyalty) + + return { + memberId: verifiedUserData.profileId, + membershipNumber: membership?.membershipNumber, + memberLevel: membership?.membershipLevel, + } +}