import { NextRequest, NextResponse } from 'next/server'; import { db } from '@/lib/db'; import { users, bookings, courts } from '@/lib/db/schema'; import { eq, count, and, gte } from 'drizzle-orm'; import { getSession } from '@/lib/session'; export async function GET(request: NextRequest) { try { const session = await getSession(); if (!session) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } // Get current date const today = new Date(); const todayStr = today.toISOString().split('T')[0]; // Get total users count const [totalUsersResult] = await db.select({ count: count() }).from(users); // Get today's bookings count const [todayBookingsResult] = await db .select({ count: count() }) .from(bookings) .where(and(eq(bookings.date, todayStr), eq(bookings.status, 'active'))); // Get active courts count const [activeCourtsResult] = await db.select({ count: count() }).from(courts).where(eq(courts.isActive, true)); // Get user's total bookings const [userBookingsResult] = await db .select({ count: count() }) .from(bookings) .where(and(eq(bookings.userId, session.userId), eq(bookings.status, 'active'))); // Get user's upcoming bookings (today and future) const [upcomingBookingsResult] = await db .select({ count: count() }) .from(bookings) .where( and(eq(bookings.userId, session.userId), gte(bookings.date, todayStr), eq(bookings.status, 'active')) ); return NextResponse.json({ stats: { totalUsers: totalUsersResult.count, todayBookings: todayBookingsResult.count, activeCourts: activeCourtsResult.count, userBookings: userBookingsResult.count, upcomingBookings: upcomingBookingsResult.count, }, }); } catch (error) { console.error('Error fetching dashboard stats:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }