mirror of
https://github.com/umami-software/umami.git
synced 2026-02-05 13:17:19 +01:00
Refactor filter handling for queries.
This commit is contained in:
parent
5b300f1ff5
commit
ee6c68d27c
107 changed files with 731 additions and 835 deletions
|
|
@ -244,7 +244,7 @@ async function clickhouseQuery(
|
|||
const { rawQuery, parseFilters } = clickhouse;
|
||||
const eventType = type === 'page' ? EVENT_TYPE.pageView : EVENT_TYPE.customEvent;
|
||||
const column = type === 'page' ? 'url_path' : 'event_name';
|
||||
const { filterQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, queryParams } = await parseFilters(criteria);
|
||||
|
||||
function getUTMQuery(utmColumn: string) {
|
||||
return `
|
||||
|
|
@ -345,7 +345,7 @@ async function clickhouseQuery(
|
|||
order by 2 desc
|
||||
limit 20
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const paidAdsres = await rawQuery<
|
||||
|
|
@ -376,7 +376,7 @@ async function clickhouseQuery(
|
|||
order by 2 desc
|
||||
limit 20
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const sourceRes = await rawQuery<
|
||||
|
|
@ -390,7 +390,7 @@ async function clickhouseQuery(
|
|||
${getModelQuery(model)}
|
||||
${getUTMQuery('utm_source')}
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const mediumRes = await rawQuery<
|
||||
|
|
@ -404,7 +404,7 @@ async function clickhouseQuery(
|
|||
${getModelQuery(model)}
|
||||
${getUTMQuery('utm_medium')}
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const campaignRes = await rawQuery<
|
||||
|
|
@ -418,7 +418,7 @@ async function clickhouseQuery(
|
|||
${getModelQuery(model)}
|
||||
${getUTMQuery('utm_campaign')}
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const contentRes = await rawQuery<
|
||||
|
|
@ -432,7 +432,7 @@ async function clickhouseQuery(
|
|||
${getModelQuery(model)}
|
||||
${getUTMQuery('utm_content')}
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const termRes = await rawQuery<
|
||||
|
|
@ -446,7 +446,7 @@ async function clickhouseQuery(
|
|||
${getModelQuery(model)}
|
||||
${getUTMQuery('utm_term')}
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
);
|
||||
|
||||
const totalRes = await rawQuery<{ pageviews: number; visitors: number; visits: number }>(
|
||||
|
|
@ -462,7 +462,7 @@ async function clickhouseQuery(
|
|||
and event_type = {eventType:UInt32}
|
||||
${filterQuery}
|
||||
`,
|
||||
{ ...filterParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
{ ...queryParams, websiteId, startDate, endDate, conversionStep: step, eventType, currency },
|
||||
).then(result => result?.[0]);
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -24,8 +24,7 @@ async function relationalQuery(
|
|||
}[]
|
||||
> {
|
||||
const { getTimestampDiffSQL, parseFilters, rawQuery } = prisma;
|
||||
const { filterQuery, joinSession, filterParams } = await parseFilters(
|
||||
websiteId,
|
||||
const { filterQuery, joinSessionQuery, queryParams } = await parseFilters(
|
||||
{
|
||||
...filters,
|
||||
eventType: EVENT_TYPE.pageView,
|
||||
|
|
@ -53,7 +52,7 @@ async function relationalQuery(
|
|||
min(website_event.created_at) as "min_time",
|
||||
max(website_event.created_at) as "max_time"
|
||||
from website_event
|
||||
${joinSession}
|
||||
${joinSessionQuery}
|
||||
where website_event.website_id = {{websiteId::uuid}}
|
||||
and website_event.created_at between {{startDate}} and {{endDate}}
|
||||
and event_type = {{eventType}}
|
||||
|
|
@ -65,7 +64,7 @@ async function relationalQuery(
|
|||
order by 1 desc, 2 desc
|
||||
limit 500
|
||||
`,
|
||||
filterParams,
|
||||
queryParams,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -80,7 +79,7 @@ async function clickhouseQuery(
|
|||
}[]
|
||||
> {
|
||||
const { parseFilters, rawQuery } = clickhouse;
|
||||
const { filterQuery, filterParams } = await parseFilters(websiteId, {
|
||||
const { filterQuery, queryParams } = await parseFilters({
|
||||
...filters,
|
||||
eventType: EVENT_TYPE.pageView,
|
||||
});
|
||||
|
|
@ -114,7 +113,7 @@ async function clickhouseQuery(
|
|||
order by 1 desc, 2 desc
|
||||
limit 500
|
||||
`,
|
||||
filterParams,
|
||||
queryParams,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ async function clickhouseQuery(
|
|||
steps,
|
||||
windowMinutes,
|
||||
);
|
||||
const { filterQuery, filterParams: filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, queryParams } = await parseFilters(criteria);
|
||||
|
||||
function getFunnelQuery(
|
||||
steps: { type: string; value: string }[],
|
||||
|
|
@ -136,7 +136,7 @@ async function clickhouseQuery(
|
|||
levelQuery: string;
|
||||
sumQuery: string;
|
||||
stepFilterQuery: string;
|
||||
params: { [key: string]: string };
|
||||
params: Record<string, string>;
|
||||
} {
|
||||
return steps.reduce(
|
||||
(pv, cv, i) => {
|
||||
|
|
@ -215,7 +215,7 @@ async function clickhouseQuery(
|
|||
startDate,
|
||||
endDate,
|
||||
...params,
|
||||
...filterParams,
|
||||
...queryParams,
|
||||
},
|
||||
).then(formatResults(steps));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import clickhouse from '@/lib/clickhouse';
|
||||
import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db';
|
||||
import prisma from '@/lib/prisma';
|
||||
import { QueryFilters } from '@/lib/types';
|
||||
|
||||
export interface GoalCriteria {
|
||||
startDate: Date;
|
||||
|
|
@ -9,6 +10,7 @@ export interface GoalCriteria {
|
|||
value: string;
|
||||
operator?: string;
|
||||
property?: string;
|
||||
filters: QueryFilters;
|
||||
}
|
||||
|
||||
export async function getGoal(...args: [websiteId: string, criteria: GoalCriteria]) {
|
||||
|
|
@ -19,9 +21,13 @@ export async function getGoal(...args: [websiteId: string, criteria: GoalCriteri
|
|||
}
|
||||
|
||||
async function relationalQuery(websiteId: string, criteria: GoalCriteria) {
|
||||
const { type, value } = criteria;
|
||||
const { type, value, filters } = criteria;
|
||||
const { rawQuery, parseFilters } = prisma;
|
||||
const { filterQuery, dateQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, dateQuery, queryParams } = await parseFilters({
|
||||
...filters,
|
||||
websiteId,
|
||||
value,
|
||||
});
|
||||
const isPage = type === 'page';
|
||||
const column = isPage ? 'url_path' : 'event_name';
|
||||
const eventType = isPage ? 1 : 2;
|
||||
|
|
@ -43,14 +49,18 @@ async function relationalQuery(websiteId: string, criteria: GoalCriteria) {
|
|||
${dateQuery}
|
||||
${filterQuery}
|
||||
`,
|
||||
{ ...filterParams, value },
|
||||
queryParams,
|
||||
);
|
||||
}
|
||||
|
||||
async function clickhouseQuery(websiteId: string, criteria: GoalCriteria) {
|
||||
const { type, value } = criteria;
|
||||
const { type, value, filters } = criteria;
|
||||
const { rawQuery, parseFilters } = clickhouse;
|
||||
const { filterQuery, dateQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, dateQuery, queryParams } = await parseFilters({
|
||||
...filters,
|
||||
websiteId,
|
||||
value,
|
||||
});
|
||||
const isPage = type === 'page';
|
||||
const column = isPage ? 'url_path' : 'event_name';
|
||||
const eventType = isPage ? 1 : 2;
|
||||
|
|
@ -71,6 +81,6 @@ async function clickhouseQuery(websiteId: string, criteria: GoalCriteria) {
|
|||
${dateQuery}
|
||||
${filterQuery}
|
||||
`,
|
||||
{ ...filterParams, value },
|
||||
queryParams,
|
||||
).then(results => results?.[0]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ async function relationalQuery(
|
|||
sequenceQuery: string;
|
||||
startStepQuery: string;
|
||||
endStepQuery: string;
|
||||
params: { [key: string]: string };
|
||||
params: Record<string, string>;
|
||||
} {
|
||||
const params = {};
|
||||
let sequenceQuery = '';
|
||||
|
|
@ -108,7 +108,7 @@ async function relationalQuery(
|
|||
sequenceQuery,
|
||||
startStepQuery,
|
||||
endStepQuery,
|
||||
filterParams: params,
|
||||
params,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ async function clickhouseQuery(
|
|||
sequenceQuery: string;
|
||||
startStepQuery: string;
|
||||
endStepQuery: string;
|
||||
params: { [key: string]: string };
|
||||
params: Record<string, string>;
|
||||
} {
|
||||
const params = {};
|
||||
let sequenceQuery = '';
|
||||
|
|
@ -218,11 +218,11 @@ async function clickhouseQuery(
|
|||
sequenceQuery,
|
||||
startStepQuery,
|
||||
endStepQuery,
|
||||
filterParams: params,
|
||||
params,
|
||||
};
|
||||
}
|
||||
|
||||
const { filterQuery, filterParams: filterParams } = await parseFilters(websiteId, filters);
|
||||
const { filterQuery, queryParams } = await parseFilters(filters);
|
||||
|
||||
return rawQuery(
|
||||
`
|
||||
|
|
@ -249,7 +249,7 @@ async function clickhouseQuery(
|
|||
startDate,
|
||||
endDate,
|
||||
...params,
|
||||
...filterParams,
|
||||
...queryParams,
|
||||
},
|
||||
).then(parseResult);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ async function relationalQuery(
|
|||
const { getDateSQL, getDayDiffQuery, getCastColumnQuery, rawQuery, parseFilters } = prisma;
|
||||
const unit = 'day';
|
||||
|
||||
const { filterQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, queryParams } = await parseFilters(criteria);
|
||||
|
||||
return rawQuery(
|
||||
`
|
||||
|
|
@ -85,7 +85,7 @@ async function relationalQuery(
|
|||
websiteId,
|
||||
startDate,
|
||||
endDate,
|
||||
...filterParams,
|
||||
...queryParams,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ async function clickhouseQuery(
|
|||
const { getDateSQL, rawQuery, parseFilters } = clickhouse;
|
||||
const unit = 'day';
|
||||
|
||||
const { filterQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, queryParams } = await parseFilters(criteria);
|
||||
|
||||
return rawQuery(
|
||||
`
|
||||
|
|
@ -154,7 +154,7 @@ async function clickhouseQuery(
|
|||
websiteId,
|
||||
startDate,
|
||||
endDate,
|
||||
...filterParams,
|
||||
...queryParams,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export async function getUTM(...args: [websiteId: string, criteria: UTMCriteria]
|
|||
async function relationalQuery(websiteId: string, criteria: UTMCriteria) {
|
||||
const { startDate, endDate } = criteria;
|
||||
const { rawQuery, parseFilters } = prisma;
|
||||
const { filterQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, queryParams } = await parseFilters(criteria);
|
||||
|
||||
return rawQuery(
|
||||
`
|
||||
|
|
@ -31,7 +31,7 @@ async function relationalQuery(websiteId: string, criteria: UTMCriteria) {
|
|||
group by 1
|
||||
`,
|
||||
{
|
||||
...filterParams,
|
||||
...queryParams,
|
||||
websiteId,
|
||||
startDate,
|
||||
endDate,
|
||||
|
|
@ -42,7 +42,7 @@ async function relationalQuery(websiteId: string, criteria: UTMCriteria) {
|
|||
async function clickhouseQuery(websiteId: string, criteria: UTMCriteria) {
|
||||
const { startDate, endDate } = criteria;
|
||||
const { rawQuery, parseFilters } = clickhouse;
|
||||
const { filterQuery, filterParams } = await parseFilters(websiteId, criteria);
|
||||
const { filterQuery, queryParams } = await parseFilters(criteria);
|
||||
|
||||
return rawQuery(
|
||||
`
|
||||
|
|
@ -56,7 +56,7 @@ async function clickhouseQuery(websiteId: string, criteria: UTMCriteria) {
|
|||
group by 1
|
||||
`,
|
||||
{
|
||||
...filterParams,
|
||||
...queryParams,
|
||||
websiteId,
|
||||
startDate,
|
||||
endDate,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue