Refactor goal query filters to separate eventType handling for total and goal-specific counts

This commit is contained in:
mod08 2026-01-09 10:22:31 +01:00
parent d460e313d8
commit fbac74a4b6

View file

@ -29,15 +29,35 @@ async function relationalQuery(
) {
const { startDate, endDate, type, value } = parameters;
const { rawQuery, parseFilters } = prisma;
const eventType = type === 'path' ? EVENT_TYPE.pageView : EVENT_TYPE.customEvent;
const column = type === 'path' ? 'url_path' : 'event_name';
const { filterQuery, dateQuery, joinSessionQuery, cohortQuery, queryParams } = parseFilters({
// Filters WITHOUT eventType for total count (all sessions)
const {
filterQuery: baseFilterQuery,
dateQuery,
joinSessionQuery,
cohortQuery,
queryParams: baseQueryParams,
} = parseFilters({
...filters,
websiteId,
startDate,
endDate,
});
// Filters WITH eventType for goal-specific count
const { filterQuery: goalFilterQuery, queryParams: goalQueryParams } = parseFilters({
...filters,
websiteId,
value,
startDate,
endDate,
eventType,
});
const queryParams = { ...baseQueryParams, ...goalQueryParams };
return rawQuery(
`
select count(distinct website_event.session_id) as num,
@ -48,7 +68,7 @@ async function relationalQuery(
${joinSessionQuery}
where website_event.website_id = {{websiteId::uuid}}
${dateQuery}
${filterQuery}
${baseFilterQuery}
) as total
from website_event
${cohortQuery}
@ -56,7 +76,7 @@ async function relationalQuery(
where website_event.website_id = {{websiteId::uuid}}
and ${column} = {{value}}
${dateQuery}
${filterQuery}
${goalFilterQuery}
`,
queryParams,
).then(results => results?.[0]);
@ -69,15 +89,34 @@ async function clickhouseQuery(
) {
const { startDate, endDate, type, value } = parameters;
const { rawQuery, parseFilters } = clickhouse;
const eventType = type === 'path' ? EVENT_TYPE.pageView : EVENT_TYPE.customEvent;
const column = type === 'path' ? 'url_path' : 'event_name';
const { filterQuery, dateQuery, cohortQuery, queryParams } = parseFilters({
// Filters WITHOUT eventType for total count (all sessions)
const {
filterQuery: baseFilterQuery,
dateQuery,
cohortQuery,
queryParams: baseQueryParams,
} = parseFilters({
...filters,
websiteId,
startDate,
endDate,
});
// Filters WITH eventType for goal-specific count
const { filterQuery: goalFilterQuery, queryParams: goalQueryParams } = parseFilters({
...filters,
websiteId,
value,
startDate,
endDate,
eventType,
});
const queryParams = { ...baseQueryParams, ...goalQueryParams };
return rawQuery(
`
select count(distinct session_id) as num,
@ -87,14 +126,14 @@ async function clickhouseQuery(
${cohortQuery}
where website_id = {websiteId:UUID}
${dateQuery}
${filterQuery}
${baseFilterQuery}
) as total
from website_event
${cohortQuery}
where website_id = {websiteId:UUID}
and ${column} = {value:String}
${dateQuery}
${filterQuery}
${goalFilterQuery}
`,
queryParams,
).then(results => results?.[0]);