import { EventModel } from "@schema/metrics/EventSchema"; import { getTimeline } from "./generic"; import { Redis, TIMELINE_EXPIRE_TIME } from "~/server/services/CacheService"; import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA"; import { executeTimelineAggregation, fillAndMergeTimelineAggregation, fillAndMergeTimelineAggregationV2 } from "~/server/services/TimelineService"; export default defineEventHandler(async event => { const project_id = getRequestProjectId(event); if (!project_id) return; const user = getRequestUser(event); const project = await getUserProjectFromId(project_id, user); if (!project) return; const { slice, from, to } = await readBody(event); if (!from) return setResponseStatus(event, 400, 'from is required'); if (!to) return setResponseStatus(event, 400, 'to is required'); if (!slice) return setResponseStatus(event, 400, 'slice is required'); return await Redis.useCache({ key: `timeline:events:${project_id}:${slice}:${from || 'none'}:${to || 'none'}`, exp: TIMELINE_EXPIRE_TIME }, async () => { const timelineData = await executeTimelineAggregation({ projectId: project._id, model: EventModel, from, to, slice }); const timelineFilledMerged = fillAndMergeTimelineAggregationV2(timelineData, slice, from, to); return timelineFilledMerged; }); });