From a2b1089e62c0c0a57f9c2d01f3a8ce1e648d5759 Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 15 Oct 2025 11:32:19 -0700 Subject: [PATCH] clean-up event/event-data endpoints. fix for expanded view for mobile --- .../[websiteId]/WebsiteExpandedView.tsx | 8 +++++++- .../[websiteId]/event-data/[eventId]/route.ts | 2 +- .../[websiteId]/event-data/events/route.ts | 2 ++ .../api/websites/[websiteId]/events/route.ts | 9 +++++---- .../hooks/queries/useWebsiteEventsQuery.ts | 12 +++++++++--- .../queries/useWebsiteEventsSeriesQuery.ts | 7 ++++--- src/queries/sql/events/getEventData.ts | 18 +++++++++++------- src/queries/sql/events/getEventDataEvents.ts | 10 ++++++++-- 8 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx index 3fc6a1de..05de798d 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx @@ -18,7 +18,13 @@ export function WebsiteExpandedView({ } = useNavigation(); return ( - + }, ) { const schema = z.object({ - ...dateRangeParams, + startAt: z.coerce.number().optional(), + endAt: z.coerce.number().optional(), ...filterParams, ...pagingParams, ...searchParams, diff --git a/src/components/hooks/queries/useWebsiteEventsQuery.ts b/src/components/hooks/queries/useWebsiteEventsQuery.ts index 51902d2f..9d89be52 100644 --- a/src/components/hooks/queries/useWebsiteEventsQuery.ts +++ b/src/components/hooks/queries/useWebsiteEventsQuery.ts @@ -15,14 +15,20 @@ export function useWebsiteEventsQuery( options?: ReactQueryOptions, ) { const { get } = useApi(); - const date = useDateParameters(); + const { startAt, endAt, unit, timezone } = useDateParameters(); const filters = useFilterParameters(); return usePagedQuery({ - queryKey: ['websites:events', { websiteId, ...date, ...filters, ...params }], + queryKey: [ + 'websites:events', + { websiteId, startAt, endAt, unit, timezone, ...filters, ...params }, + ], queryFn: pageParams => get(`/websites/${websiteId}/events`, { - ...date, + startAt, + endAt, + unit, + timezone, ...filters, ...pageParams, eventType: EVENT_TYPES[params.view], diff --git a/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts b/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts index 50861cee..5db85278 100644 --- a/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts +++ b/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts @@ -5,12 +5,13 @@ import { ReactQueryOptions } from '@/lib/types'; export function useWebsiteEventsSeriesQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); - const date = useDateParameters(); + const { startAt, endAt, unit, timezone } = useDateParameters(); const filters = useFilterParameters(); return useQuery({ - queryKey: ['websites:events:series', { websiteId, ...date, ...filters }], - queryFn: () => get(`/websites/${websiteId}/events/series`, { ...date, ...filters }), + queryKey: ['websites:events:series', { websiteId, startAt, endAt, unit, timezone, ...filters }], + queryFn: () => + get(`/websites/${websiteId}/events/series`, { startAt, endAt, unit, timezone, ...filters }), enabled: !!websiteId, ...options, }); diff --git a/src/queries/sql/events/getEventData.ts b/src/queries/sql/events/getEventData.ts index f8ba2eef..52cb5300 100644 --- a/src/queries/sql/events/getEventData.ts +++ b/src/queries/sql/events/getEventData.ts @@ -5,14 +5,16 @@ import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; const FUNCTION_NAME = 'getEventData'; -export async function getEventData(...args: [eventId: string]): Promise { +export async function getEventData( + ...args: [websiteId: string, eventId: string] +): Promise { return runQuery({ [PRISMA]: () => relationalQuery(...args), [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -async function relationalQuery(eventId: string) { +async function relationalQuery(websiteId: string, eventId: string) { const { rawQuery } = prisma; return rawQuery( @@ -29,14 +31,15 @@ async function relationalQuery(eventId: string) { data_type as dataType, created_at as createdAt from event_data - where event_id = {{eventId::uuid}} + website_id = {{websiteId::uuid}} + event_id = {{eventId::uuid}} `, - { eventId }, + { websiteId, eventId }, FUNCTION_NAME, ); } -async function clickhouseQuery(eventId: string): Promise { +async function clickhouseQuery(websiteId: string, eventId: string): Promise { const { rawQuery } = clickhouse; return rawQuery( @@ -53,9 +56,10 @@ async function clickhouseQuery(eventId: string): Promise { data_type as dataType, created_at as createdAt from event_data - where event_id = {eventId:UUID} + where website_id = {websiteId:UUID} + and event_id = {eventId:UUID} `, - { eventId }, + { websiteId, eventId }, FUNCTION_NAME, ); } diff --git a/src/queries/sql/events/getEventDataEvents.ts b/src/queries/sql/events/getEventDataEvents.ts index f7bea46c..c8c1e0a0 100644 --- a/src/queries/sql/events/getEventDataEvents.ts +++ b/src/queries/sql/events/getEventDataEvents.ts @@ -25,7 +25,10 @@ export async function getEventDataEvents( async function relationalQuery(websiteId: string, filters: QueryFilters) { const { rawQuery, parseFilters } = prisma; const { event } = filters; - const { queryParams } = parseFilters(filters); + const { queryParams } = parseFilters({ + ...filters, + websiteId, + }); if (event) { return rawQuery( @@ -75,7 +78,10 @@ async function clickhouseQuery( ): Promise<{ eventName: string; propertyName: string; dataType: number; total: number }[]> { const { rawQuery, parseFilters } = clickhouse; const { event } = filters; - const { queryParams } = parseFilters(filters); + const { queryParams } = parseFilters({ + ...filters, + websiteId, + }); if (event) { return rawQuery(