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>) { }: PageArgs<LangParams>) {
const profile = await getProfileSafely() const profile = await getProfileSafely()
if (!profile) return null if (!profile || !profile.loyalty) return null
const eurobonusMembership = getEurobonusMembership(profile.loyalty) 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) { export default async function ExpiringPoints({ user }: UserProps) {
const intl = await getIntl() const intl = await getIntl()
const membership = getFriendsMembership(user.loyalty) const membership = user.loyalty ? getFriendsMembership(user.loyalty) : null
if (!membership || !membership.pointsToExpire) { if (!membership || !membership.pointsToExpire) {
// TODO: handle this case? // 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) { export default async function Points({ user }: UserProps) {
const intl = await getIntl() const intl = await getIntl()
const membership = getFriendsMembership(user.loyalty) const membership = user.loyalty ? getFriendsMembership(user.loyalty) : null
const nextLevel = const nextLevel =
membership?.nextLevel && MembershipLevelEnum[membership.nextLevel] membership?.nextLevel && MembershipLevelEnum[membership.nextLevel]

View File

@@ -72,7 +72,7 @@ export default async function SASLinkedAccount({
async function MatchedAccountInfo() { async function MatchedAccountInfo() {
const user = await getProfileWithExtendedPartnerData() const user = await getProfileWithExtendedPartnerData()
if (!user || "error" in user) { if (!user || "error" in user || !user.loyalty) {
return null return null
} }

View File

@@ -16,7 +16,7 @@ import type { Lang } from "@/constants/languages"
export async function TransferPointsForm({ lang }: { lang: Lang }) { export async function TransferPointsForm({ lang }: { lang: Lang }) {
const profile = await getProfileWithExtendedPartnerData() const profile = await getProfileWithExtendedPartnerData()
if (!profile) return null if (!profile || !profile.loyalty) return null
const eurobonusMembership = getEurobonusMembership(profile?.loyalty) const eurobonusMembership = getEurobonusMembership(profile?.loyalty)
if (!eurobonusMembership) return null if (!eurobonusMembership) return null

View File

@@ -149,7 +149,7 @@ const authenticatedUser: SafeUser = {
language: undefined, language: undefined,
lastName: "Booking", lastName: "Booking",
membershipNumber: "01234567890123", membershipNumber: "01234567890123",
membership: undefined, membership: null,
loyalty: { loyalty: {
memberships: [], memberships: [],
pointExpirations: [], pointExpirations: [],
@@ -180,7 +180,7 @@ const badAuthenticatedUser: SafeUser = {
language: undefined, language: undefined,
lastName: `Bad name ${Math.random()}`, lastName: `Bad name ${Math.random()}`,
membershipNumber: "0987654321", membershipNumber: "0987654321",
membership: undefined, membership: null,
loyalty: { loyalty: {
memberships: [], memberships: [],
pointExpirations: [], pointExpirations: [],

View File

@@ -15,7 +15,7 @@ import styles from "./sidebar.module.css"
export default async function SidebarMyPages() { export default async function SidebarMyPages() {
const intl = await getIntl() const intl = await getIntl()
const profile = await getProfileSafely() const profile = await getProfileSafely()
const eurobonusMembership = profile const eurobonusMembership = profile?.loyalty
? getEurobonusMembership(profile.loyalty) ? getEurobonusMembership(profile.loyalty)
: null : null

View File

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

View File

@@ -103,7 +103,7 @@ export const getUserSchema = z
}) })
.optional() .optional()
.nullable(), .nullable(),
loyalty: userLoyaltySchema, loyalty: userLoyaltySchema.optional(),
}), }),
type: z.string(), type: z.string(),
}), }),
@@ -111,7 +111,9 @@ export const getUserSchema = z
.transform((apiResponse) => { .transform((apiResponse) => {
return { return {
...apiResponse.data.attributes, ...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}`, 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 }) { membershipLevel: protectedProcedure.query(async function ({ ctx }) {
const verifiedData = await getVerifiedUser({ session: ctx.session }) const verifiedData = await getVerifiedUser({ session: ctx.session })
if (!verifiedData || "error" in verifiedData) { if (
!verifiedData ||
"error" in verifiedData ||
!verifiedData.data.loyalty
) {
return null return null
} }
@@ -118,7 +122,11 @@ export const userQueryRouter = router({
} }
const verifiedData = await getVerifiedUser({ session: ctx.session }) const verifiedData = await getVerifiedUser({ session: ctx.session })
if (!verifiedData || "error" in verifiedData) { if (
!verifiedData ||
"error" in verifiedData ||
!verifiedData.data.loyalty
) {
return null return null
} }
@@ -151,7 +159,11 @@ export const userQueryRouter = router({
try { try {
const verifiedUserData = await getVerifiedUser({ session: ctx.session }) const verifiedUserData = await getVerifiedUser({ session: ctx.session })
if (!verifiedUserData || "error" in verifiedUserData) { if (
!verifiedUserData ||
"error" in verifiedUserData ||
!verifiedUserData.data.loyalty
) {
metricsUserTrackingInfo.success({ metricsUserTrackingInfo.success({
reason: "invalid user data", reason: "invalid user data",
data: notLoggedInUserTrackingData, data: notLoggedInUserTrackingData,
@@ -395,7 +407,7 @@ export const userQueryRouter = router({
membershipCards: protectedProcedure.query(async function ({ ctx }) { membershipCards: protectedProcedure.query(async function ({ ctx }) {
const userData = await getVerifiedUser({ session: ctx.session }) const userData = await getVerifiedUser({ session: ctx.session })
if (!userData || "error" in userData) { if (!userData || "error" in userData || !userData.data.loyalty) {
return null return null
} }

View File

@@ -233,7 +233,7 @@ export function parsedUser(data: User, isMFA: boolean) {
language: data.language, language: data.language,
lastName: data.lastName, lastName: data.lastName,
membershipNumber: data.membershipNumber, membershipNumber: data.membershipNumber,
membership: getFriendsMembership(data.loyalty), membership: data.loyalty ? getFriendsMembership(data.loyalty) : null,
loyalty: data.loyalty, loyalty: data.loyalty,
name: `${data.firstName} ${data.lastName}`, name: `${data.firstName} ${data.lastName}`,
phoneNumber: data.phoneNumber, phoneNumber: data.phoneNumber,

View File

@@ -27,7 +27,7 @@ export function getFriendsMembership(userLoyalty: UserLoyalty) {
const friendsMembership = memberships.find(isScandicNativeMembership) const friendsMembership = memberships.find(isScandicNativeMembership)
if (!friendsMembership) return undefined if (!friendsMembership) return null
const pointExpiration = loyalty.pointExpirations const pointExpiration = loyalty.pointExpirations
.sort( .sort(