Merged in feat/sw-1975-get-profile-v2 (pull request #1651)

Use get Profile V2 endpoint

Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-04-08 06:26:00 +00:00
parent d282437a3d
commit c56a0b8ce9
18 changed files with 208 additions and 168 deletions

View File

@@ -3,50 +3,78 @@ import {
MembershipLevelEnum,
} from "@/constants/membershipLevels"
import type { z } from "zod"
import type {
EurobonusMembership,
Membership,
NativeFriendsMembership,
User,
UserLoyalty,
} from "@/types/user"
import type { Membership, Memberships, User } from "@/types/user"
import type { getMembershipCardsSchema } from "@/server/routers/user/output"
export enum scandicMemberships {
guestpr = "guestpr",
scandicfriends = "scandicfriend's",
sas_eb = "sas_eb",
scandic_native_tiers = "scandic_native_tiers",
export enum scandicMembershipTypes {
SCANDIC_NATIVE = "SCANDIC_NATIVE",
SAS_EB = "SAS_EB",
}
export function getFriendsMembership(memberships: Memberships) {
return memberships?.find(
(membership) =>
membership.membershipType.toLowerCase() === scandicMemberships.guestpr
) as FriendsMembership | undefined
export function isScandicNativeMembership(
membership: Membership
): membership is NativeFriendsMembership {
return membership.type === scandicMembershipTypes.SCANDIC_NATIVE
}
export type FriendsMembership = Omit<
NonNullable<Membership>,
"membershipLevel" | "nextLevel"
> & {
membershipLevel: MembershipLevel
nextLevel: MembershipLevel
}
export function getFriendsMembership(userLoyalty: UserLoyalty) {
const { memberships, ...loyalty } = userLoyalty
export function getEurobonusMembership(memberships: Memberships) {
return memberships?.find(
(membership) =>
membership.membershipType.toLowerCase() === scandicMemberships.sas_eb
)
}
const friendsMembership = memberships.find(isScandicNativeMembership)
export function getMembershipCards(
memberships: z.infer<typeof getMembershipCardsSchema>
) {
return memberships.filter(function (membership) {
return (
membership.membershipType.toLowerCase() !== scandicMemberships.guestpr &&
membership.membershipType.toLowerCase() !==
scandicMemberships.scandicfriends
if (!friendsMembership) return undefined
const pointExpiration = loyalty.pointExpirations
.sort(
(a, b) => new Date(a.expires).getTime() - new Date(b.expires).getTime()
)
})
.at(0)
// Map to the same format that was used with Profile V1 to avoid larger changes for now.
const result = {
membershipType: friendsMembership.type,
membershipNumber: friendsMembership.membershipNumber,
membershipLevel: loyalty.tier,
nextLevel: friendsMembership.nextTier,
currentPoints: loyalty.points.spendable,
expirationDate: loyalty.tierExpires,
nightsToTopTier: friendsMembership.nightsToTopTier,
pointsRequiredToNextlevel: friendsMembership.pointsToNextTier,
tierExpirationDate: loyalty.tierExpires,
pointsExpiryDate: pointExpiration?.expires,
pointsToExpire: pointExpiration?.points,
memberSince: friendsMembership.memberSince,
}
return result
}
function isEurobonusMembership(
membership: Membership
): membership is EurobonusMembership {
return membership.type === scandicMembershipTypes.SAS_EB
}
export function getEurobonusMembership(loyalty: UserLoyalty) {
return loyalty.memberships?.find(isEurobonusMembership)
}
export function getMembershipCards(userLoyalty: UserLoyalty) {
return userLoyalty.memberships
.filter(
(membership) => membership.type !== scandicMembershipTypes.SCANDIC_NATIVE
)
.map((membership) => ({
currentPoints: 0, // We only have points for Friends so we can't set this for now
expirationDate: membership.tierExpires,
membershipNumber: membership.membershipNumber,
membershipType: membership.type,
memberSince: membership.memberSince,
}))
}
export function isHighestMembership(