Files
cfw-autumn/shared/api/events/aggregate/eventsAggregateResponseV1.ts
John Yeo 90287e6308 latest
2026-02-19 13:24:33 +00:00

107 lines
2.1 KiB
TypeScript

import { z } from "zod/v4";
export const EVENTS_AGGREGATE_EXAMPLE_V1_FLAT = {
list: [
{
period: 1762905600000,
values: {
messages: 10,
sessions: 3,
},
},
{
period: 1762992000000,
values: {
messages: 3,
sessions: 12,
},
},
],
total: {
messages: {
count: 2,
sum: 13,
},
sessions: {
count: 2,
sum: 15,
},
},
};
export const EVENTS_AGGREGATE_EXAMPLE_V1_GROUPED = {
list: [
{
period: 1762905600000,
values: {
messages: 10,
sessions: 3,
},
grouped_values: {
messages: { api: 5, web: 5 },
sessions: { api: 2, web: 1 },
},
},
{
period: 1762992000000,
values: {
messages: 3,
sessions: 12,
},
grouped_values: {
messages: { api: 1, web: 2 },
sessions: { api: 10, web: 2 },
},
},
],
total: {
messages: {
count: 2,
sum: 13,
},
sessions: {
count: 2,
sum: 15,
},
},
};
const EventAggregateListItemV1Schema = z.object({
period: z.number().meta({
description: "Unix timestamp (epoch ms) for this time period",
}),
values: z.record(z.string(), z.number()).meta({
description: "Aggregated values per feature: { [featureId]: number }",
}),
grouped_values: z
.record(z.string(), z.record(z.string(), z.number()))
.optional()
.meta({
description:
"Values broken down by group (only present when group_by is used): { [featureId]: { [groupValue]: number } }",
}),
});
const EventAggregateTotalItemSchema = z.object({
count: z.number().meta({ description: "Number of events for this feature" }),
sum: z.number().meta({ description: "Sum of event values for this feature" }),
});
export const EventsAggregateResponseV1Schema = z.object({
list: z.array(EventAggregateListItemV1Schema).meta({
description: "Array of time periods with aggregated values",
}),
total: z.record(z.string(), EventAggregateTotalItemSchema).meta({
description:
"Total aggregations per feature. Keys are feature IDs, values contain count and sum.",
}),
});
export type EventsAggregateResponseV1 = z.infer<
typeof EventsAggregateResponseV1Schema
>;
export type EventAggregateListItemV1 = z.infer<
typeof EventAggregateListItemV1Schema
>;