import { prisma } from "@/lib/prisma"
import Navigation from "@/components/Navigation"
import Link from "next/link"
import { getSession } from "@/lib/auth-simple"
import { redirect } from "next/navigation"
import { getTournamentStatus } from "@/lib/tournamentUtils"
export default async function AdminTournamentsPage() {
const session = await getSession()
if (!session) {
redirect("/auth/login")
}
// Fetch user role from database
const user = await prisma.user.findUnique({
where: { id: session.user.id },
select: { role: true },
});
const isAdmin = user?.role === "club_admin"
const tournaments = await prisma.event.findMany({
orderBy: { createdAt: "desc" },
include: {
participants: true,
teams: {
include: {
player1: true,
player2: true,
},
},
},
})
// Update tournament statuses based on event date
const updatedTournaments = await Promise.all(
tournaments.map(async (tournament) => {
const calculatedStatus = getTournamentStatus(tournament.eventDate);
// Only update if the calculated status differs from the stored status
if (tournament.status !== calculatedStatus) {
await prisma.event.update({
where: { id: tournament.id },
data: { status: calculatedStatus },
});
return { ...tournament, status: calculatedStatus };
}
return tournament;
})
)
return (
{isAdmin ? 'Tournament Management' : 'Tournaments'}
{isAdmin && (
Create Tournament
)}
|
Tournament
|
Format
|
Status
|
Participants
|
Actions
|
{updatedTournaments.map((tournament) => (
|
{tournament.name}
{tournament.eventDate && (
{new Date(tournament.eventDate).toLocaleDateString()}
)}
|
{tournament.format}
|
{tournament.status}
|
{tournament.participants.length}
|
View
{isAdmin && (
Edit
)}
|
))}
{updatedTournaments.length === 0 && (
No tournaments found.
{isAdmin && (
Create your first tournament
)}
)}
)
}