diff options
Diffstat (limited to 'src/queries/sql/getWebsiteDateRange.ts')
| -rw-r--r-- | src/queries/sql/getWebsiteDateRange.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/queries/sql/getWebsiteDateRange.ts b/src/queries/sql/getWebsiteDateRange.ts new file mode 100644 index 0000000..d6333ad --- /dev/null +++ b/src/queries/sql/getWebsiteDateRange.ts @@ -0,0 +1,55 @@ +import clickhouse from '@/lib/clickhouse'; +import { DEFAULT_RESET_DATE } from '@/lib/constants'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; + +export async function getWebsiteDateRange(...args: [websiteId: string]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string) { + const { rawQuery, parseFilters } = prisma; + const { queryParams } = parseFilters({ + startDate: new Date(DEFAULT_RESET_DATE), + websiteId, + }); + + const result = await rawQuery( + ` + select + min(created_at) as "startDate", + max(created_at) as "endDate" + from website_event + where website_id = {{websiteId::uuid}} + and created_at >= {{startDate}} + `, + queryParams, + ); + + return result[0] ?? null; +} + +async function clickhouseQuery(websiteId: string) { + const { rawQuery, parseFilters } = clickhouse; + const { queryParams } = parseFilters({ + startDate: new Date(DEFAULT_RESET_DATE), + websiteId, + }); + + const result = await rawQuery( + ` + select + min(created_at) as startDate, + max(created_at) as endDate + from website_event_stats_hourly + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime64} + `, + queryParams, + ); + + return result[0] ?? null; +} |