implement filtering and cohorts to all relevant queries

This commit is contained in:
Francis Cao 2025-08-19 15:26:41 -07:00
parent 789b8b36d8
commit 2f1f704728
34 changed files with 311 additions and 167 deletions

View file

@ -17,7 +17,7 @@ async function relationalQuery(
filters: QueryFilters & { propertyName?: string },
) {
const { rawQuery, parseFilters } = prisma;
const { filterQuery, cohortQuery, queryParams } = parseFilters(
const { filterQuery, joinSessionQuery, cohortQuery, queryParams } = parseFilters(
{ ...filters, websiteId },
{
columns: { propertyName: 'data_key' },
@ -30,7 +30,8 @@ async function relationalQuery(
data_key as "propertyName",
count(distinct session_data.session_id) as "total"
from website_event
${cohortQuery}
${cohortQuery}
${joinSessionQuery}
join session_data
on session_data.session_id = website_event.session_id
where website_event.website_id = {{websiteId::uuid}}

View file

@ -17,7 +17,10 @@ async function relationalQuery(
filters: QueryFilters & { propertyName?: string },
) {
const { rawQuery, parseFilters, getDateSQL } = prisma;
const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId });
const { filterQuery, joinSessionQuery, cohortQuery, queryParams } = parseFilters({
...filters,
websiteId,
});
return rawQuery(
`
@ -30,6 +33,7 @@ async function relationalQuery(
count(distinct session_data.session_id) as "total"
from website_event
${cohortQuery}
${joinSessionQuery}
join session_data
on session_data.session_id = website_event.session_id
where website_event.website_id = {{websiteId::uuid}}

View file

@ -63,7 +63,6 @@ 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 = {{eventType}}
${filterQuery}
group by 1
${includeCountry ? ', 3' : ''}

View file

@ -54,7 +54,6 @@ 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 = {{eventType}}
${filterQuery}
group by 1
${includeCountry ? ', 3' : ''}

View file

@ -26,11 +26,10 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
${getDateSQL('website_event.created_at', unit, timezone)} x,
count(distinct website_event.session_id) y
from website_event
${joinSessionQuery}
${cohortQuery}
${cohortQuery}
${joinSessionQuery}
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
and event_type = {{eventType}}
${filterQuery}
group by 1
order by 1

View file

@ -26,7 +26,10 @@ async function relationalQuery(
filters: QueryFilters,
): Promise<WebsiteSessionStatsData[]> {
const { parseFilters, rawQuery } = prisma;
const { filterQuery, cohortQuery, queryParams } = parseFilters({ ...filters, websiteId });
const { filterQuery, cohortQuery, queryParams } = parseFilters({
...filters,
websiteId,
});
return rawQuery(
`

View file

@ -14,9 +14,12 @@ export async function getWebsiteSessionsWeekly(
}
async function relationalQuery(websiteId: string, filters: QueryFilters) {
const { timezone = 'utc' } = filters;
const timezone = 'utc';
const { rawQuery, getDateWeeklySQL, parseFilters } = prisma;
const { queryParams } = parseFilters(filters);
const { filterQuery, joinSessionQuery, cohortQuery, queryParams } = parseFilters({
...filters,
websiteId,
});
return rawQuery(
`
@ -24,8 +27,11 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
${getDateWeeklySQL('created_at', timezone)} as time,
count(distinct session_id) as value
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}
${filterQuery}
group by time
order by 2
`,