import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/db'; import { getSession, isAdmin } from '@/lib/auth'; import { Role } from '@/types'; export async function GET(request: NextRequest) { const session = await getSession(); if (!session || !isAdmin(session.user.role as Role)) { return NextResponse.json({ error: 'Forbidden' }, { status: 403 }); } try { const [ totalUsers, recentSignups, pendingDFY, usersWithOnboarding, ] = await Promise.all([ prisma.user.count(), prisma.user.count({ where: { createdAt: { gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), }, }, }), prisma.dFYRequest.count({ where: { status: 'PENDING' } }), prisma.user.findMany({ include: { onboarding: true, setupStatus: true }, }), ]); // Calculate high GCI users const highGCIUsers = usersWithOnboarding.filter(u => u.onboarding?.gciLast12Months?.includes('100') || u.onboarding?.gciLast12Months?.includes('250') ).length; // Calculate incomplete setup const incompleteSetup = usersWithOnboarding.filter(u => !u.setupStatus?.smsConfigured || !u.setupStatus?.emailConfigured ).length; return NextResponse.json({ stats: { totalUsers, highGCIUsers, incompleteSetup, dfyRequestsPending: pendingDFY, recentSignups, }, }); } catch (error) { return NextResponse.json({ error: 'Failed to fetch stats' }, { status: 500 }); } }