83 lines
2.2 KiB
TypeScript
83 lines
2.2 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { MembershipLevelEnum } from "@/constants/membershipLevels"
|
|
|
|
export const validateApiRewardSchema = z.object({
|
|
data: z.array(
|
|
z
|
|
.object({
|
|
title: z.string().optional(),
|
|
id: z.string().optional(),
|
|
type: z.string().optional(),
|
|
status: z.string().optional(),
|
|
rewardId: z.string().optional(),
|
|
redeemLocation: z.string().optional(),
|
|
autoApplyReward: z.boolean().default(false),
|
|
rewardType: z.string().optional(),
|
|
rewardTierLevel: z.string().optional(),
|
|
})
|
|
.optional()
|
|
),
|
|
})
|
|
|
|
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
|
|
|
|
export const validateApiTierRewardsSchema = z.record(
|
|
z.nativeEnum(TierKey).transform((data) => {
|
|
return TierKey[data as unknown as Key]
|
|
}),
|
|
z.array(
|
|
z
|
|
.object({
|
|
title: z.string().optional(),
|
|
id: z.string().optional(),
|
|
type: z.string().optional(),
|
|
status: z.string().optional(),
|
|
rewardId: z.string().optional(),
|
|
redeemLocation: z.string().optional(),
|
|
autoApplyReward: z.boolean().default(false),
|
|
rewardType: z.string().optional(),
|
|
rewardTierLevel: z.string().optional(),
|
|
})
|
|
.optional()
|
|
)
|
|
)
|
|
|
|
export 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(),
|
|
})
|
|
),
|
|
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)
|
|
|
|
export type CmsRewardsResponse = z.input<typeof validateCmsRewardsSchema>
|
|
|
|
export type Reward = z.output<typeof validateCmsRewardsSchema>[0]
|