umami/queries/analytics/stats/getWebsiteDateRange.ts

50 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-07-26 00:17:50 +02:00
import prisma from 'lib/prisma';
import clickhouse from 'lib/clickhouse';
import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
import { DEFAULT_RESET_DATE } from 'lib/constants';
export async function getWebsiteDateRange(...args: [websiteId: string]) {
return runQuery({
[PRISMA]: () => relationalQuery(...args),
[CLICKHOUSE]: () => clickhouseQuery(...args),
});
}
async function relationalQuery(websiteId: string) {
2023-08-04 22:18:30 +02:00
const { rawQuery, parseFilters } = prisma;
const { params } = await parseFilters(websiteId, { startDate: new Date(DEFAULT_RESET_DATE) });
2023-07-26 00:17:50 +02:00
const result = await rawQuery(
2023-07-26 00:17:50 +02:00
`
select
min(created_at) as mindate,
max(created_at) as maxdate
2023-07-26 00:17:50 +02:00
from website_event
2023-07-26 18:55:54 +02:00
where website_id = {{websiteId::uuid}}
and created_at >= {{startDate}}
2023-07-26 00:17:50 +02:00
`,
2023-08-04 22:18:30 +02:00
params,
2023-07-26 00:17:50 +02:00
);
return result[0] ?? null;
2023-07-26 00:17:50 +02:00
}
async function clickhouseQuery(websiteId: string) {
2023-08-04 22:18:30 +02:00
const { rawQuery, parseFilters } = clickhouse;
const { params } = await parseFilters(websiteId, { startDate: new Date(DEFAULT_RESET_DATE) });
2023-07-26 00:17:50 +02:00
const result = await rawQuery(
2023-07-26 00:17:50 +02:00
`
select
min(created_at) as mindate,
max(created_at) as maxdate
2023-07-26 00:17:50 +02:00
from website_event
where website_id = {websiteId:UUID}
2023-07-26 07:50:55 +02:00
and created_at >= {startDate:DateTime}
2023-07-26 00:17:50 +02:00
`,
2023-08-04 22:18:30 +02:00
params,
2023-07-26 00:17:50 +02:00
);
return result[0] ?? null;
2023-07-26 00:17:50 +02:00
}