aboutsummaryrefslogtreecommitdiff
path: root/src/queries/sql/events/getEventUsage.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/queries/sql/events/getEventUsage.ts')
-rw-r--r--src/queries/sql/events/getEventUsage.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/queries/sql/events/getEventUsage.ts b/src/queries/sql/events/getEventUsage.ts
new file mode 100644
index 0000000..40f5a96
--- /dev/null
+++ b/src/queries/sql/events/getEventUsage.ts
@@ -0,0 +1,38 @@
+import clickhouse from '@/lib/clickhouse';
+import { CLICKHOUSE, notImplemented, PRISMA, runQuery } from '@/lib/db';
+import type { QueryFilters } from '@/lib/types';
+
+const FUNCTION_NAME = 'getEventUsage';
+
+export function getEventUsage(...args: [websiteIds: string[], filters: QueryFilters]) {
+ return runQuery({
+ [PRISMA]: notImplemented,
+ [CLICKHOUSE]: () => clickhouseQuery(...args),
+ });
+}
+
+function clickhouseQuery(
+ websiteIds: string[],
+ filters: QueryFilters,
+): Promise<{ websiteId: string; count: number }[]> {
+ const { rawQuery } = clickhouse;
+ const { startDate, endDate } = filters;
+
+ return rawQuery(
+ `
+ select
+ website_id as websiteId,
+ count(*) as count
+ from website_event
+ where website_id in {websiteIds:Array(UUID)}
+ and created_at between {startDate:DateTime64} and {endDate:DateTime64}
+ group by website_id
+ `,
+ {
+ websiteIds,
+ startDate,
+ endDate,
+ },
+ FUNCTION_NAME,
+ );
+}