diff --git a/apps/scandic-web/app/[lang]/(partner)/(sas)/(protected)/sas-x-scandic/link/page.tsx b/apps/scandic-web/app/[lang]/(partner)/(sas)/(protected)/sas-x-scandic/link/page.tsx index e037cae45..1f724963b 100644 --- a/apps/scandic-web/app/[lang]/(partner)/(sas)/(protected)/sas-x-scandic/link/page.tsx +++ b/apps/scandic-web/app/[lang]/(partner)/(sas)/(protected)/sas-x-scandic/link/page.tsx @@ -15,7 +15,7 @@ export default async function SASxScandicLinkPage({ }: PageArgs) { const profile = await getProfileSafely() - if (!profile) return null + if (!profile || !profile.loyalty) return null const eurobonusMembership = getEurobonusMembership(profile.loyalty) diff --git a/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/ExpiringPoints/index.tsx b/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/ExpiringPoints/index.tsx index 656183c1a..b0e4c3b40 100644 --- a/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/ExpiringPoints/index.tsx +++ b/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/ExpiringPoints/index.tsx @@ -10,7 +10,7 @@ import type { UserProps } from "@/types/components/myPages/user" export default async function ExpiringPoints({ user }: UserProps) { const intl = await getIntl() - const membership = getFriendsMembership(user.loyalty) + const membership = user.loyalty ? getFriendsMembership(user.loyalty) : null if (!membership || !membership.pointsToExpire) { // TODO: handle this case? diff --git a/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx b/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx index fb6dc3a8c..1742b05f1 100644 --- a/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx +++ b/apps/scandic-web/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx @@ -12,7 +12,7 @@ import type { UserProps } from "@/types/components/myPages/user" export default async function Points({ user }: UserProps) { const intl = await getIntl() - const membership = getFriendsMembership(user.loyalty) + const membership = user.loyalty ? getFriendsMembership(user.loyalty) : null const nextLevel = membership?.nextLevel && MembershipLevelEnum[membership.nextLevel] diff --git a/apps/scandic-web/components/Blocks/DynamicContent/SAS/LinkedAccounts/index.tsx b/apps/scandic-web/components/Blocks/DynamicContent/SAS/LinkedAccounts/index.tsx index f20a44425..285da6dd9 100644 --- a/apps/scandic-web/components/Blocks/DynamicContent/SAS/LinkedAccounts/index.tsx +++ b/apps/scandic-web/components/Blocks/DynamicContent/SAS/LinkedAccounts/index.tsx @@ -72,7 +72,7 @@ export default async function SASLinkedAccount({ async function MatchedAccountInfo() { const user = await getProfileWithExtendedPartnerData() - if (!user || "error" in user) { + if (!user || "error" in user || !user.loyalty) { return null } diff --git a/apps/scandic-web/components/Blocks/DynamicContent/SAS/TransferPoints/TransferPointsForm.tsx b/apps/scandic-web/components/Blocks/DynamicContent/SAS/TransferPoints/TransferPointsForm.tsx index d33734132..d2c63de9d 100644 --- a/apps/scandic-web/components/Blocks/DynamicContent/SAS/TransferPoints/TransferPointsForm.tsx +++ b/apps/scandic-web/components/Blocks/DynamicContent/SAS/TransferPoints/TransferPointsForm.tsx @@ -16,7 +16,7 @@ import type { Lang } from "@/constants/languages" export async function TransferPointsForm({ lang }: { lang: Lang }) { const profile = await getProfileWithExtendedPartnerData() - if (!profile) return null + if (!profile || !profile.loyalty) return null const eurobonusMembership = getEurobonusMembership(profile?.loyalty) if (!eurobonusMembership) return null diff --git a/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts b/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts index 4c8649e24..1ca1b0df2 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts +++ b/apps/scandic-web/components/HotelReservation/MyStay/accessBooking.test.ts @@ -149,7 +149,7 @@ const authenticatedUser: SafeUser = { language: undefined, lastName: "Booking", membershipNumber: "01234567890123", - membership: undefined, + membership: null, loyalty: { memberships: [], pointExpirations: [], @@ -180,7 +180,7 @@ const badAuthenticatedUser: SafeUser = { language: undefined, lastName: `Bad name ${Math.random()}`, membershipNumber: "0987654321", - membership: undefined, + membership: null, loyalty: { memberships: [], pointExpirations: [], diff --git a/apps/scandic-web/components/MyPages/Sidebar/index.tsx b/apps/scandic-web/components/MyPages/Sidebar/index.tsx index 81aa27b0a..fef1ab14b 100644 --- a/apps/scandic-web/components/MyPages/Sidebar/index.tsx +++ b/apps/scandic-web/components/MyPages/Sidebar/index.tsx @@ -15,7 +15,7 @@ import styles from "./sidebar.module.css" export default async function SidebarMyPages() { const intl = await getIntl() const profile = await getProfileSafely() - const eurobonusMembership = profile + const eurobonusMembership = profile?.loyalty ? getEurobonusMembership(profile.loyalty) : null diff --git a/apps/scandic-web/server/routers/navigation/mypages/getPrimaryLinks.ts b/apps/scandic-web/server/routers/navigation/mypages/getPrimaryLinks.ts index f1ab9e0c7..8febf8a20 100644 --- a/apps/scandic-web/server/routers/navigation/mypages/getPrimaryLinks.ts +++ b/apps/scandic-web/server/routers/navigation/mypages/getPrimaryLinks.ts @@ -17,11 +17,11 @@ export const getPrimaryLinks = cache( userLoyalty, }: { lang: Lang - userLoyalty: UserLoyalty + userLoyalty?: UserLoyalty }): Promise => { const intl = await getIntl({ lang }) - const showSASLink = isScandicXSASActive(userLoyalty) + const showSASLink = userLoyalty ? isScandicXSASActive(userLoyalty) : false const [showTeamMemberLink] = await safeTry(showTeamMemberCard()) const menuItems: MyPagesLink[] = [ diff --git a/apps/scandic-web/server/routers/user/output.ts b/apps/scandic-web/server/routers/user/output.ts index 03bc44d9f..9a3faace8 100644 --- a/apps/scandic-web/server/routers/user/output.ts +++ b/apps/scandic-web/server/routers/user/output.ts @@ -103,7 +103,7 @@ export const getUserSchema = z }) .optional() .nullable(), - loyalty: userLoyaltySchema, + loyalty: userLoyaltySchema.optional(), }), type: z.string(), }), @@ -111,7 +111,9 @@ export const getUserSchema = z .transform((apiResponse) => { return { ...apiResponse.data.attributes, - membership: getFriendsMembership(apiResponse.data.attributes.loyalty), + membership: apiResponse.data.attributes.loyalty + ? getFriendsMembership(apiResponse.data.attributes.loyalty) + : null, name: `${apiResponse.data.attributes.firstName} ${apiResponse.data.attributes.lastName}`, } }) diff --git a/apps/scandic-web/server/routers/user/query.ts b/apps/scandic-web/server/routers/user/query.ts index bbde3acad..26040a14f 100644 --- a/apps/scandic-web/server/routers/user/query.ts +++ b/apps/scandic-web/server/routers/user/query.ts @@ -105,7 +105,11 @@ export const userQueryRouter = router({ }), membershipLevel: protectedProcedure.query(async function ({ ctx }) { const verifiedData = await getVerifiedUser({ session: ctx.session }) - if (!verifiedData || "error" in verifiedData) { + if ( + !verifiedData || + "error" in verifiedData || + !verifiedData.data.loyalty + ) { return null } @@ -118,7 +122,11 @@ export const userQueryRouter = router({ } const verifiedData = await getVerifiedUser({ session: ctx.session }) - if (!verifiedData || "error" in verifiedData) { + if ( + !verifiedData || + "error" in verifiedData || + !verifiedData.data.loyalty + ) { return null } @@ -151,7 +159,11 @@ export const userQueryRouter = router({ try { const verifiedUserData = await getVerifiedUser({ session: ctx.session }) - if (!verifiedUserData || "error" in verifiedUserData) { + if ( + !verifiedUserData || + "error" in verifiedUserData || + !verifiedUserData.data.loyalty + ) { metricsUserTrackingInfo.success({ reason: "invalid user data", data: notLoggedInUserTrackingData, @@ -395,7 +407,7 @@ export const userQueryRouter = router({ membershipCards: protectedProcedure.query(async function ({ ctx }) { const userData = await getVerifiedUser({ session: ctx.session }) - if (!userData || "error" in userData) { + if (!userData || "error" in userData || !userData.data.loyalty) { return null } diff --git a/apps/scandic-web/server/routers/user/utils.ts b/apps/scandic-web/server/routers/user/utils.ts index b6c83fd3e..361e7aef7 100644 --- a/apps/scandic-web/server/routers/user/utils.ts +++ b/apps/scandic-web/server/routers/user/utils.ts @@ -233,7 +233,7 @@ export function parsedUser(data: User, isMFA: boolean) { language: data.language, lastName: data.lastName, membershipNumber: data.membershipNumber, - membership: getFriendsMembership(data.loyalty), + membership: data.loyalty ? getFriendsMembership(data.loyalty) : null, loyalty: data.loyalty, name: `${data.firstName} ${data.lastName}`, phoneNumber: data.phoneNumber, diff --git a/apps/scandic-web/utils/user.ts b/apps/scandic-web/utils/user.ts index 55e986537..5e1ceb8e6 100644 --- a/apps/scandic-web/utils/user.ts +++ b/apps/scandic-web/utils/user.ts @@ -27,7 +27,7 @@ export function getFriendsMembership(userLoyalty: UserLoyalty) { const friendsMembership = memberships.find(isScandicNativeMembership) - if (!friendsMembership) return undefined + if (!friendsMembership) return null const pointExpiration = loyalty.pointExpirations .sort(