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
|
Email
|
Name
|
Role
|
Associated Player
|
Created
|
Actions
|
{users.map((user) => (
|
{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
)}
)}
);
}