Merged in feat/3614-basicInfo (pull request #3427)
feat(SW-3614): use new loyalty prop in basicProfile * feat(SW-3614): use new loyalty prop in basicProfile * PR fixes Approved-by: Matilda Landström
This commit is contained in:
@@ -8,6 +8,7 @@ import type {
|
||||
export enum scandicMembershipTypes {
|
||||
SCANDIC_NATIVE = "SCANDIC_NATIVE",
|
||||
SAS_EB = "SAS_EB",
|
||||
"OTHER" = "OTHER",
|
||||
}
|
||||
|
||||
export function isScandicNativeMembership(
|
||||
|
||||
@@ -2,7 +2,7 @@ import { z } from "zod"
|
||||
|
||||
import { countriesMap } from "../../constants/countries"
|
||||
import { imageSchema } from "../../routers/hotels/schemas/image"
|
||||
import { getFriendsMembership } from "./helpers"
|
||||
import { getFriendsMembership, scandicMembershipTypes } from "./helpers"
|
||||
|
||||
const scandicFriendsTier = z.enum(["L1", "L2", "L3", "L4", "L5", "L6", "L7"])
|
||||
const sasEurobonusTier = z.enum(["EBB", "EBS", "EBG", "EBD", "EBP"])
|
||||
@@ -23,7 +23,7 @@ const otherMembershipSchema = z
|
||||
|
||||
export const sasMembershipSchema = z
|
||||
.object({
|
||||
type: z.literal("SAS_EB"),
|
||||
type: z.literal(scandicMembershipTypes.SAS_EB),
|
||||
tier: sasEurobonusTier,
|
||||
nextTier: sasEurobonusTier.nullish(),
|
||||
spendablePoints: z.number().nullish(),
|
||||
@@ -43,7 +43,7 @@ export const sasMembershipSchema = z
|
||||
|
||||
export const friendsMembershipSchema = z
|
||||
.object({
|
||||
type: z.literal("SCANDIC_NATIVE"),
|
||||
type: z.literal(scandicMembershipTypes.SCANDIC_NATIVE),
|
||||
tier: scandicFriendsTier,
|
||||
nextTier: scandicFriendsTier.nullish(),
|
||||
pointsToNextTier: z.number().nullish(),
|
||||
@@ -140,8 +140,6 @@ export const getBasicUserSchema = z.object({
|
||||
lastName: z.string(),
|
||||
phoneNumber: z.string().optional(),
|
||||
profileId: z.string().optional(),
|
||||
membershipNumber: z.string(),
|
||||
tier: scandicFriendsTier,
|
||||
address: z
|
||||
.object({
|
||||
city: z.string().optional(),
|
||||
@@ -152,6 +150,21 @@ export const getBasicUserSchema = z.object({
|
||||
})
|
||||
.optional()
|
||||
.nullable(),
|
||||
loyalty: z
|
||||
.object({
|
||||
tier: scandicFriendsTier,
|
||||
tierExpires: z.string(),
|
||||
memberships: z.array(
|
||||
z.object({
|
||||
membershipType: z
|
||||
.nativeEnum(scandicMembershipTypes)
|
||||
.catch(scandicMembershipTypes.OTHER),
|
||||
membershipNumber: z.string(),
|
||||
})
|
||||
),
|
||||
})
|
||||
.optional()
|
||||
.nullable(),
|
||||
})
|
||||
|
||||
export const creditCardSchema = z
|
||||
|
||||
@@ -3,6 +3,7 @@ import { createCounter } from "@scandic-hotels/common/telemetry"
|
||||
import { safeProtectedProcedure } from "../../../procedures"
|
||||
import { isValidSession } from "../../../utils/session"
|
||||
import { getEuroBonusProfileData } from "../../partners/sas/getEuroBonusProfile"
|
||||
import { scandicMembershipTypes } from "../helpers"
|
||||
import { getBasicUser } from "../utils/getBasicUser"
|
||||
|
||||
import type { LoginType } from "@scandic-hotels/common/constants/loginType"
|
||||
@@ -62,8 +63,10 @@ async function getScandicFriendsUserTrackingData(session: Session | null) {
|
||||
loginStatus: "logged in",
|
||||
loginType: session.token.loginType as LoginType,
|
||||
memberId: verifiedUserData.profileId,
|
||||
membershipNumber: verifiedUserData.membershipNumber,
|
||||
memberLevel: verifiedUserData?.tier,
|
||||
membershipNumber: verifiedUserData.loyalty?.memberships?.find(
|
||||
(m) => m.membershipType === scandicMembershipTypes.SCANDIC_NATIVE
|
||||
)?.membershipNumber,
|
||||
memberLevel: verifiedUserData.loyalty?.tier,
|
||||
loginAction: "login success",
|
||||
memberType,
|
||||
}
|
||||
@@ -134,7 +137,9 @@ async function getScandicFriendsDataHelper(scandicUserToken: string | null) {
|
||||
|
||||
return {
|
||||
memberId: verifiedUserData.profileId,
|
||||
membershipNumber: verifiedUserData.membershipNumber,
|
||||
memberLevel: verifiedUserData.tier,
|
||||
membershipNumber: verifiedUserData.loyalty?.memberships?.find(
|
||||
(m) => m.membershipType === scandicMembershipTypes.SCANDIC_NATIVE
|
||||
)?.membershipNumber,
|
||||
memberLevel: verifiedUserData.loyalty?.tier,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
serverErrorByStatus,
|
||||
sessionExpiredError,
|
||||
} from "../../../errors"
|
||||
import { scandicMembershipTypes } from "../helpers"
|
||||
import { getBasicUserSchema } from "../output"
|
||||
|
||||
import type z from "zod"
|
||||
@@ -63,15 +64,19 @@ export const getBasicUser = cache(
|
||||
|
||||
function addUserToSentry(apiJson: unknown) {
|
||||
const typedData = apiJson as DeepPartial<z.input<typeof getBasicUserSchema>>
|
||||
const memberShipNumber = typedData?.loyalty?.memberships?.find(
|
||||
(m) => m?.membershipType === scandicMembershipTypes.SCANDIC_NATIVE
|
||||
)?.membershipNumber
|
||||
|
||||
if (
|
||||
typeof typedData?.profileId === "undefined" ||
|
||||
typeof typedData?.membershipNumber === "undefined"
|
||||
typeof memberShipNumber === "undefined"
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
Sentry.setUser({
|
||||
id: typedData?.profileId,
|
||||
username: typedData?.membershipNumber,
|
||||
username: memberShipNumber,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user