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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user