import type { Metadata } from "next"; import { db } from "@epicure/db"; import { users, recipes, userUsage, recipePhotos } from "@epicure/db"; import { count, eq, sql } from "@epicure/db"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Users, BookOpen, Sparkles, Image } from "lucide-react"; export const metadata: Metadata = {}; export default async function AdminPage() { const currentMonth = new Date().toISOString().slice(0, 7); const [userCount, recipeCount, proUserCount, aiUsage, imageCount] = await Promise.all([ db.select({ count: count() }).from(users).then((r) => r[0]), db.select({ count: count() }).from(recipes).then((r) => r[0]), db.select({ count: count() }).from(users).where(eq(users.tier, "pro")).then((r) => r[0]), db .select({ total: sql`coalesce(sum(${userUsage.aiCallsUsed}), 0)` }) .from(userUsage) .where(eq(userUsage.month, currentMonth)) .then((r) => r[0]), db.select({ count: count() }).from(recipePhotos).then((r) => r[0]), ]); const stats = [ { label: "Total Users", value: userCount?.count ?? 0, sub: `${proUserCount?.count ?? 0} pro`, icon: Users }, { label: "Total Recipes", value: recipeCount?.count ?? 0, icon: BookOpen }, { label: "AI Calls This Month", value: Number(aiUsage?.total ?? 0), icon: Sparkles }, { label: "Recipe Photos", value: imageCount?.count ?? 0, icon: Image }, ]; return (

Overview

{stats.map(({ label, value, sub, icon: Icon }) => ( {label}
{value.toLocaleString()}
{sub &&

{sub}

}
))}
); }