export const dynamic = 'force-dynamic'; import { createServerComponentClient } from '@supabase/auth-helpers-nextjs'; import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; import { checkIsAdmin } from '@/services/track-api-usage'; import { getAllUsersWithCredits } from '@/services/admin-credit-service'; import { getAllPlans } from '@/services/subscription-service'; import Link from 'next/link'; import { ChevronLeft, Users, Coins, TrendingUp, TrendingDown } from 'lucide-react'; import UserManagementClient from '@/components/UserManagementClient'; export default async function AdminUsersPage() { const supabase = createServerComponentClient({ cookies }); const { data: { user } } = await supabase.auth.getUser(); if (!user) { redirect('/'); } const isAdmin = await checkIsAdmin(user.id); if (!isAdmin) { redirect('/'); } // Fetch all users with credits const users = await getAllUsersWithCredits(); // Fetch all plans const plans = await getAllPlans(); // Calculate statistics const totalUsers = users.length; const totalCreditsInCirculation = users.reduce((sum, u) => sum + u.balance, 0); const totalCreditsPurchased = users.reduce((sum, u) => sum + u.total_purchased, 0); const totalCreditsUsed = users.reduce((sum, u) => sum + u.total_used, 0); return (
{/* Header */}
Back to Dashboard

User Management

Manage user credits and limits

{/* Statistics Cards */}
Total Users
{totalUsers}
Credits in Circulation
{totalCreditsInCirculation.toLocaleString()}
Total Purchased
{totalCreditsPurchased.toLocaleString()}
Total Used
{totalCreditsUsed.toLocaleString()}
{/* User Management Table */}
); }