-
Notifications
You must be signed in to change notification settings - Fork 191
Expand file tree
/
Copy pathcusEntModels.ts
More file actions
68 lines (55 loc) · 2.19 KB
/
cusEntModels.ts
File metadata and controls
68 lines (55 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { z } from "zod/v4";
import { EntitlementWithFeatureSchema } from "../../productModels/entModels/entModels.js";
import { EntInterval } from "../../productModels/intervals/entitlementInterval.js";
import { ReplaceableSchema } from "./replaceableSchema.js";
import { RolloverSchema } from "./rolloverModels/rolloverTable.js";
export const CustomerEntitlementFiltersSchema = z.object({
cusEntIds: z.array(z.string()).optional(),
interval: z.enum(EntInterval).optional(),
externalId: z.string().optional(),
});
export const EntityBalanceSchema = z.object({
id: z.string(),
balance: z.number(),
adjustment: z.number(),
additional_balance: z.number().optional(),
});
export const CustomerEntitlementSchema = z.object({
// Foreign keys
id: z.string(),
internal_customer_id: z.string(),
internal_entity_id: z.string().nullable(),
internal_feature_id: z.string(),
customer_id: z.string().nullish(), // for debugging purposes
feature_id: z.string(), // for debugging purposes
customer_product_id: z.string().nullable(),
entitlement_id: z.string(),
created_at: z.number(),
// Balance fields
unlimited: z.boolean().nullish(),
balance: z.number().nullish().default(0),
additional_balance: z.number().default(0),
usage_allowed: z.boolean().nullable(),
next_reset_at: z.number().nullable(),
adjustment: z.number().nullish().default(0),
// Expiry for loose entitlements (entitlements without reset intervals)
expires_at: z.number().nullable(),
cache_version: z.number().optional().default(0),
// External ID for API consumers to reference this balance
external_id: z.string().nullish(),
// Group by fields
entities: z.record(z.string(), EntityBalanceSchema).nullish(),
});
export const FullCustomerEntitlementSchema = CustomerEntitlementSchema.extend({
entitlement: EntitlementWithFeatureSchema,
replaceables: z.array(ReplaceableSchema),
rollovers: z.array(RolloverSchema),
});
export type CustomerEntitlementFilters = z.infer<
typeof CustomerEntitlementFiltersSchema
>;
export type EntityBalance = z.infer<typeof EntityBalanceSchema>;
export type CustomerEntitlement = z.infer<typeof CustomerEntitlementSchema>;
export type FullCustomerEntitlement = z.infer<
typeof FullCustomerEntitlementSchema
>;