import { db } from "@/db/client"; import { users, watchingNowItems, watchlistItems } from "@/db/schema"; import { count, desc, isNull } from "drizzle-orm"; export const dynamic = "force-dynamic"; function formatDate(value: Date) { return value.toISOString().slice(0, 10); } export default async function AdminUsersPage() { const [userRows, watchingCounts, watchlistCounts] = await Promise.all([ db.select().from(users).orderBy(desc(users.createdAt)), db .select({ userId: watchingNowItems.userId, activeCount: count() }) .from(watchingNowItems) .where(isNull(watchingNowItems.removedAt)) .groupBy(watchingNowItems.userId), db .select({ userId: watchlistItems.userId, activeCount: count() }) .from(watchlistItems) .where(isNull(watchlistItems.removedAt)) .groupBy(watchlistItems.userId), ]); const watchingByUser = new Map(watchingCounts.map((row) => [row.userId, row.activeCount])); const watchlistByUser = new Map(watchlistCounts.map((row) => [row.userId, row.activeCount])); return (

People

Users

User Email Watch Now Watchlist Joined
{userRows.length ? userRows.map((user) => (

{user.displayName}

{user.isAdmin ? "Admin" : "User"}

{user.email}

{watchingByUser.get(user.id) ?? 0}/{user.watchingNowTvSlots + user.watchingNowMovieSlots}

{watchlistByUser.get(user.id) ?? 0}

{formatDate(user.createdAt)}

)) :

No users found.

}
); }