"use client"; import { useState, useEffect } from "react"; interface Stats { totalUsers: number; totalWebinars: number; totalRegistrations: number; revenue: number; upcomingWebinars: number; } interface Webinar { id: string; title: string; startAt: string; speaker: string; } interface Registration { id: string; createdAt: string; user: { firstName: string; lastName: string; email: string }; webinar: { title: string }; } export default function AdminPage() { const [stats, setStats] = useState({ totalUsers: 0, totalWebinars: 0, totalRegistrations: 0, revenue: 0, upcomingWebinars: 0, }); const [upcomingWebinars, setUpcomingWebinars] = useState([]); const [recentRegistrations, setRecentRegistrations] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchDashboardData(); }, []); const fetchDashboardData = async () => { try { const [webinarsRes, registrationsRes] = await Promise.all([ fetch("/api/webinars?limit=100"), fetch("/api/registrations?limit=10"), ]); const webinarsData = await webinarsRes.ok ? await webinarsRes.json() : { webinars: [] }; const registrationsData = await registrationsRes.ok ? await registrationsRes.json() : { registrations: [] }; const now = new Date(); const upcoming = webinarsData.webinars?.filter((w: Webinar) => new Date(w.startAt) > now) || []; const revenue = registrationsData.registrations?.reduce( (sum: number, reg: any) => sum + (reg.webinar?.priceCents || 0), 0 ) || 0; // Get unique users from registrations const uniqueUsers = new Set(registrationsData.registrations?.map((r: any) => r.userId) || []); setStats({ totalUsers: uniqueUsers.size, totalWebinars: webinarsData.webinars?.length || 0, totalRegistrations: registrationsData.registrations?.length || 0, revenue: revenue / 100, upcomingWebinars: upcoming.length, }); setUpcomingWebinars(upcoming.slice(0, 5)); setRecentRegistrations(registrationsData.registrations?.slice(0, 5) || []); } catch (error) { console.error("Failed to fetch dashboard data:", error); } finally { setLoading(false); } }; if (loading) { return (

Loading dashboard...

); } return (

Dashboard

Welcome back, suman. Here's what's happening.

Total Webinars

📹
{stats.totalWebinars}

⏱️ {stats.upcomingWebinars} upcoming

Total Users

👥
{stats.totalUsers}

Registered accounts

Registrations

📝
{stats.totalRegistrations}

📊 0 this month

Total Revenue

💰
${stats.revenue.toFixed(0)}

From paid webinars

Recent Registrations

View All
{recentRegistrations.length === 0 ? (
No registrations yet
) : (
{recentRegistrations.map((reg) => (

{reg.user?.firstName} {reg.user?.lastName}

{reg.webinar?.title}

{new Date(reg.createdAt).toLocaleDateString()}

))}
)}

Upcoming Webinars

Manage
{upcomingWebinars.length === 0 ? (

No upcoming webinars

Create Webinar
) : (
{upcomingWebinars.map((webinar) => (

{webinar.title}

{webinar.speaker}

{new Date(webinar.startAt).toLocaleDateString()}

))}
)}
); }