import { NextResponse } from 'next/server'; import { getDb } from '@/lib/db'; import { requireAdmin } from '@/lib/auth-middleware'; /** * GET /api/admin/stats — aggregate platform statistics (admin only). */ export async function GET(req: Request) { const admin = requireAdmin(req); if (!admin) return NextResponse.json({ error: 'Admin access required' }, { status: 403 }); const db = getDb(); const totalUsers = (db.prepare('SELECT COUNT(*) as c FROM users').get() as any).c; const verifiedUsers = (db.prepare('SELECT COUNT(*) as c FROM users WHERE email_verified = 1').get() as any).c; const adminUsers = (db.prepare('SELECT COUNT(*) as c FROM users WHERE is_admin = 1').get() as any).c; const totalHealthData = (db.prepare('SELECT COUNT(*) as c FROM health_data').get() as any).c; const totalChats = (db.prepare('SELECT COUNT(*) as c FROM chat_history').get() as any).c; const activeSessions = (db.prepare("SELECT COUNT(*) as c FROM sessions WHERE expires_at > datetime('now')").get() as any).c; // Health data breakdown by type. const healthBreakdown = db .prepare('SELECT type, COUNT(*) as count FROM health_data GROUP BY type ORDER BY count DESC') .all() as any[]; // Registrations over time (last 30 days). const registrations = db .prepare( `SELECT date(created_at) as day, COUNT(*) as count FROM users WHERE created_at > datetime('now', '-30 days') GROUP BY day ORDER BY day`, ) .all() as any[]; return NextResponse.json({ totalUsers, verifiedUsers, adminUsers, totalHealthData, totalChats, activeSessions, healthBreakdown, registrations, }); }