import { prisma } from "@/lib/prisma" import Navigation from "@/components/Navigation" import Link from "next/link" import { redirect } from "next/navigation" import { getSession } from "@/lib/auth-simple" import { hasRole } from "@/lib/permissions" import UserActions from "./components/UserActions" export const dynamic = "force-dynamic"; export default async function AdminUsersPage() { // Check permissions const permission = await hasRole("club_admin"); if (!permission.allowed) { redirect("/auth/login"); } const session = await getSession(); const userId = session?.user?.id || session?.user?.userId; // Check if user is site_admin for delete permissions const isSiteAdmin = await hasRole("site_admin"); // Fetch all users with their associated players const users = await prisma.user.findMany({ orderBy: { createdAt: "desc" }, include: { player: true, }, }); // Fetch all players without associated users const playersWithoutUsers = await prisma.player.findMany({ where: { user: null, }, orderBy: { name: "asc" }, }); return (
{/* Page Header */}

User Management

Create users and associate them with players.

+ Create User
{/* Users List */}

All Users

{users.map((user) => ( ))}
Email Name Role Associated Player Created Actions
{user.email} {user.name || "-"} {user.role} {user.player ? ( {user.player.name} ) : ( Not assigned )} {new Date(user.createdAt).toLocaleDateString()}
{/* Players without users */} {playersWithoutUsers.length > 0 && (

Players without associated users

The following players exist but don't have an associated user account.

    {playersWithoutUsers.slice(0, 5).map((player) => (
  • {player.name} Create user for this player
  • ))} {playersWithoutUsers.length > 5 && (
  • ...and {playersWithoutUsers.length - 5} more
  • )}
)}
); }