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