mirror of
https://github.com/umami-software/umami.git
synced 2026-02-04 04:37:11 +01:00
Refactor goal query filters to separate eventType handling for total and goal-specific counts
This commit is contained in:
parent
d460e313d8
commit
fbac74a4b6
1 changed files with 45 additions and 6 deletions
|
|
@ -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]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue