Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	queries/analytics/reports/getRetention.ts
This commit is contained in:
Mike Cao 2023-08-16 10:52:20 -07:00
commit d7bf793050
18 changed files with 153 additions and 104 deletions

View file

@ -38,6 +38,8 @@ export async function getReports(
filterType = REPORT_FILTER_TYPES.all,
} = ReportSearchFilter;
const mode = prisma.getSearchMode();
const where: Prisma.ReportWhereInput = {
...(userId && { userId: userId }),
...(websiteId && { websiteId: websiteId }),
@ -73,7 +75,7 @@ export async function getReports(
filterType === REPORT_FILTER_TYPES.name) && {
name: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
}),
},
@ -82,7 +84,7 @@ export async function getReports(
filterType === REPORT_FILTER_TYPES.description) && {
description: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
}),
},
@ -91,7 +93,7 @@ export async function getReports(
filterType === REPORT_FILTER_TYPES.type) && {
type: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
}),
},
@ -101,7 +103,7 @@ export async function getReports(
user: {
username: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
},
}),
@ -112,7 +114,7 @@ export async function getReports(
website: {
name: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
},
}),
@ -123,7 +125,7 @@ export async function getReports(
website: {
domain: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
},
}),

View file

@ -86,6 +86,8 @@ export async function getTeams(
options?: { include?: Prisma.TeamInclude },
): Promise<FilterResult<Team[]>> {
const { userId, filter, filterType = TEAM_FILTER_TYPES.all } = TeamSearchFilter;
const mode = prisma.getSearchMode();
const where: Prisma.TeamWhereInput = {
...(userId && {
teamUser: {
@ -97,7 +99,7 @@ export async function getTeams(
OR: [
{
...((filterType === TEAM_FILTER_TYPES.all || filterType === TEAM_FILTER_TYPES.name) && {
name: { startsWith: filter, mode: 'insensitive' },
name: { startsWith: filter, ...mode },
}),
},
{
@ -109,7 +111,7 @@ export async function getTeams(
user: {
username: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
},
},

View file

@ -41,6 +41,8 @@ export async function getUsers(
options?: { include?: Prisma.UserInclude },
): Promise<FilterResult<User[]>> {
const { teamId, filter, filterType = USER_FILTER_TYPES.all } = UserSearchFilter;
const mode = prisma.getSearchMode();
const where: Prisma.UserWhereInput = {
...(teamId && {
teamUser: {
@ -57,7 +59,7 @@ export async function getUsers(
filterType === USER_FILTER_TYPES.username) && {
username: {
startsWith: filter,
mode: 'insensitive',
...mode,
},
}),
},

View file

@ -30,6 +30,7 @@ export async function getWebsites(
filter,
filterType = WEBSITE_FILTER_TYPES.all,
} = WebsiteSearchFilter;
const mode = prisma.getSearchMode();
const where: Prisma.WebsiteWhereInput = {
...(teamId && {
@ -79,13 +80,13 @@ export async function getWebsites(
{
...((filterType === WEBSITE_FILTER_TYPES.all ||
filterType === WEBSITE_FILTER_TYPES.name) && {
name: { startsWith: filter, mode: 'insensitive' },
name: { startsWith: filter, ...mode },
}),
},
{
...((filterType === WEBSITE_FILTER_TYPES.all ||
filterType === WEBSITE_FILTER_TYPES.domain) && {
domain: { startsWith: filter, mode: 'insensitive' },
domain: { startsWith: filter, ...mode },
}),
},
],

View file

@ -1,11 +1,11 @@
import prisma from 'lib/prisma';
import clickhouse from 'lib/clickhouse';
import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
import { QueryFilters, WebsiteEventDataFields } from 'lib/types';
import { QueryFilters, WebsiteEventData } from 'lib/types';
export async function getEventDataEvents(
...args: [websiteId: string, filters: QueryFilters]
): Promise<WebsiteEventDataFields[]> {
): Promise<WebsiteEventData[]> {
return runQuery({
[PRISMA]: () => relationalQuery(...args),
[CLICKHOUSE]: () => clickhouseQuery(...args),
@ -24,7 +24,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
website_event.event_name as "eventName",
event_data.event_key as "fieldName",
event_data.data_type as "dataType",
event_data.string_value as "value",
event_data.string_value as "fieldValue",
count(*) as "total"
from event_data
inner join website_event
@ -71,7 +71,7 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters) {
event_name as eventName,
event_key as fieldName,
data_type as dataType,
string_value as value,
string_value as fieldValue,
count(*) as total
from event_data
where website_id = {websiteId:UUID}

View file

@ -1,11 +1,11 @@
import prisma from 'lib/prisma';
import clickhouse from 'lib/clickhouse';
import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db';
import { QueryFilters, WebsiteEventDataFields } from 'lib/types';
import { QueryFilters, WebsiteEventData } from 'lib/types';
export async function getEventDataFields(
...args: [websiteId: string, filters: QueryFilters & { field?: string }]
): Promise<WebsiteEventDataFields[]> {
): Promise<WebsiteEventData[]> {
return runQuery({
[PRISMA]: () => relationalQuery(...args),
[CLICKHOUSE]: () => clickhouseQuery(...args),

View file

@ -41,7 +41,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
}
async function clickhouseQuery(websiteId: string, filters: QueryFilters) {
const { timezone = 'utc', unit = 'day' } = filters;
const { timezone = 'UTC', unit = 'day' } = filters;
const { rawQuery, getDateQuery, parseFilters } = clickhouse;
const { filterQuery, params } = await parseFilters(websiteId, {
...filters,

View file

@ -35,7 +35,7 @@ async function relationalQuery(
}[]
> {
const { startDate, endDate, timezone = 'UTC' } = filters;
const { getDateQuery, rawQuery } = prisma;
const { getDateQuery, getDayDiffQuery, getCastColumnQuery, rawQuery } = prisma;
const unit = 'day';
return rawQuery(
@ -50,7 +50,10 @@ async function relationalQuery(
user_activities AS (
select distinct
w.session_id,
(${getDateQuery('created_at', unit, timezone)}::date - c.cohort_date::date) as day_number
${getDayDiffQuery(
getDateQuery('created_at', unit, timezone),
'c.cohort_date',
)} as day_number
from website_event w
join cohort_items c
on w.session_id = c.session_id
@ -79,7 +82,7 @@ async function relationalQuery(
c.day_number as day,
s.visitors,
c.visitors as "returnVisitors",
c.visitors::float * 100 / s.visitors as percentage
${getCastColumnQuery('c.visitors', 'float')} * 100 / s.visitors as percentage
from cohort_date c
join cohort_size s
on c.cohort_date = s.cohort_date
@ -90,7 +93,9 @@ async function relationalQuery(
startDate,
endDate,
},
);
).then(results => {
return results.map(i => ({ ...i, percentage: Number(i.percentage) || 0 }));
});
}
async function clickhouseQuery(