Merged in fix/make-user-loyalty-optional (pull request #2044)

fix: Make loyalty optional on user

* Optional user loyalty

* merge


Approved-by: Joakim Jäderberg
Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-05-12 09:00:11 +00:00
committed by Joakim Jäderberg
parent cbbde963dc
commit 60af31762b
12 changed files with 32 additions and 18 deletions

View File

@@ -15,7 +15,7 @@ export default async function SASxScandicLinkPage({
}: PageArgs<LangParams>) {
const profile = await getProfileSafely()
if (!profile) return null
if (!profile || !profile.loyalty) return null
const eurobonusMembership = getEurobonusMembership(profile.loyalty)

View File

@@ -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?

View File

@@ -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]

View File

@@ -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
}

View File

@@ -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

View File

@@ -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: [],

View File

@@ -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

View File

@@ -17,11 +17,11 @@ export const getPrimaryLinks = cache(
userLoyalty,
}: {
lang: Lang
userLoyalty: UserLoyalty
userLoyalty?: UserLoyalty
}): Promise<MyPagesLink[]> => {
const intl = await getIntl({ lang })
const showSASLink = isScandicXSASActive(userLoyalty)
const showSASLink = userLoyalty ? isScandicXSASActive(userLoyalty) : false
const [showTeamMemberLink] = await safeTry(showTeamMemberCard())
const menuItems: MyPagesLink[] = [

View File

@@ -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}`,
}
})

View File

@@ -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
}

View File

@@ -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,

View File

@@ -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(