79 lines
2.4 KiB
TypeScript
79 lines
2.4 KiB
TypeScript
import { z } from "zod/v4";
|
|
import { FeatureSchema } from "../../featureModels/featureModels";
|
|
import { RolloverConfigSchema } from "../../productV2Models/productItemModels/productItemModels";
|
|
import { EntInterval } from "../intervals/entitlementInterval";
|
|
|
|
export enum AllowanceType {
|
|
Fixed = "fixed",
|
|
Unlimited = "unlimited",
|
|
None = "none",
|
|
}
|
|
|
|
export enum EntitlementDuration {
|
|
Day = "day",
|
|
Week = "week",
|
|
Month = "month",
|
|
Year = "year",
|
|
}
|
|
|
|
export const EntitlementExpirySchema = z.object({
|
|
duration: z.nativeEnum(EntitlementDuration),
|
|
length: z.number(),
|
|
});
|
|
|
|
export const EntitlementSchema = z.object({
|
|
// Required fields - no .optional()
|
|
id: z.string(),
|
|
created_at: z.number(),
|
|
internal_feature_id: z.string(),
|
|
internal_product_id: z.string().nullable(),
|
|
internal_reward_id: z.string().nullish(),
|
|
is_custom: z.boolean().default(false),
|
|
|
|
allowance_type: z.nativeEnum(AllowanceType).optional().nullable(),
|
|
allowance: z.number().nullish(),
|
|
interval: z.nativeEnum(EntInterval).optional().nullable(),
|
|
interval_count: z.number().default(1),
|
|
|
|
carry_from_previous: z.boolean().default(false).optional(),
|
|
entity_feature_id: z.string().nullish(),
|
|
|
|
// Part of create entitlement
|
|
org_id: z.string().optional(),
|
|
feature_id: z.string().optional(),
|
|
usage_limit: z.number().nullable().optional().default(null),
|
|
expiry_duration: z.nativeEnum(EntitlementDuration).nullish(),
|
|
expiry_length: z.number().nullish(),
|
|
|
|
rollover: RolloverConfigSchema.nullish(),
|
|
});
|
|
|
|
export const CreateEntitlementSchema = z.object({
|
|
id: z.string().nullish(),
|
|
internal_feature_id: z.string(),
|
|
feature_id: z.string(),
|
|
allowance_type: z.nativeEnum(AllowanceType).nullish(),
|
|
allowance: z.number().nullish(),
|
|
interval: z.nativeEnum(EntInterval).nullish(),
|
|
interval_count: z.number().nullish(),
|
|
carry_from_previous: z.boolean().default(false),
|
|
entity_feature_id: z.string().nullish(),
|
|
usage_limit: z.number().nullish().default(null),
|
|
rollover: RolloverConfigSchema.nullish(),
|
|
});
|
|
|
|
export type CreateEntitlement = z.infer<typeof CreateEntitlementSchema>;
|
|
|
|
export type Entitlement = z.infer<typeof EntitlementSchema>;
|
|
export type EntitlementExpiry = z.infer<typeof EntitlementExpirySchema>;
|
|
|
|
export const EntitlementWithFeatureSchema = EntitlementSchema.extend({
|
|
feature: FeatureSchema,
|
|
});
|
|
|
|
export type EntitlementWithFeature = z.infer<
|
|
typeof EntitlementWithFeatureSchema
|
|
>;
|
|
|
|
export type FullEntitlement = z.infer<typeof EntitlementWithFeatureSchema>;
|