From 1809959b99959c1e0facbdc7f45959ea9764cafb Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 1 Oct 2025 12:29:31 -0700 Subject: [PATCH] fix event type queries for pixels/links. remove hardcoded event types --- src/app/(main)/pixels/[pixelId]/page.tsx | 4 ++-- .../websites/[websiteId]/metrics/expanded/route.ts | 11 +++-------- src/app/api/websites/[websiteId]/metrics/route.ts | 13 ++++--------- src/lib/date.ts | 7 +------ src/queries/sql/events/getEventExpandedMetrics.ts | 1 + src/queries/sql/getChannelExpandedMetrics.ts | 7 +++---- src/queries/sql/getChannelMetrics.ts | 7 +++---- src/queries/sql/getWebsiteStats.ts | 8 ++++---- .../sql/pageviews/getPageviewExpandedMetrics.ts | 6 ++++-- src/queries/sql/pageviews/getPageviewMetrics.ts | 7 +++++-- src/queries/sql/pageviews/getPageviewStats.ts | 7 ++++--- .../sql/sessions/getSessionExpandedMetrics.ts | 6 +++--- src/queries/sql/sessions/getSessionMetrics.ts | 2 +- src/queries/sql/sessions/getSessionStats.ts | 7 ++++--- 14 files changed, 42 insertions(+), 51 deletions(-) diff --git a/src/app/(main)/pixels/[pixelId]/page.tsx b/src/app/(main)/pixels/[pixelId]/page.tsx index 04800cae..85456d29 100644 --- a/src/app/(main)/pixels/[pixelId]/page.tsx +++ b/src/app/(main)/pixels/[pixelId]/page.tsx @@ -1,8 +1,8 @@ import { PixelPage } from './PixelPage'; import { Metadata } from 'next'; -export default function ({ params }: { params: { pixelId: string } }) { - const { pixelId } = params; +export default async function ({ params }: { params: { pixelId: string } }) { + const { pixelId } = await params; return ; } diff --git a/src/app/api/websites/[websiteId]/metrics/expanded/route.ts b/src/app/api/websites/[websiteId]/metrics/expanded/route.ts index c68acfe5..703cf5ee 100644 --- a/src/app/api/websites/[websiteId]/metrics/expanded/route.ts +++ b/src/app/api/websites/[websiteId]/metrics/expanded/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { EVENT_COLUMNS, EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; +import { EVENT_COLUMNS, EVENT_TYPE, SESSION_COLUMNS } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; import { dateRangeParams, filterParams, searchParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; import { getChannelExpandedMetrics, getEventExpandedMetrics, @@ -50,13 +50,8 @@ export async function GET( } if (EVENT_COLUMNS.includes(type)) { - const column = FILTER_COLUMNS[type] || type; - - if (column === 'event_name') { - filters.eventType = EVENT_TYPE.customEvent; - } - if (type === 'event') { + filters.eventType = EVENT_TYPE.customEvent; return json(await getEventExpandedMetrics(websiteId, { type, limit, offset }, filters)); } else { return json(await getPageviewExpandedMetrics(websiteId, { type, limit, offset }, filters)); diff --git a/src/app/api/websites/[websiteId]/metrics/route.ts b/src/app/api/websites/[websiteId]/metrics/route.ts index 461b5359..3bfeaa6a 100644 --- a/src/app/api/websites/[websiteId]/metrics/route.ts +++ b/src/app/api/websites/[websiteId]/metrics/route.ts @@ -1,7 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { EVENT_COLUMNS, EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; +import { EVENT_COLUMNS, EVENT_TYPE, SESSION_COLUMNS } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; +import { dateRangeParams, filterParams, searchParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; import { getChannelMetrics, getEventMetrics, @@ -9,7 +10,6 @@ import { getSessionMetrics, } from '@/queries/sql'; import { z } from 'zod'; -import { dateRangeParams, filterParams, searchParams } from '@/lib/schema'; export async function GET( request: Request, @@ -50,13 +50,8 @@ export async function GET( } if (EVENT_COLUMNS.includes(type)) { - const column = FILTER_COLUMNS[type] || type; - - if (column === 'event_name') { - filters.eventType = EVENT_TYPE.customEvent; - } - if (type === 'event') { + filters.eventType = EVENT_TYPE.customEvent; return json(await getEventMetrics(websiteId, { type, limit, offset }, filters)); } else { return json(await getPageviewMetrics(websiteId, { type, limit, offset }, filters)); diff --git a/src/lib/date.ts b/src/lib/date.ts index 02931834..6a967477 100644 --- a/src/lib/date.ts +++ b/src/lib/date.ts @@ -157,12 +157,7 @@ export function parseDateRange(value: string, locale = 'en-US'): DateRange { const now = new Date(); const dateLocale = getDateLocale(locale); - const { unit } = parseDateValue(value); - let { num = 1 } = parseDateValue(value); - - if (value === '7day') { - num--; - } + const { num = 1, unit } = parseDateValue(value); switch (unit) { case 'hour': diff --git a/src/queries/sql/events/getEventExpandedMetrics.ts b/src/queries/sql/events/getEventExpandedMetrics.ts index 96a452fa..6be99b40 100644 --- a/src/queries/sql/events/getEventExpandedMetrics.ts +++ b/src/queries/sql/events/getEventExpandedMetrics.ts @@ -75,6 +75,7 @@ async function clickhouseQuery( const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, + eventType: EVENT_TYPE.customEvent, }); return rawQuery( diff --git a/src/queries/sql/getChannelExpandedMetrics.ts b/src/queries/sql/getChannelExpandedMetrics.ts index af67c93c..571c9d9d 100644 --- a/src/queries/sql/getChannelExpandedMetrics.ts +++ b/src/queries/sql/getChannelExpandedMetrics.ts @@ -1,7 +1,6 @@ import clickhouse from '@/lib/clickhouse'; import { EMAIL_DOMAINS, - EVENT_TYPE, PAID_AD_PARAMS, SEARCH_DOMAINS, SHOPPING_DOMAINS, @@ -45,7 +44,6 @@ async function relationalQuery( const { queryParams, filterQuery, joinSessionQuery, cohortQuery, dateQuery } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); return rawQuery( @@ -68,7 +66,8 @@ async function relationalQuery( from website_event ${cohortQuery} ${joinSessionQuery} - where website_id = {{websiteId::uuid}} + where website_event.website_id = {{websiteId::uuid}} + and website_event.event_type != 2 ${dateQuery} ${filterQuery} group by 1, 2 @@ -93,7 +92,6 @@ async function clickhouseQuery( const { queryParams, filterQuery, cohortQuery } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); return rawQuery( @@ -140,6 +138,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 and name != '' ${filterQuery} group by prefix, name, session_id, visit_id diff --git a/src/queries/sql/getChannelMetrics.ts b/src/queries/sql/getChannelMetrics.ts index 05ddda3d..5fc9187e 100644 --- a/src/queries/sql/getChannelMetrics.ts +++ b/src/queries/sql/getChannelMetrics.ts @@ -1,7 +1,6 @@ import clickhouse from '@/lib/clickhouse'; import { EMAIL_DOMAINS, - EVENT_TYPE, PAID_AD_PARAMS, SEARCH_DOMAINS, SHOPPING_DOMAINS, @@ -26,7 +25,6 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { const { queryParams, filterQuery, joinSessionQuery, cohortQuery, dateQuery } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); return rawQuery( @@ -49,7 +47,8 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { from website_event ${cohortQuery} ${joinSessionQuery} - where website_id = {{websiteId::uuid}} + where website_event.website_id = {{websiteId::uuid}} + and website_event.event_type != 2 ${dateQuery} ${filterQuery} group by 1, 2 @@ -74,7 +73,6 @@ async function clickhouseQuery( const { queryParams, filterQuery, cohortQuery, dateQuery } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); const sql = ` @@ -108,6 +106,7 @@ async function clickhouseQuery( from website_event ${cohortQuery} where website_id = {websiteId:UUID} + and event_type != 2 ${dateQuery} ${filterQuery} group by 1, 2 diff --git a/src/queries/sql/getWebsiteStats.ts b/src/queries/sql/getWebsiteStats.ts index 79fb8bbe..9551cd8f 100644 --- a/src/queries/sql/getWebsiteStats.ts +++ b/src/queries/sql/getWebsiteStats.ts @@ -1,9 +1,8 @@ import clickhouse from '@/lib/clickhouse'; -import { EVENT_TYPE } from '@/lib/constants'; +import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; import { QueryFilters } from '@/lib/types'; -import { EVENT_COLUMNS } from '@/lib/constants'; export interface WebsiteStatsData { pageviews: number; @@ -30,7 +29,6 @@ async function relationalQuery( const { filterQuery, joinSessionQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); return rawQuery( @@ -53,6 +51,7 @@ async function relationalQuery( ${joinSessionQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} + and website_event.event_type != 2 ${filterQuery} group by 1, 2 ) as t @@ -69,7 +68,6 @@ async function clickhouseQuery( const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); let sql = ''; @@ -93,6 +91,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${filterQuery} group by session_id, visit_id ) as t; @@ -115,6 +114,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${filterQuery} group by session_id, visit_id ) as t; diff --git a/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts b/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts index cef79096..a718c411 100644 --- a/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts +++ b/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts @@ -64,7 +64,7 @@ async function relationalQuery( from website_event where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} - and event_type = {{eventType}} + and website_event.event_type != 2 group by visit_id ) x on x.visit_id = website_event.visit_id @@ -82,6 +82,7 @@ async function relationalQuery( ${entryExitQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} + and website_event.event_type != 2 ${excludeDomain} ${filterQuery} group by 1 @@ -127,7 +128,7 @@ async function clickhouseQuery( from website_event where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} - and event_type = {eventType:UInt32} + and event_type != 2 group by visit_id) x ON x.visit_id = website_event.visit_id`; } @@ -154,6 +155,7 @@ async function clickhouseQuery( ${entryExitQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 and name != '' ${excludeDomain} ${filterQuery} diff --git a/src/queries/sql/pageviews/getPageviewMetrics.ts b/src/queries/sql/pageviews/getPageviewMetrics.ts index 71ce13b3..0a92e6af 100644 --- a/src/queries/sql/pageviews/getPageviewMetrics.ts +++ b/src/queries/sql/pageviews/getPageviewMetrics.ts @@ -62,7 +62,7 @@ async function relationalQuery( from website_event where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} - and event_type = {{eventType}} + and website_event.event_type != 2 order by visit_id, created_at ${order} ) x on x.visit_id = website_event.visit_id @@ -79,6 +79,7 @@ async function relationalQuery( ${entryExitQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} + and website_event.event_type != 2 ${excludeDomain} ${filterQuery} group by 1 @@ -124,7 +125,7 @@ async function clickhouseQuery( from website_event where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} - and event_type = {eventType:UInt32} + and event_type != 2 group by visit_id) x ON x.visit_id = website_event.visit_id`; } @@ -137,6 +138,7 @@ async function clickhouseQuery( ${entryExitQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${excludeDomain} ${filterQuery} group by x @@ -174,6 +176,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${excludeDomain} ${filterQuery} ${groupByQuery}) as g diff --git a/src/queries/sql/pageviews/getPageviewStats.ts b/src/queries/sql/pageviews/getPageviewStats.ts index a8ee4734..1e7f9d61 100644 --- a/src/queries/sql/pageviews/getPageviewStats.ts +++ b/src/queries/sql/pageviews/getPageviewStats.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; +import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { EVENT_COLUMNS, EVENT_TYPE } from '@/lib/constants'; import { QueryFilters } from '@/lib/types'; export async function getPageviewStats(...args: [websiteId: string, filters: QueryFilters]) { @@ -17,7 +17,6 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { const { filterQuery, cohortQuery, joinSessionQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); return rawQuery( @@ -30,6 +29,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { ${joinSessionQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} + and website_event.event_type != 2 ${filterQuery} group by 1 order by 1 @@ -47,7 +47,6 @@ async function clickhouseQuery( const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); let sql = ''; @@ -65,6 +64,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${filterQuery} group by t ) as g @@ -83,6 +83,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${filterQuery} group by t ) as g diff --git a/src/queries/sql/sessions/getSessionExpandedMetrics.ts b/src/queries/sql/sessions/getSessionExpandedMetrics.ts index 56dba66e..b4ba5b67 100644 --- a/src/queries/sql/sessions/getSessionExpandedMetrics.ts +++ b/src/queries/sql/sessions/getSessionExpandedMetrics.ts @@ -1,5 +1,5 @@ import clickhouse from '@/lib/clickhouse'; -import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; +import { FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; import { QueryFilters } from '@/lib/types'; @@ -40,7 +40,6 @@ async function relationalQuery( { ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }, { joinSession: SESSION_COLUMNS.includes(type), @@ -63,6 +62,7 @@ async function relationalQuery( ${joinSessionQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} + and website_event.event_type != 2 ${filterQuery} group by 1 ${includeCountry ? ', 3' : ''} @@ -85,7 +85,6 @@ async function clickhouseQuery( const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); const includeCountry = column === 'city' || column === 'region'; @@ -116,6 +115,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 and name != '' ${filterQuery} group by name, session_id, visit_id diff --git a/src/queries/sql/sessions/getSessionMetrics.ts b/src/queries/sql/sessions/getSessionMetrics.ts index f4e6a22f..7133332b 100644 --- a/src/queries/sql/sessions/getSessionMetrics.ts +++ b/src/queries/sql/sessions/getSessionMetrics.ts @@ -55,7 +55,7 @@ async function relationalQuery( ${joinSessionQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} - and event_type != 2 + and website_event.event_type != 2 ${filterQuery} group by 1 ${includeCountry ? ', 3' : ''} diff --git a/src/queries/sql/sessions/getSessionStats.ts b/src/queries/sql/sessions/getSessionStats.ts index 62ef4480..b1c9891e 100644 --- a/src/queries/sql/sessions/getSessionStats.ts +++ b/src/queries/sql/sessions/getSessionStats.ts @@ -1,5 +1,5 @@ import clickhouse from '@/lib/clickhouse'; -import { EVENT_COLUMNS, EVENT_TYPE } from '@/lib/constants'; +import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; import { QueryFilters } from '@/lib/types'; @@ -17,7 +17,6 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { const { filterQuery, joinSessionQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); return rawQuery( @@ -30,6 +29,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { ${joinSessionQuery} where website_event.website_id = {{websiteId::uuid}} and website_event.created_at between {{startDate}} and {{endDate}} + and website_event.event_type != 2 ${filterQuery} group by 1 order by 1 @@ -47,7 +47,6 @@ async function clickhouseQuery( const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId, - eventType: EVENT_TYPE.pageView, }); let sql = ''; @@ -65,6 +64,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${filterQuery} group by t ) as g @@ -83,6 +83,7 @@ async function clickhouseQuery( ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type != 2 ${filterQuery} group by t ) as g