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 } },
+ },
+ })
+ }),
})