From ab2c73bad23b2777f41ab1d33258987dfe1454c0 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 23 Feb 2026 17:15:42 +0100 Subject: [PATCH] Add 5-second auto-refresh for dashboard Activity feed Co-Authored-By: Claude Opus 4.6 --- src/app/(admin)/admin/dashboard-content.tsx | 6 +++++- src/server/routers/dashboard.ts | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/app/(admin)/admin/dashboard-content.tsx b/src/app/(admin)/admin/dashboard-content.tsx index 3fd3bdd..7466454 100644 --- a/src/app/(admin)/admin/dashboard-content.tsx +++ b/src/app/(admin)/admin/dashboard-content.tsx @@ -121,6 +121,10 @@ export function DashboardContent({ editionId, sessionName }: DashboardContentPro { editionId, limit: 8 }, { enabled: !!editionId, refetchInterval: 30_000 } ) + const { data: liveActivity } = trpc.dashboard.getRecentActivity.useQuery( + { limit: 8 }, + { enabled: !!editionId, refetchInterval: 5_000 } + ) if (isLoading) { return @@ -268,7 +272,7 @@ export function DashboardContent({ editionId, sessionName }: DashboardContentPro - + diff --git a/src/server/routers/dashboard.ts b/src/server/routers/dashboard.ts index bb8cfe9..bb21b34 100644 --- a/src/server/routers/dashboard.ts +++ b/src/server/routers/dashboard.ts @@ -553,4 +553,22 @@ export const dashboardRouter = router({ return evaluations }), + + getRecentActivity: adminProcedure + .input(z.object({ limit: z.number().int().min(1).max(20).optional() })) + .query(async ({ ctx, input }) => { + const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) + return ctx.prisma.auditLog.findMany({ + where: { timestamp: { gte: sevenDaysAgo } }, + orderBy: { timestamp: 'desc' }, + take: input.limit ?? 8, + select: { + id: true, + action: true, + entityType: true, + timestamp: true, + user: { select: { name: true } }, + }, + }) + }), })