chore: remove unused filter modal
remove old cms model refactor reward types
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { MembershipLevelEnum } from "@/constants/membershipLevels"
|
||||
import { COUPON_REWARD_TYPES, REWARD_CATEGORIES } from "@/constants/rewards"
|
||||
|
||||
import {
|
||||
linkRefsUnionSchema,
|
||||
@@ -11,67 +10,18 @@ import {
|
||||
import { systemSchema } from "../schemas/system"
|
||||
|
||||
export {
|
||||
type ApiReward,
|
||||
type CMSReward,
|
||||
type CMSRewardsResponse,
|
||||
type CMSRewardsWithRedeemResponse,
|
||||
type CMSRewardWithRedeem,
|
||||
type Coupon,
|
||||
type GetRewardWithRedeemRefsSchema,
|
||||
type RedeemableCoupon,
|
||||
type RedeemLocation,
|
||||
rewardWithRedeemRefsSchema,
|
||||
type Surprise,
|
||||
type SurpriseReward,
|
||||
BenefitReward,
|
||||
CouponData,
|
||||
CouponReward,
|
||||
REDEEM_LOCATIONS,
|
||||
REWARD_TYPES,
|
||||
rewardRefsSchema,
|
||||
validateApiAllTiersSchema,
|
||||
validateCategorizedRewardsSchema,
|
||||
validateCmsRewardsSchema,
|
||||
validateCmsRewardsWithRedeemSchema,
|
||||
}
|
||||
|
||||
enum TierKey {
|
||||
tier1 = MembershipLevelEnum.L1,
|
||||
tier2 = MembershipLevelEnum.L2,
|
||||
tier3 = MembershipLevelEnum.L3,
|
||||
tier4 = MembershipLevelEnum.L4,
|
||||
tier5 = MembershipLevelEnum.L5,
|
||||
tier6 = MembershipLevelEnum.L6,
|
||||
tier7 = MembershipLevelEnum.L7,
|
||||
}
|
||||
|
||||
type Key = keyof typeof TierKey
|
||||
|
||||
/*
|
||||
* TODO: Remove this once we start using the new CMS model with redeem entirely
|
||||
*/
|
||||
const validateCmsRewardsSchema = z
|
||||
.object({
|
||||
data: z.object({
|
||||
all_reward: z.object({
|
||||
items: z.array(
|
||||
z.object({
|
||||
taxonomies: z.array(
|
||||
z.object({
|
||||
term_uid: z.string().optional().default(""),
|
||||
})
|
||||
),
|
||||
label: z.string().optional(),
|
||||
reward_id: z.string(),
|
||||
grouped_label: z.string().optional(),
|
||||
description: z.string().optional(),
|
||||
grouped_description: z.string().optional(),
|
||||
value: z.string().optional(),
|
||||
})
|
||||
),
|
||||
}),
|
||||
}),
|
||||
})
|
||||
.transform((data) => data.data.all_reward.items)
|
||||
|
||||
type CMSRewardsResponse = z.input<typeof validateCmsRewardsSchema>
|
||||
type CMSReward = z.output<typeof validateCmsRewardsSchema>[number]
|
||||
|
||||
const validateCmsRewardsWithRedeemSchema = z
|
||||
.object({
|
||||
data: z.object({
|
||||
all_reward: z.object({
|
||||
@@ -111,14 +61,7 @@ const validateCmsRewardsWithRedeemSchema = z
|
||||
})
|
||||
.transform((data) => data.data.all_reward.items)
|
||||
|
||||
type CMSRewardsWithRedeemResponse = z.input<
|
||||
typeof validateCmsRewardsWithRedeemSchema
|
||||
>
|
||||
type CMSRewardWithRedeem = z.output<
|
||||
typeof validateCmsRewardsWithRedeemSchema
|
||||
>[number]
|
||||
|
||||
const rewardWithRedeemRefsSchema = z.object({
|
||||
const rewardRefsSchema = z.object({
|
||||
data: z.object({
|
||||
all_reward: z.object({
|
||||
items: z.array(
|
||||
@@ -139,22 +82,42 @@ const rewardWithRedeemRefsSchema = z.object({
|
||||
}),
|
||||
})
|
||||
|
||||
type GetRewardWithRedeemRefsSchema = z.input<typeof rewardWithRedeemRefsSchema>
|
||||
|
||||
const REDEEM_LOCATIONS = ["Non-redeemable", "On-site", "Online"] as const
|
||||
type RedeemLocation = (typeof REDEEM_LOCATIONS)[number]
|
||||
const REWARD_CATEGORIES = [
|
||||
"Restaurants",
|
||||
"Bar",
|
||||
"Voucher",
|
||||
"Services and rooms",
|
||||
"Spa and gym",
|
||||
] as const
|
||||
|
||||
const BaseReward = z.object({
|
||||
title: z.string().optional(),
|
||||
id: z.string(),
|
||||
categories: z
|
||||
.array(z.enum(REWARD_CATEGORIES).or(z.literal("")))
|
||||
.optional()
|
||||
// we sometimes receive empty categories, this filters them out
|
||||
.transform((categories = []) =>
|
||||
categories.filter(
|
||||
(c): c is (typeof REWARD_CATEGORIES)[number] => c !== ""
|
||||
)
|
||||
),
|
||||
rewardId: z.string(),
|
||||
redeemLocation: z.enum(REDEEM_LOCATIONS),
|
||||
status: z.enum(["active", "expired"]),
|
||||
})
|
||||
|
||||
const REWARD_TYPES = {
|
||||
Surprise: "Surprise",
|
||||
Campaign: "Campaign",
|
||||
MemberVoucher: "Member-voucher",
|
||||
Tier: "Tier",
|
||||
} as const
|
||||
|
||||
const BenefitReward = BaseReward.merge(
|
||||
z.object({
|
||||
rewardType: z.enum(["Tier"]),
|
||||
rewardType: z.enum([REWARD_TYPES.Tier]),
|
||||
rewardTierLevel: z.string().optional(),
|
||||
})
|
||||
)
|
||||
@@ -165,16 +128,15 @@ const CouponData = z.object({
|
||||
state: z.enum(["claimed", "redeemed", "viewed"]),
|
||||
expiresAt: z.string().datetime({ offset: true }).optional(),
|
||||
})
|
||||
type Coupon = z.output<typeof CouponData>
|
||||
type RedeemableCoupon = Coupon & {
|
||||
state: Exclude<Coupon["state"], "redeemed">
|
||||
}
|
||||
|
||||
const CouponReward = BaseReward.merge(
|
||||
z.object({
|
||||
rewardType: z.enum(COUPON_REWARD_TYPES),
|
||||
rewardType: z.enum([
|
||||
REWARD_TYPES.Surprise,
|
||||
REWARD_TYPES.Campaign,
|
||||
REWARD_TYPES.MemberVoucher,
|
||||
]),
|
||||
operaRewardId: z.string().default(""),
|
||||
categories: z.array(z.enum(REWARD_CATEGORIES)).optional(),
|
||||
coupon: z
|
||||
.array(CouponData)
|
||||
.optional()
|
||||
@@ -182,26 +144,24 @@ const CouponReward = BaseReward.merge(
|
||||
})
|
||||
)
|
||||
|
||||
type SurpriseReward = z.output<typeof CouponReward> & {
|
||||
rewardType: "Surprise"
|
||||
}
|
||||
const validateCategorizedRewardsSchema = z.object({
|
||||
benefits: z.array(BenefitReward),
|
||||
coupons: z.array(CouponReward),
|
||||
})
|
||||
|
||||
interface Surprise extends CMSReward {
|
||||
data: SurpriseReward
|
||||
}
|
||||
const TierKeyMapping = {
|
||||
tier1: MembershipLevelEnum.L1,
|
||||
tier2: MembershipLevelEnum.L2,
|
||||
tier3: MembershipLevelEnum.L3,
|
||||
tier4: MembershipLevelEnum.L4,
|
||||
tier5: MembershipLevelEnum.L5,
|
||||
tier6: MembershipLevelEnum.L6,
|
||||
tier7: MembershipLevelEnum.L7,
|
||||
} as const
|
||||
|
||||
const validateCategorizedRewardsSchema = z
|
||||
.object({
|
||||
benefits: z.array(BenefitReward),
|
||||
coupons: z.array(CouponReward),
|
||||
})
|
||||
.transform((data) => [...data.benefits, ...data.coupons])
|
||||
|
||||
type ApiReward = z.output<typeof validateCategorizedRewardsSchema>[number]
|
||||
const TierKeys = Object.keys(TierKeyMapping) as [keyof typeof TierKeyMapping]
|
||||
|
||||
const validateApiAllTiersSchema = z.record(
|
||||
z.nativeEnum(TierKey).transform((data) => {
|
||||
return TierKey[data as unknown as Key]
|
||||
}),
|
||||
z.enum(TierKeys).transform((data) => TierKeyMapping[data]),
|
||||
z.array(BenefitReward)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user