feat(LOY-63): redeem campaign

This commit is contained in:
Christian Andolf
2024-12-20 16:56:33 +01:00
parent 29d1721a8a
commit 9584478b34
17 changed files with 552 additions and 391 deletions

View File

@@ -37,6 +37,7 @@ const SurpriseReward = z.object({
rewardType: z.string().optional(),
endsAt: z.string().datetime({ offset: true }).optional(),
coupons: z.array(Coupon).optional(),
operaRewardId: z.string().default(""),
})
export const validateApiRewardSchema = z
@@ -53,6 +54,7 @@ export const validateApiRewardSchema = z
autoApplyReward: z.boolean().default(false),
rewardType: z.string().optional(),
rewardTierLevel: z.string().optional(),
operaRewardId: z.string().default(""),
}),
SurpriseReward,
])
@@ -87,6 +89,7 @@ export const validateApiTierRewardsSchema = z.record(
autoApplyReward: z.boolean().default(false),
rewardType: z.string().optional(),
rewardTierLevel: z.string().optional(),
operaRewardId: z.string().default(""),
})
)
)
@@ -99,7 +102,7 @@ export const validateCmsRewardsSchema = z
z.object({
taxonomies: z.array(
z.object({
term_uid: z.string().optional(),
term_uid: z.string().optional().default(""),
})
),
label: z.string().optional(),
@@ -123,7 +126,7 @@ export const validateCmsRewardsWithRedeemSchema = z
z.object({
taxonomies: z.array(
z.object({
term_uid: z.string().optional(),
term_uid: z.string().optional().default(""),
})
),
label: z.string().optional(),
@@ -163,12 +166,14 @@ export type Reward = CMSReward & {
id: string | undefined
rewardType: string | undefined
redeemLocation: string | undefined
operaRewardId: string
}
export type RewardWithRedeem = CMSRewardWithRedeem & {
id: string | undefined
rewardType: string | undefined
redeemLocation: string | undefined
operaRewardId: string
}
// New endpoint related types and schemas.
@@ -178,16 +183,15 @@ const BenefitReward = z.object({
id: z.string().optional(),
redeemLocation: z.string().optional(),
rewardId: z.string().optional(),
rewardType: z.string().optional(),
rewardType: z.string().optional(), // TODO: Should be "Tier" but can't because of backwards compatibility
rewardTierLevel: z.string().optional(),
status: z.string().optional(),
})
const CouponState = z.enum(["claimed", "redeemed", "viewed"])
const CouponData = z.object({
couponCode: z.string().optional(),
unwrapped: z.boolean().default(false),
state: CouponState,
state: z.enum(["claimed", "redeemed", "viewed"]),
expiresAt: z.string().datetime({ offset: true }).optional(),
})
@@ -195,8 +199,9 @@ const CouponReward = z.object({
title: z.string().optional(),
id: z.string().optional(),
rewardId: z.string().optional(),
rewardType: z.string().optional(),
rewardType: z.enum(["Surprise", "Campaign"]),
redeemLocation: z.string().optional(),
operaRewardId: z.string().default(""),
status: z.string().optional(),
coupon: z.array(CouponData).optional(),
})

View File

@@ -202,6 +202,7 @@ export const rewardQueryRouter = router({
}
const data = await apiResponse.json()
const validatedApiRewards = isNewEndpoint
? validateCategorizedRewardsSchema.safeParse(data)
: validateApiRewardSchema.safeParse(data)
@@ -256,6 +257,10 @@ export const rewardQueryRouter = router({
id: apiReward?.id,
rewardType: apiReward?.rewardType,
redeemLocation: apiReward?.redeemLocation,
operaRewardId:
apiReward && "operaRewardId" in apiReward
? apiReward.operaRewardId
: "",
}
})