From 9856fa954faf145dedd8125043076c25aae853e2 Mon Sep 17 00:00:00 2001 From: Joe Furfaro Date: Sun, 17 Mar 2024 22:02:57 -0700 Subject: [PATCH] restored checkin graph with 15 minute intervals --- lib/routes/events.ts | 4 ++-- lib/services/events.ts | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/routes/events.ts b/lib/routes/events.ts index 01cf8b7..cdd7ae8 100644 --- a/lib/routes/events.ts +++ b/lib/routes/events.ts @@ -1,6 +1,6 @@ import Router from '@koa/router'; import { authorizeUser, requiresPermission } from '../middleware/auth.js'; -import { getEvents, getEvent, createEvent, updateEvent, getEventSummary, getOpeningSales, getEventExtendedStats, getEventDailyTickets } from '../services/events.js'; +import { getEvents, getEvent, createEvent, updateEvent, getEventSummary, getOpeningSales, getEventExtendedStats, getEventDailyTickets, getEventCheckins } from '../services/events.js'; const eventsRouter = new Router({ prefix: '/events' @@ -87,7 +87,7 @@ eventsRouter let chartData; switch(chartType) { case 'checkIns': - // chartData = await getEventCheckins(ctx.params.id); + chartData = await getEventCheckins(ctx.params.id); break; case 'openingSales': diff --git a/lib/services/events.ts b/lib/services/events.ts index 2778db8..c1c488a 100644 --- a/lib/services/events.ts +++ b/lib/services/events.ts @@ -319,7 +319,7 @@ export async function getEventExtendedStats(id) { } } -export async function getEventDailyTickets(id) { +export async function getEventDailyTickets(id: string) { try { const chart = (await sql` SELECT @@ -344,9 +344,9 @@ export async function getEventDailyTickets(id) { } } -export async function getOpeningSales(id) { +export async function getOpeningSales(id: string) { try { - const chart = (await sql` + const chart = (await sql<{minuteCreated: string; tickets: string}[]>` SELECT DATE_TRUNC('minute', (o.created AT TIME ZONE 'UTC')) AS minute_created, SUM(oi.quantity) as tickets @@ -368,6 +368,29 @@ export async function getOpeningSales(id) { })); + return chart; + } catch(e) { + throw new EventsServiceError('Could not query event extended stats', 'UNKNOWN', e); + } +} + +export async function getEventCheckins(id: string) { + try { + const chart = (await sql<{minuteCheckedIn: string; checkins: string}[]>` + SELECT + date_bin('15 minutes', (g.check_in_time AT TIME ZONE 'UTC'), TIMESTAMP '2010-01-01') AS minute_checked_in, + count(g.id) as checkins + FROM guests AS g + WHERE g.event_id = ${id} + AND g.status = 'checked_in' + GROUP BY minute_checked_in + ORDER BY 1 ASC; + `).map(row => ({ + ...row, + checkins: Number(row.checkins) + })); + + return chart; } catch(e) { throw new EventsServiceError('Could not query event extended stats', 'UNKNOWN', e);